声明:本文中所有操作均在合法合规的靶场环境、虚拟环境中进行。
任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动;不得提供专门用于从事侵入网络、干扰网络正常功能及防护措施、窃取网络数据等危害网络安全活动的程序、工具;明知他人从事危害网络安全的活动的,不得为其提供技术支持、广告推广、支付结算等帮助。
一、CSRF 漏洞(跨站请求伪造)
1. 漏洞定义
CSRF(Cross-Site Request Forgery,跨站请求伪造),是一种劫持用户身份的攻击方式。攻击者构造恶意请求,欺骗用户在已登录状态下触发非预期操作,且用户对请求完全无感知。
2. 攻击核心逻辑
-
用户登录目标网站(如银行、论坛),浏览器中保存了有效 Cookie / 会话凭证;
-
攻击者构造恶意链接 / 页面,诱导用户点击;
-
用户浏览器自动携带 Cookie 向目标网站发送请求,服务器误判为用户主动操作,执行修改信息、转账等敏感操作。
3. Pikachu 靶场 CSRF(GET 型)复现
场景:修改个人信息
抓包获取请求
-
登录靶场,进入 "修改个人信息" 页面;
-
提交修改请求,按 F12打开开发者工具,在 "网络" 面板中找到请求 URL。
示例:
http://pikachu.test/vul/csrf/csrfget/csrf_get.php?sex=boy&phonenum=12345678901&add=china&email=test@test.com&submit=submit
攻击方式一:构造恶意链接
-
将上述请求 URL 作为恶意链接,发送给已登录的目标用户;
-
用户点击链接后,浏览器自动携带 Cookie 执行请求,个人信息被篡改。
攻击方式二:构造恶意 HTML 页面(方式一进阶)
- 编写
sex1.html,将请求嵌入<script>标签,部署到恶意服务器;
<script src="http://pikachu.test/vul/csrf/csrfget/csrf_get.php?sex=boy&phonenum=12345678901&add=china&email=test@test.com&submit=submit"></script>
- 用户访问该页面时,脚本自动发送请求,无需用户主动点击链接。
攻击方式三:BP 抓包生成 PoC
-
使用 Burp Suite 拦截修改个人信息的请求;
-
右键请求 →
Engagement tools→Generate CSRF PoC,自动生成恶意 HTML 代码; -
保存为
sex2.html,发送给目标用户即可触发攻击。
攻击方式四:CSRF Tester 工具生成(POST 型)
-
打开 CSRF Tester 工具,设置代理端口(默认 8008);
-
点击
Start Recording,捕获目标网站的 POST 请求; -
GET 请求可直接用
<img>标签嵌入,POST 请求需用<form>表单模拟; -
点击
Generate HTML,生成sex3.html,用户访问后自动提交 POST 请求。
二、SSRF 漏洞(服务器端请求伪造)
1. 漏洞定义
SSRF(Server-Side Request Forgery,服务器端请求伪造),是一种利用服务器身份发起请求的攻击方式。攻击者通过构造恶意请求,让服务器主动访问内网 / 本地资源,突破防火墙限制。
2. 攻击核心逻辑
-
服务器端存在可发起网络请求的功能(如图片加载、采集、代理服务);
-
攻击者输入恶意 URL,服务器未对目标地址做校验,直接发起请求;
-
攻击者借此探测内网、读取本地文件、攻击内网服务。
3. 常见攻击 Payload
| 攻击目标 | Payload 示例 | 说明 |
|---|---|---|
| 内网探测(HTTP 服务) | http://127.0.0.1:80 |
访问服务器本地 80 端口 |
| 读取本地文件(Windows) | file:///C:/Windows/System32/drivers/etc/hosts |
读取系统 hosts 文件 |
| 读取本地文件(Linux) | file:///etc/passwd |
读取系统用户信息 |
| 探测 FTP 服务 | ftp://192.168.43.27:21 |
访问内网 FTP 服务器 |
4. 靶场实战 1:ssrf.php 基础靶场
-
访问靶场地址,输入上述 Payload;
-
服务器会根据 Payload 发起请求,返回内网 / 本地资源内容;
-
若服务器无协议限制,可尝试
dict://gopher://等协议,攻击 Redis 等服务。
5. 靶场实战 2:YzmCMS SSRF 漏洞复现
环境信息
-
靶场地址:
yzm -
后台账号 / 密码:
yzmcms/yzmcms -
漏洞触发点:
模块管理→采集管理(作为 SSRF 解析器)
复现步骤
-
登录后台
访问靶场后台地址,输入账号密码登录。
-
配置采集任务
- 网络配置:填写靶场自身 IP 地址,指向
ssrf.html文件
http://[靶场IP]/ssrf.html-
区域开始:
<ssrf> -
区域结束:
</ssrf>
- 网络配置:填写靶场自身 IP 地址,指向
-
编写 `ssrf.html`(核心 Payload)
在靶场服务器根目录创建 ssrf.html,在 <ssrf>标签内写入 SSRF 目标地址:
<ssrf>file:///C:/Windows/System32/drivers/etc/hosts</ssrf> -
执行采集任务
保存配置并执行采集,服务器会:
-
访问自身的
ssrf.html; -
解析
<ssrf>标签内的内容; -
执行 SSRF 请求,读取 hosts 文件并返回结果。
-
三、CSRF 与 SSRF 核心区别对比
| 维度 | CSRF | SSRF |
|---|---|---|
| 发起请求主体 | 受害者浏览器 | 目标服务器 |
| 攻击对象 | 受害者账号(已登录状态) | 服务器内网 / 本地资源 |
| 依赖条件 | 需用户登录且点击恶意链接 | 服务器存在可发起请求的功能 |
| 防护核心 | 校验 Referer、使用 CSRF Token | 限制目标地址(禁止内网 / 本地)、禁用危险协议 |
四、漏洞防护要点
CSRF 防护
-
关键操作使用 POST 请求,避免 GET 直接触发;
-
引入 CSRF Token,服务器端校验请求中的 Token;
-
校验 Referer 字段,限制请求来源域名;
-
敏感操作添加验证码 / 二次确认。
SSRF 防护
-
限制请求协议,仅允许
http/https,禁用file://ftp://等; -
校验目标 IP,禁止访问内网、本地回环地址;
-
设置请求超时时间,避免被用于端口扫描;
-
对请求内容做严格校验,过滤敏感字符。
五、学习拓展
-
CSRF 进阶:结合 XSS 漏洞绕过 Referer 校验、利用 JSONP 发起跨域请求;
-
SSRF 进阶:利用
gopher://协议攻击 Redis/MySQL、结合 302 跳转绕过 IP 限制; -
靶场拓展:尝试
mi 靶场中的 CSRF 场景,练习复杂场景下的漏洞利用。