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攻击方式

  1. 端口扫描:对外网、内网或本地进行端口扫描,获取服务banner信息
  2. 指纹识别:对内网web应用进行指纹识别,通过访问默认文件实现
  3. 攻击web应用:利用GET参数攻击内外网web应用(如Struts2、SQLi等)
  4. 攻击本地应用:攻击运行在内网或本地的应用程序(如溢出漏洞)
  5. 读取本地文件:利用file协议读取本地文件

常用协议:http/https、dict、file、gopher、sftp、ldap、tftp

4. 易受攻击场景

  1. 从用户指定URL获取图片并保存展示
  2. 获取用户指定URL的数据(文件或HTML)
  3. 根据用户提供的URL抓取web站点并生成移动wap站
  4. 提供测速功能,根据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常见攻击案例

  1. 攻击服务器自身

    • 通过环回地址(127.0.0.1、localhost)访问服务器自身管理后台
    • 示例:stockApi=http://localhost/admin
  2. 攻击后端系统

    • 利用服务器访问内网系统(通常防护较弱)
    • 示例:stockApi=http://192.168.0.11/admin
  3. 扫描后端管理后台

    • 使用BurpSuite Intruder进行扫描
    • 示例:stockApi=http://192.168.0.§1§:§22§/§admin§

8. SSRF防御绕过技术

基于黑名单的输入过滤绕过:

  1. IP地址替代:

    • 2130706433(0x7F000001)
    • 017700000001
    • 127.1
  2. 注册域名解析到127.0.0.1

  3. URL编码或大小写混淆:

    • http://127.1/a%2564min
  4. 其他绕过方式:

    • http://safesite.com&site.com
    • http:site.com/?url=http://safesite.com
    • http://safesite.com#.site.com
    • http://safesite.com\.site.com

基于白名单的输入过滤绕过:

  1. 使用@嵌入身份验证信息:https://dst-host@vul-host
  2. 使用#指示URL分片:https://vul-host#dst-host
  3. 利用DNS命名层级:https://dst-host.vul-host
  4. 对字符进行URL编码混淆
  5. 结合使用以上技术

通过开放重定向绕过:

  • 利用开放重定向漏洞构造满足过滤器的URL
  • 示例:stockApi=http://abc.net/product/nextProduct?currentProductId=6&path=http://192.168.0.1/admin

9. SSRF修复方法

  1. 过滤返回信息,验证远程服务器响应是否符合预期
  2. 统一错误信息,避免泄露端口状态
  3. 限制请求端口为常用HTTP端口(80,443,8080,8090)
  4. 黑名单内网IP
  5. 禁用不需要的协议,仅允许http和https请求

二、跨站请求伪造(CSRF)

1. CSRF概述

CSRF(Cross-site request forgery)是攻击者利用被攻击者的身份发起某些被攻击者不知情的网络请求,如发布微博、留言、关注用户等。

2. CSRF攻击能力

  1. 以用户名义发送邮件
  2. 以用户名义发消息
  3. 盗取用户账号
  4. 以用户名义购买商品
  5. 进行虚拟货币转账

3. CSRF漏洞产生条件

  1. 受害者必须登录过网站(或有权限)
  2. 攻击者提供恶意链接
  3. 受害者必须打开网站
  4. 除了验证Cookie,没有其他特殊验证方法

4. CSRF攻击过程

  1. 用户登录受信任网站A,获取Cookie
  2. 用户未退出网站A时,在同一浏览器访问网站B
  3. 网站B返回攻击代码,要求访问网站A
  4. 浏览器携带网站A的Cookie执行攻击代码

5. CSRF与XSS区别

区别点 CSRF XSS
是否需要登录 需要用户先登录 不需要登录
原理 利用网站A本身漏洞请求API 注入JS代码篡改网站内容

6. CSRF漏洞挖掘

黑盒测试:

  1. 打开非静态操作页面,抓包检查是否存在token
  2. 不带referer直接请求页面,若返回相同数据则可能存在CSRF

白盒测试:

  1. 检查核心文件是否有验证token和referer的代码
  2. 搜索"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修复方法

  1. 增加验证码
  2. 尽量使用POST,少用GET
  3. 验证HTTP Referer字段
  4. 在请求地址中添加token并验证
  5. 设置SameSite Cookie属性
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) 017700000001 127.1 注册域名解析到127.0.0.1 URL编码或大小写混淆: http://127.1/a%2564min 其他绕过方式: http://safesite.com&site.com http:site.com/?url=http://safesite.com http://safesite.com#.site.com http://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方式攻击: 构造恶意表单自动提交: 8. Token防御机制 Token通过在每次请求中增加随机码(应足够随机不易伪造)来防止CSRF,后台每次验证该随机码。 9. CSRF修复方法 增加验证码 尽量使用POST,少用GET 验证HTTP Referer字段 在请求地址中添加token并验证 设置SameSite Cookie属性