Web安全之CSRF

一、漏洞简介

1.1、CSRF漏洞详情

什么是CSRF

CSRF 是跨站请求伪造,也被称为 One Click Attack 或者 Session Riding ,通常缩写为 CSRF 或者 XSRF ,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与 XSS 非常不同, XSS 利用站点内的信任用户,而 CSRF 则通过伪装来自受信任用户的请求来利用受信任的网站。与 XSS 攻击相比, CSRF 攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比 XSS 更具危险性。
CSRF可以做什么

你这可以这么理解 CSRF 攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF 能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…造成的问题包括:个人隐私泄露以及财产安全。

如何发现CSRF

对目标网站增删改的地方进行标记,并观察其逻辑,判断请求是否可以被伪造。

CSRF攻击流程

攻击流程图片1:

攻击流程图片2:

1.2、CSRF漏洞修复

增加二次验证机制

验证 HTTP Referer 字段

在请求地址中添加 token 并验证

在 HTTP 头中自定义属性并验证

二、环境下载

Pikachu:https://github.com/zhuifengshaonianhanlu/pikachu/archive/refs/heads/master.zip

三、漏洞利用

3.1、GET请求CSRF

实验描述

银行网站 A,它以 GET 请求来完成修改个人信息的操作。

危险网站B,它里面有一段HTML的代码如下:

<img src=http://www.yinhang.com/Information.php?name=hack&phone=10086>

首先,你登录了银行网站A,然后访问危险网站B,诶嘿,这时你会发现你的个人信息被改了。

实际演示

普通用户:账号vince        密码123456

黑客的用户:账号allen        密码123456

访问 pikachu 下的 CSRF -> CSRF(get) 漏洞环境。

这里模仿黑客构造 CSRF 链接,登录 allen 账号。

登录后有个修改功能的按钮,点击 "修改个人信息"。

这里将信息改为如下内容。

点击 "submit" 提交时利用 Burp 将数据包抓取。

将 URL 复制下来,构造恶意链接,最终构造链接如下:

http://192.168.149.77/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=13676767767&add=nba+666&email=allen%40pikachu.com&submit=submit

构造好链接后,模拟受害者被攻击的过程。

登录 vince 账号。

然后访问攻击者的 CSRF 链接,访问完毕后就会发现信息全被修改了。

3.2、POST请求CSRF

银行网站 A,它以 POST 请求来完成修改个人信息的操作。

危险网站B,它里面有一段HTML的代码如下:

1

首先,你登录了银行网站A,然后访问危险网站B,诶嘿,这时你会发现你的个人信息又又被改了。

实际演示

普通用户:账号vince        密码123456

黑客的用户:账号allen        密码123456

访问 pikachu 下的 CSRF -> CSRF(post) 漏洞环境。

 模仿黑客构造 CSRF 链接,登录 allen 账号。

登录后有个修改功能的按钮,点击 "修改个人信息"。

将信息修改成如下图。

点击 "submit" 提交时利用 Burp 将数据包抓取。

右键选择 Engagement tools -> Generate CSRF Poc 构造恶意的 HTML。

复制 HTML 内容保存到攻击者的 Kali 里的 Web 目录下。

在 www 目录下开启 python3 的 http 服务。

最终 CSRF 的链接为。

http://172.26.147.94/csrf.html

构造好链接后,模拟受害者被攻击的过程。

登录 vince 账号。

然后访问攻击者的 CSRF 链接。

点击 Submit request 后就会跳转回来到修改个人信息的页面,此时就发现个人信息全被修改了。

3.3、CSRF Token

Token作用:

  • 防止表单重复提交:服务端收到客户端发送的Token后,如果和Session中的值相同,此时客户端中session中的Token会更新。
  • 防止CSRF(跨站请求攻击):在用户每次修改数据时都会重新生成一个 Token 从而攻击者无法攻击。说白了就是一个 Token 只能修改一次内容,下再修改就得获取下一个 Token 值以此类推

实践演示

普通用户:账号vince        密码123456

黑客的用户:账号allen        密码123456

访问 pikachu 下的 CSRF -> CSRF Token 漏洞环境。

模仿黑客构造 CSRF 链接,登录 allen 账号。

登录后有个修改功能的按钮,点击 "修改个人信息"。

将信息修改成如下图。

点击 "submit" 提交时利用 Burp 将数据包抓取。

可以看到数据包多了个 token 的参数。将数据包发送到 Repeater 模块,然后将 Proxy 的数据包放掉。

然后回到页面中可以看到刚刚放掉的包已经修改成 "china666" 了。

回到 Repeater 模块,将 china666 修改为 chinanb。

点击 Send 发送。

可以看到已经无法修改了,因为这里有个 Token 的防御,我们需要获取到新的 Token 才能进行修改。

这里需要用到一个插件 CSRF Token Tracker。

设置好 Host 和 Name 的值,然后勾选上。

回到 Repeater 模块,点击两次 Send 即可修改信息。

而可以一直修改不用修改数据包里的 token 值了。

这里回到插件里可以看到每次我们点一次 Send 这里的 Value 都会改变。

实验结束

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值