WEB安全梳理-请求伪造漏洞
字数 2653 2025-08-12 12:46:02
WEB安全教学文档:请求伪造漏洞(SSRF与CSRF)
一、服务器端请求伪造(SSRF)
1. SSRF概述
SSRF(Server-Side Request Forgery)是一种由攻击者构造恶意数据,形成由服务端发起请求的安全漏洞。攻击者可以利用服务器发起对内部系统的请求,从而访问从外网无法直接访问的内部资源。
2. SSRF漏洞成因
- Web应用提供了从其他服务器获取数据的功能
- 使用用户指定的URL获取图片、下载文件或读取文件内容
- 服务器未对用户提供的URL进行充分验证和过滤
3. SSRF攻击方式
- 端口扫描:对外网、内网或本地进行端口扫描,获取服务banner信息
- 指纹识别:对内网web应用进行指纹识别,通过访问默认文件实现
- 攻击web应用:利用GET参数攻击内外网web应用(如Struts2、SQLi等)
- 攻击本地应用:攻击运行在内网或本地的应用程序(如溢出漏洞)
- 读取本地文件:利用file协议读取本地文件
常用协议:http/https、dict、file、gopher、sftp、ldap、tftp
4. 易受攻击场景
- 从用户指定URL获取图片并保存展示
- 获取用户指定URL的数据(文件或HTML)
- 根据用户提供的URL抓取web站点并生成移动wap站
- 提供测速功能,根据URL获取目标站点访问速度
5. SSRF漏洞检测
PHP类检测函数:
file_get_contents()fsockopen()curl_exec()
JSP类检测:
- Request类
- URL类的openStream
- HttpClient类
- URLConnection和HttpURLConnection类
6. SSRF漏洞利用
有回显型:
- 直接通过页面加载目标资产
- 先尝试加载
http://www.baidu.com确认漏洞存在 - 替换为内网IP进行内网资产扫描
无回显型:
- 配合dnslog平台测试
- 通过响应时间判断内网资产是否存在
- 利用内网资产漏洞(如Redis、可RCE的web框架)证明漏洞有效性
7. SSRF常见攻击案例
-
攻击服务器自身:
- 通过环回地址(127.0.0.1、localhost)访问服务器自身管理后台
- 示例:
stockApi=http://localhost/admin
-
攻击后端系统:
- 利用服务器访问内网系统(通常防护较弱)
- 示例:
stockApi=http://192.168.0.11/admin
-
扫描后端管理后台:
- 使用BurpSuite Intruder进行扫描
- 示例:
stockApi=http://192.168.0.§1§:§22§/§admin§
8. SSRF防御绕过技术
基于黑名单的输入过滤绕过:
-
IP地址替代:
2130706433(0x7F000001)017700000001127.1
-
注册域名解析到127.0.0.1
-
URL编码或大小写混淆:
http://127.1/a%2564min
-
其他绕过方式:
http://safesite.com&site.comhttp:site.com/?url=http://safesite.comhttp://safesite.com#.site.comhttp://safesite.com\.site.com
基于白名单的输入过滤绕过:
- 使用
@嵌入身份验证信息:https://dst-host@vul-host - 使用
#指示URL分片:https://vul-host#dst-host - 利用DNS命名层级:
https://dst-host.vul-host - 对字符进行URL编码混淆
- 结合使用以上技术
通过开放重定向绕过:
- 利用开放重定向漏洞构造满足过滤器的URL
- 示例:
stockApi=http://abc.net/product/nextProduct?currentProductId=6&path=http://192.168.0.1/admin
9. SSRF修复方法
- 过滤返回信息,验证远程服务器响应是否符合预期
- 统一错误信息,避免泄露端口状态
- 限制请求端口为常用HTTP端口(80,443,8080,8090)
- 黑名单内网IP
- 禁用不需要的协议,仅允许http和https请求
二、跨站请求伪造(CSRF)
1. CSRF概述
CSRF(Cross-site request forgery)是攻击者利用被攻击者的身份发起某些被攻击者不知情的网络请求,如发布微博、留言、关注用户等。
2. CSRF攻击能力
- 以用户名义发送邮件
- 以用户名义发消息
- 盗取用户账号
- 以用户名义购买商品
- 进行虚拟货币转账
3. CSRF漏洞产生条件
- 受害者必须登录过网站(或有权限)
- 攻击者提供恶意链接
- 受害者必须打开网站
- 除了验证Cookie,没有其他特殊验证方法
4. CSRF攻击过程
- 用户登录受信任网站A,获取Cookie
- 用户未退出网站A时,在同一浏览器访问网站B
- 网站B返回攻击代码,要求访问网站A
- 浏览器携带网站A的Cookie执行攻击代码
5. CSRF与XSS区别
| 区别点 | CSRF | XSS |
|---|---|---|
| 是否需要登录 | 需要用户先登录 | 不需要登录 |
| 原理 | 利用网站A本身漏洞请求API | 注入JS代码篡改网站内容 |
6. CSRF漏洞挖掘
黑盒测试:
- 打开非静态操作页面,抓包检查是否存在token
- 不带referer直接请求页面,若返回相同数据则可能存在CSRF
白盒测试:
- 检查核心文件是否有验证token和referer的代码
- 搜索"token"关键字
7. CSRF攻击案例
GET方式攻击:
构造恶意URL直接访问:
http://example.com/edit?sex=boy&phonenum=888888888&add=北京&email=567@qq.com&submit=submit
POST方式攻击:
构造恶意表单自动提交:
<form action="http://example.com/edit" method="POST">
<input type="hidden" name="phonenum" value="9999999999">
<input type="submit" value="点击有奖">
</form>
8. Token防御机制
Token通过在每次请求中增加随机码(应足够随机不易伪造)来防止CSRF,后台每次验证该随机码。
9. CSRF修复方法
- 增加验证码
- 尽量使用POST,少用GET
- 验证HTTP Referer字段
- 在请求地址中添加token并验证
- 设置SameSite Cookie属性