问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
记一次小程序测试
渗透测试
一个简单的小程序渗透过程记录,大佬勿喷!
0x00 前言 ------- 前段时间公司搬家了,换了个大地方,现在进出都是人脸识别了。。感觉针不戳。。 但是,这个人脸识别系统,竟然要用一个看起来特别low的微信小程序去录入人脸。。 因此有了本文,**注意:本文纯属虚构,如有雷同,不胜荣幸** 0x01 反编译小程序 ----------- ### 导出 方法有很多,具体可以根据自己的环境百度,这里我的是越狱的iPhone 8p,ios14系统。 首先进入微信,把我们要测试的小程序删掉,然后重新搜索打开。 接着用`Filza`在根目录下搜索`WechatPrivate`,一般会出来四个结果,如下图: ![](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-c6cfe33037f3cf2790b5ef4e36eca2c57a7275f5.jpg) 挨个打开,文件最多的那个才是真的,我的如下: ![](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-0c1b23916e922aa702b2f5a204a22226c64b08e5.jpg) 然后找一个名字特别长的文件夹,我的是`4c4a440119a5023fb31f226b61a8026f`,接下来就是依次打开`/WeApp/LocalCache/release/`了。所有小程序都在这个`release`目录下了。 ![](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-a90facfd1089311e060d151e7eac715207bb1e7b.jpg) 大体上,路径如下: ```path /var/mobile/Containers/Data/Application/{{系统UUID}}/Library/WechatPrivate/{{user哈希值}}/WeApp/LocalCache/release/ ``` 我的路径如下: ```path /var/mobile/Containers/Data/Application/8B112216-AFF4-4B57-9952-F9278346F9B6/Library/WechatPrivate/4c4a440119a5023fb31f226b61a8026f/WeApp/LocalCache/release/ ``` 在`release`目录下,点两下`日期`让它按照时间从最新到最旧排序,因为我们刚刚删除并重新添加了我们要测试的小程序,因此,这时候,第一个文件夹(最近修改)就是存放目标小程序的文件夹了,我的是`wx7a1068b8417ddea1`。不放心的同学可以点一下文件夹右边的叹号,点开之后可以就看到最后修改时间了。 点开该文件夹,就可以看到小程序了,为`wxapkg`后缀,我的如下: ![](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-9dfd52df151573dd37c8edc2e55316860bbc570f.jpg) 然后点击图中小程序右边的叹号,点击`路径`,选择`复制`,复制该小程序的路径 ![](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b47f2f8de3d01d60009fd61e470d04db66b788d8.jpg) 然后在`Filza`的设置中`启用WebDAV服务`,用电脑访问这个链接,定位到小程序的位置,把这个小程序下载到电脑上即可 ![](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-9c73475c2d08adc55ab4b88e65b0edf6c4dc81d6.jpg) ![](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-d674316a1981fac77670b63cf8f099451f86149f.png) ### 反编译 小程序有了,接下来是反编译。这里用到的工具是:<https://github.com/xuedingmiaojun/wxappUnpacker> ,安装如下: ```bash git clone https://github.com/xuedingmiaojun/wxappUnpacker cd wxappUnpacker # 加速npm npm config set registry https://registry.npm.taobao.org npm install npm install esprima css-tree cssbeautify vm2 uglify-es js-beautify escodegen ``` 反编译命令: ```bash ./bingo.sh /path/to/小程序.wxapkg ``` ![](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-42c61a8df5843a633337c9383958d82c03319132.png) 命令执行成功,就会在`/path/to/小程序.wxapkg`路径下生成一个同名的目录, 打开这个目录就能看到源码了。 ![](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-4e44825e0f515fa07ad8b9ae74145de6e9b9e628.png) 0x03 第一次交锋 ---------- ### 发现 打开代码,找找接口,发现了一个`getUserListByCompanyId`接口,只需要传入公司的id和用户id,不需要token之类的身份认证信息,就能获得用户列表。 ![](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-7fce4d3effd529cd409f9f5d4b2ee9a09985090e.png) 不多bb,直接bp走起,可以看到,轻轻松松的,这个公司底下的所有成员信息,包括姓名、手机号、邮箱等等都到手了。。。只需要把这个`companyId`遍历一遍,社工库+1+1+1+1。。。开玩笑的,我肯定不会这样子干滴。 ![](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-f4a76d51e0a585b55e041301ccf394653bff73c5.png) 到此,因为当时搬砖任务还没完成,所以先把这个洞提到cnvd,剩下的就没看了。。 然后,被领导瞄到我在摸鱼,然后拿去送人情了。。。但我cnvd都提了。。那就看是cnvd审核快,还是开发修复快了。。 ### 修复 过了几天,我打开cnvd一看,果不其然,还是开发修得快。。。 > **我不是说cnvd审核慢** ![image-20211215001929761](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-e86c329bd015b3f39ebe0fb554aad7ff27dfbb4d.png) 然后我在摸鱼的时候,bp看了一下。。。我TM直接好家伙。。把敏感信息都删掉,只留下`userId`和`userName`,这就ok了? ![image-20211215002818948](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-7357caba35473ad5e442da8376ed3d19c78eaf0b.png) 他们说没问题,就没问题了呗,我还能怎么样? 0x04 第二次交锋 ---------- ### 发现 既然这个点不行了,我就再找找其他接口呗,重新反编译最新的小程序,果然发现了如下修改手机号的接口: ![image-20211215113616925](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-0ff1ed0c9c077adb31916891d1658de9a47568d4.png) 可以看到,只需要手机号,验证码,和用户id,就可以修改用户的手机号了。那验证码去哪里搞?往上找找 ![image-20211215113722091](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-06dcec4365a1111371b985bb482f899d9ade9fd1.png) 发现了发短信的接口,只需要手机号+用户id就行,那还等啥,直接bp开冲。其中的`phoneNum`改成攻击者的手机号就行 ![image-20211215003043046](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-a0aa9253b92fefe7988d298b6d812309001dc001.png) 然后把攻击者手机收到的短信填入`code`值中 ![image-20211215003110605](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b151a648fbe8b70606ce2da33ce28908fbd0a5b3.png) 最后成功把该用户的手机号改成了攻击者的手机号,并且接口返回了该人员的全部信息,包括姓名、手机号、邮箱、人脸等,社工库+1+1+1。 整理一下,提交cnvd,收工!! ### 修复 过了一段时间,发现cnvd已经审批通过了,再过了一段时间,再访问,发现接口变了,多了个`data`字段。 ![image-20211215120052201](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-23aa859224ec0ef03720a971e9bbbd3018c8a92b.png) 0x05 第三次交锋 ---------- ### 发现 老样子,反编译最新的小程序代码,发现对请求体加密了 ![image-20211215120347624](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b1b8ac7aa2b9b8065e2146d0aad4f72837b96375.png) 查看`getEncryption`的定义,原来是把原来的请求都丢到了`data`字段,然后增加了一个`sign`,其值是aes加密的 ![image-20211215120441685](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-4b2af31a0fa49c9fbe786978ef93fdd966dcb028.png) 而且key是写死在代码里的。 ![image-20211215120556433](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-07dff1d4b2847d8275b6806161fd495d3eeb40a8.png) 那还等啥,根据代码,本地写一个加密的脚本: ```javascript var CryptoJS = require("crypto-js"); var n ={ "companyId":"1", "userId":"1" } // var n = { // phoneNum: "13xxxxxxxxx", // sign: "updatePhoneNum", // userId: "1" // } //var n = { // phoneNum: "13xxxxxxxxx", // code: "185737", // userId: "1" //} var r = CryptoJS.enc.Utf8.parse("aeskey") function getEncryption(t) { var e = JSON.stringify(t); return { data: e, sign: CryptoJS.AES.encrypt(e, r, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }).toString() }; } console.log(getEncryption(n)); ``` 效果如下: ![image-20211215004654689](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-b7cfe147950d8ea0900d253a12feb66fca7c82f4.png) 然后跟之前一样的操作,成功修改手机号 ![image-20211215003222966](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-2f89264e01a4c9e452ae9afedb9c0b2586addb72.png) ![image-20211215120750520](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-41a0173072c5ccd69b7ef2e288bfd2ac9d613fe0.png) 但是此时,修改成功后,没有返回该人员的信息,只返回了攻击者的手机号。。可以说开发确实用心在修复了。。但是我手机号都改了,直接在小程序登录不也一样可以看到该人员信息? ![](https://shs3.b.qianxin.com/attack_forum/2021/12/attach-1e971ade12c50a5cb52c02df04bedb07a13dd133.png) 继续提交cnvd,收工 ### 修复 过了一段时间再看,好家伙,开发把所有用到短信的接口都给干掉了。。。什么更换手机号、忘记密码全部用不了了。。。 果然,解决安全问题,最好的办法是把提出问题的人给解决掉,其次是把产生问题的功能给砍掉。。。 0x06 后言 ------- 本次和开发的交锋持续了一个多月,没想到最后还是烂尾了。。 对了,再强调一遍,**本文纯属虚构,如有雷同,不胜荣幸!**
发表于 2021-12-20 09:34:56
阅读 ( 12219 )
分类:
渗透测试
17 推荐
收藏
3 条评论
zhiao
2021-12-20 17:37
好家伙,真就逮着一只羊使劲薅
请先
登录
后评论
行之
2021-12-21 13:25
师傅写的不错的,蛮好!
请先
登录
后评论
0x536d72
2022-10-24 17:46
wocao 老6!! 求对面开发的心里阴影!! 哈哈哈哈哈:这t,M的 哪个吊毛! 天天盯着我干啥啊! 哈哈哈哈
请先
登录
后评论
请先
登录
后评论
江南小虫虫
5 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!