chanra
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

保姆向文章:记一次短暂的小程序解密之旅,这应该是本站最详细的小程序文章了。
声明
本文章仅用作技术交流,严禁恶意利用。恶意利用所造成的后果均由恶意使用者承担。
起因
因某客户系统通信全程密文,我就自告奋勇的接下了任务。
工具
小程序包解密
wxappUnpacker-master
微信开发者工具
思路
1、反编译小程序。
2、动态调试获取明文。
3、payload加密。
实践
不墨迹直接开干。
拿小程序包:
打开pc微信搜索小程序:
搜到小程序后打开一次即可。
小程序包目录:C:\Users\(用户名)\Documents\WeChat Files\Applet
会看到一堆的包,查看修改日期,时间为第一次打开小程序的时间。找不到就删掉这些文件,删掉pc微信小程序,重新搜索打开小程序。这里会刷出来
小程序包解密:
使用小程序包解密工具,打开目录,选中包:(不要移动包的位置,会报错)
解密成功,如果提示获取失败,可以检查一下包的位置是否在默认位置。
解密后的文件在小程序包解密工具的目录下的wxpack。
小程序反编译:
将解密文件复制进wxappUnpacker-master,配置环境:
先安装node,然后在wxappUnpacker-master文件夹内打开cmd,执行下面命令:
npm install npm install esprima npm install css-tree npm install cssbeautify npm install vm2 npm install uglify-es npm install js-beautify
安装完后在wxappUnpacker-master文件夹内打开cmd执行命令:
node .\wuWxapkg.js 解密文件名.wxapkg
成功:
动态调试:
此时在wxappUnpacker-master文件夹内会保存小程序的源码:
下载微信开发者工具打开此文件夹:(初次使用需要手机扫码登录微信)
简单审计找到传参点,设置console.log()打印加密前的明文:
设置完毕点击相关功能点:
获取到明文:
payload加密:
找到加密后的变量,设置console.log()打印:
使用相关功能点后,获取密文。
burp抓包:
第一种方式:模拟器下载微信登录抓包,太麻烦了,而且手机会掉线。
我推荐第二种:pc端抓包
代理设置方法1:
代理设置方法2:用win10自带的代理设置,不用退微信重登:
配置完即可burp抓包了。这个小程序虽然有基于时间的加密,但是服务端并不验证时间,所以尽情渗透。
下一步:
客户端有加密js的源码,功力深的表哥们可以直接利用算法写扫描器进行漏洞探测。加解密的利用也是我准备学习的部分。
修复建议
1、通过增加基于时间的验证,来确保数据包的真实性。
2、加一个Referer检测的中间件,所有Referer里包含“devtools”的请求全部返回500。例如:https://servicewechat.com/wx05ac2038cb1a1286/devtools/page-frame.html
可以看出,通过开发者工具发出的请求Referer里和普通手机发出的请求的唯一区别就是原本的数字变成了devtools,所以可以加个中间件拦截所有Referer里包含devtools的请求。
3、对appid授权检测。
尾声
文章没有什么太多的难点,哪怕审计小程序源码,依然没有涉及了太多的js知识,基本都可以看懂。渗透有既需要我们把简单零散的知识,加以整合利用的能力;也需要我们拥有足够的知识渗透的更深。如果我会js就可以完成最后一步了。这次渗透让我再次想起一个道理:知识面和知识深度都很重要!
文中打码太多,实属无奈之举,还请各位大佬原谅。感谢大家看完!欢迎一起讨论!
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
