一、认识XML和XXE
XXE全称XML External Entity Injection,也就是XML外部实体注入攻击,是对非安全的外部实体数据进行处理时引发的安全问题。要想搞懂XXE,肯定要先了解XML语法规则和外部实体的定义及调用形式。
XML语法规则如下:
我们主要关注XML外部实体的定义和调用方式:
引用外部实体:
<!ENTITY 实体名称 SYSTEM "URI">
二、BWAPP XXE攻略
环境是bee-box,BWAPP的虚拟机版本,内核基于linux,大家可以网上下载,下图是我在虚拟机内部署的BWAPP:
进入XXE的测试页面:
我们用burp抓包看看数据传输情况(都知道是XXE了,肯定要抓包看看XML数据的传输情况啦):
打开burp,点击页面any bugs进行抓包:
可以看到xxe-1.php页面以post方式向xxe-2.php页面传输了XML数据,既然是XML数据,我们就可以自己增加一个恶意外部实体然后在原本的XML数据中进行实体调用,来进行XXE攻击。具体如图,右侧为返回的/etc/passwd文件内容,XXE攻击成功,我们读取了linux下的重要文件:
payload:
当然,我们也可以利用XXE来读取网站目录下的一些重要文件,p.s:读取内网中其他服务器文件也是可行的,这也是BWAPP作者将XXE归到SSRF利用里原因,我们随便测试个文件试试看,右侧返回了文件内容:
payload:
方式和上面一样,自定义XML恶意外部实体,然后调用,XXE的简单利用就是这样了。
三、python实现exp
最近用python练练写简单的exp,这次BWAPP平台下的XXE攻击也写了个小脚本,如果你不懂XML,不会用BURP,但是仍然想要在基友/女票面前装个x,这款py很适合你。。(开个玩笑#_#)
python exp奉上
运行方式:
只需要输入想利用XXE攻击获取的资源名即可,如下图利用file协议读取/etc/passwd,只需要运行脚本输入file:///etc/passwd回车即可,省去了自己构造xml payload的步骤。下图为回车后的结果:
读取网站或者内网资源文件,这里用robots.txt测试(其他文件当然也可以),只需输入网站/robots.txt回车,文件就被成功读取了:
exp的大致思想其实很简单:
就是将我们输入的字符串(XML外部实体的具体内容)和构造好的xml进行拼接,然后利用python的requests库,将完整的payload xml以post形式发送至网站(代替了burp的改包发包功能)触发XXE,然后再读取返回页面。
p.s:php的curl拥有相似的功能,它和python里的requests都很强大。
需要注意的是,在自己本机上测试时,如果脚本报错显示cookie不正确,那就得将脚本里的cookie替换为自己的cookie了
四、总结
python写起东西来确实方便,在exp编写中更是这样,以后要多多练习了~~
文章作者:xiaoye
文章来源:i春秋社区
文章链接:https://bbs.ichunqiu.com/thread-17068-1-1.html
炼石信息安全培训春季班开招
QQ:495066536
372806985
敬请持续关注……