freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

记一次短暂的小程序解密之旅
2021-08-10 10:18:41

保姆向文章:记一次短暂的小程序解密之旅,这应该是本站最详细的小程序文章了。

声明

本文章仅用作技术交流,严禁恶意利用。恶意利用所造成的后果均由恶意使用者承担。

起因

因某客户系统通信全程密文,我就自告奋勇的接下了任务。

工具

小程序包解密

wxappUnpacker-master

微信开发者工具

思路

1、反编译小程序。

2、动态调试获取明文。

3、payload加密。

实践

不墨迹直接开干。

拿小程序包:

打开pc微信搜索小程序:

1627536860_61023ddc0e43c907c5b02.png!small?16275368616291627536923_61023e1b1621f0d15fb58.png!small?1627536924286

搜到小程序后打开一次即可。

小程序包目录:C:\Users\(用户名)\Documents\WeChat Files\Applet

会看到一堆的包,查看修改日期,时间为第一次打开小程序的时间。找不到就删掉这些文件,删掉pc微信小程序,重新搜索打开小程序。这里会刷出来1627534640_610235303776b52cadaaf.png!small?1627534641419

1627534884_610236246ebcfd89a4855.png!small?1627534885636

小程序包解密:

使用小程序包解密工具,打开目录,选中包:(不要移动包的位置,会报错)1627534831_610235ef98cd2a99ae7b3.png!small?1627534832922

解密成功,如果提示获取失败,可以检查一下包的位置是否在默认位置。

1627534948_61023664b7c7a21206af0.png!small?1627534950073

解密后的文件在小程序包解密工具的目录下的wxpack。

1627534997_6102369525a49c5e023b2.png!small?1627534998776

小程序反编译:

将解密文件复制进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

成功:1627535378_61023812264fc5d5e5254.png!small?1627535380010

动态调试:

此时在wxappUnpacker-master文件夹内会保存小程序的源码:

1627535504_61023890087ae42622da2.png!small?1627535505298

1627535516_6102389cc77df3c3869c3.png!small?1627535518075

下载微信开发者工具打开此文件夹:(初次使用需要手机扫码登录微信)

1627535763_61023993d298473188705.png!small?16275357652351627535787_610239abcd0cbd741f620.png!small?1627535789050

简单审计找到传参点,设置console.log()打印加密前的明文:

1627536047_61023aaf5d5f7cda3a7d9.png!small?1627536048711

设置完毕点击相关功能点:

1627535928_61023a382d460ab123624.png!small?1627535929558

获取到明文:1627536135_61023b0767a3b08c99096.png!small?1627536136805

payload加密:

找到加密后的变量,设置console.log()打印:

使用相关功能点后,获取密文。

1627536282_61023b9a97fa024e31e22.png!small?1627536283851

burp抓包:

第一种方式:模拟器下载微信登录抓包,太麻烦了,而且手机会掉线。

我推荐第二种:pc端抓包

代理设置方法1:

1627537075_61023eb3dcb6f3ea36faf.png!small?16275370771831627537094_61023ec6a7aefb64c4412.png!small?1627537096383

代理设置方法2:用win10自带的代理设置,不用退微信重登:

1627537222_61023f461aa47c5c33b6d.png!small?16275372232861627537298_61023f9245c29c912966e.png!small?1627537299619

配置完即可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客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录