饭宝 发表于 2024-6-11 09:48:43

【Web实战】零底子微信小程序逆向(非常详细)从零底子入门到醒目,看完这

本文以微信小程序为例,从实战入手,讲解有关于小程序这种新型攻击面的渗透,对于相识小程序的安全性和防范措施有一定的帮助。
什么是小程序?

作为中国特有的一种程序形态,小程序在我们的日常生存中已经无处不在。腾讯、百度、阿里巴巴、字节跳动、京东等各家互联网大厂都有各自的生态平台,当然,也有快应用这种行业联盟型的生态平台。
https://img-blog.csdnimg.cn/direct/a6a1d749f7ed4a3987bcd8a5a06ac671.png
相较于传统的APP开发,小程序的区别有(以微信举例)

https://img-blog.csdnimg.cn/direct/31c75f62344048e1bb7899b920b2f31e.png
微信小程序架构分析

整个小程序框架体系分为两部分:逻辑层(App Service)和 视图层(View)。小程序提供了本身的视图层描述语言 WXML 和 WXSS,以及基于 JavaScript 的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件体系,让开发者可以大概专注于数据与逻辑。
https://img-blog.csdnimg.cn/direct/6acee421513143b08121d76436974e32.png
逻辑层 App Service

小程序开发框架的逻辑层使用 JavaScript 引擎为小程序提供开发 JavaScript 代码的运行情况以及微信小程序的特有功能。
逻辑层将数据举行处理后发送给视图层,同时接受视图层的事件反馈。
开发者写的所有代码最终将会打包成一份 JavaScript 文件,并在小程序启动的时候运行,直到小程序销毁。这一举动雷同 ServiceWorker,以是逻辑层也称之为 App Service。
在 JavaScript 的底子上,微信增加了一些功能,以方便小程序的开发:


[*] 增加 App 和 Page 方法,举行程序注册和页面注册。
[*] 增加 getApp 和 getCurrentPages 方法,分别用来获取 App 实例和当前页面栈。
[*] 提供丰富的 API,如微信用户数据,扫一扫,支付等微信特有能力。
[*] 提供模块化能力,每个页面有独立的作用域。
留意:小程序框架的逻辑层并非运行在浏览器中,因此 JavaScript 在 web 中一些能力都无法使用,如 window,document 等。
视图层 View

框架的视图层由 WXML 与 WXSS 编写,由组件来举行展示。
将逻辑层的数据反映成视图,同时将视图层的事件发送给逻辑层。
WXML(WeiXin Markup language) 用于描述页面的结构。
WXS(WeiXin Script) 是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构。
WXSS(WeiXin Style Sheet) 用于描述页面的样式。
组件(Component)是视图的基本组成单元。
目次结构

小程序包含一个描述整体程序的 app 和多个描述各自页面的 page。
一个小程序主体部分由三个文件组成,必须放在项目标根目次,如下:
文件必需作用app.js是小程序逻辑app.json是小程序公共设置app.wxss否小程序公共样式表 一个小程序页面由四个文件组成,分别是:
文件范例必需作用js是页面逻辑wxml是页面结构json否页面设置wxss否页面样式表 留意:为了方便开发者减少设置项,描述页面的四个文件必须具有雷同的路径与文件名。
https://img-blog.csdnimg.cn/direct/46d9d8e0269840559af74d7cb078d6ca.png
从上述的架构图、文件组成部分来看,重点分析的就是小程序的逻辑层。而逻辑层主要的组成部分是由 app.js、app.json、js 文件、json 设置文件等组成,因此测试过程中主要分析的对象就是这一些。
微信小程序源码提取与常见毛病

测试准备

体系

windows
常用工具

名称用途下载所在wxappUnpacker小程序源代码获取工具wxapkgconvertor小程序源代码获取工具https://github.com/ezshine/wxapkg-convertor/releasesUnpackMiniApp小程序解密微信开发者工具调试获取的小程序代码https://developers.weixin.qq.com/miniprogram/dev/devtools/download.htmlBurpSuite抓包分析测试https://portswigger.net/burpproxifier流量代理https://www.proxifier.com/ 测试开始

小程序搜刮

笔者常用的搜刮方式为使用微信官方小程序界面的搜刮功能与北京零零信安科技有限公司的 0.zone平台,后者可以全主动采集目标企业APP(APK)列表、下载所在和其详情先容等信息,半主动举行小程序、公众号、生存号等的列表、名称和所在采集。较官方搜刮功能,可以更精确的检索目标。
https://img-blog.csdnimg.cn/direct/566ac936a6c94d3191e46e6387647aaa.png
https://img-blog.csdnimg.cn/direct/b43a3a0c29fe48aeb64608cd48bde8d9.png
源码提取

位置查找

使用windows版微信,打开待测试的小程序后,点击设置-文件管理-打开文件夹。
https://img-blog.csdnimg.cn/direct/36034473ac3b45b29055c940c9b39de6.png
在WeChat Files目次下有一个名为Applet的文件夹,以“wx”开头的文件夹即为小程序文件夹。如果之前打开了许多微信小程序,那么目次中就会存在多个小程序文件夹。第一种区分方法是按照修改时间来举行区分。第二种方法是在微信页面中删除所有浏览过的小程序,重新打开需要举行测试的小程序,那么目次中只会存在一个小程序文件夹。
https://img-blog.csdnimg.cn/direct/16fcd0ddf0d340d7899e55130721c782.png
其中的文件名为__APP__.wxapkg ,为加密后的文件。
小程序解密

加密方法如下:


[*] 首先pbkdf2生成AES的key。使用微信小程序id字符串为pass,salt为saltiest 选代次数为1000。调用pbkdf2生成一个32位的key。
[*] 取原始的wxapkg的包的前1023个字节通过AES通过1生成的key和iv(the iv: 16 bytes),举行加密。
[*] 接着使用微信小程id字符串的倒数第2个字符为xor key,依次异或1023字节后的所有数据。如果微信小程序id小于2位,则xorkey 为 0x66。
[*] 把AES加密后的数据 (1024字节)和xor后的数据一起写入文件,并在文件头部添加V1MMWX标识。
https://img-blog.csdnimg.cn/direct/7c1f1502496347a1855395446ed85718.png
这里使用的解密工具为代码果所编写UnpackMiniApp.exe,用法为点击“选择加密小程序包”,选中待解密的__APP__.wxapkg,将会在UnpackMiniApp.exe当前目次的wxpack文件夹中生成解密后的文件。
https://img-blog.csdnimg.cn/direct/435b13065aa94aa1bd339249820ce6ef.png
留意:一定要选择微信小程序原始位置,移动待测试的__APP__.wxapkg文件将会导致无法识别APPID,导致解密失败!
https://img-blog.csdnimg.cn/direct/55c75d953e35404e88a31371c81b2935.png
wxapkg包文件结构

在解密之后,使用010Editor打开该文件,可以看出,wxapkg包由三个部分组成,分别是头部段、索引段、数据段。
头部段

以“BE”开头,"ED"末端,其中包含4个“00”空白添补,举行校验的索引段长度块、数据段长度块各四位,固定长度为14字节。
https://img-blog.csdnimg.cn/direct/d5a8ecd9e1644ac58f37763de128500e.png
索引段

首先为4字节,为包内文件的数量,如“00 00 00 5F”代表一共有95个文件,然后是包内文件各自的信息,例:“00 00 00 16”代表文件名称的长度为22个字节,“2F 72 65 6F… 2E 70 6E 67”为带存放路径的文件名称,“00 00 11 7C”对应文件在小程序包中的具体偏移位置,“00 01 01 F7“对应文件在小程序包中的数据长度。
https://img-blog.csdnimg.cn/direct/5e01fa8069b64d2eba9a7d85bd4e167c.png
数据段

数据段为存储的文件内容,可通过索引段的信息举行一一对应。
https://img-blog.csdnimg.cn/direct/eeb917f2551043db9fb7e41ff0014f6d.png
)
小程序反编译

通过索引段与数据段,我们已经可以还原出一个大要的文件结构
https://img-blog.csdnimg.cn/direct/72a2f990650146a08603b9f506d236c7.png
但这并不是最初的原项目文件结构,缘故起因是微信服务器会将小程序源码中所有的“js”文件压入“app-service.js”文件中,将所有的“json”文件压入“app-config.json”中,将所有的“wxml”文件压入“page-frame.html”文件中,“wxss”则在处理之后以“html”文件的情势存留在对应页面目次之下。
笔者对各自文件的还原不再赘述,在此推荐使用wxappUnpacker与wxapkgconvertor,二者均可以直接对解密后的wxapkg包举行反编译,直接还原出原项目标文件结构。
wxappUnpacker的使用命令为:
node wuWxapkg.js xxxxxx.wxapkg

wxapkgconvertor的使用更为便携,将待反编译的wxapkg包直接拖入程序窗口中,即可在小程序包位置的同目次下获得同名的小程序项目文件夹。
常见题目

存在分包(即文件夹下有多个.wxapkg文件)

分别解密,反编译后,拼合到同一目次下。
使用wxappUnpacker后,”app-service.js” / “app-config.json” / “page-frame.html” / “.html”文件未乐成反编译:



[*]将 app-config.json 中的内容拆分成各个页面所对应的 page.json 和 app.json;
node wuConfig.js <path/to/app-config.json>



[*]将 app-service.js 拆分成一系列原先独立的 JS 文件,并使用 Uglify-ES 美化工具尽可能将代码还原为“编译”前的内容;
node wuJs.js <path/to/app-service.js>



[*]从 page-frame.html 中提取并还原各页面的 .wxml 和 app.wxss 及公共 .wxss 样式文件;
node wuWxml.js \[-m\] <path/to/page-frame.html>



[*]该命令参数为 .wxapkg 解包后目次,它将分析并从各个 page.html 中提取还原各页面的 page.wxss 样式文件。
node wuWxss.js <path/to/unpack\_dir>

安全风险和毛病

在获取到源码后,我们可以将其加载到微信开发者工具中举行调试。
下面列出实战时常见的微信小程序毛病
信息泄漏

敏感信息是指一旦泄漏可能会对开发者的业务、互助伙伴和用户带来利益损害的数据,包罗但不限于账号 AppSecret、特权账号信息、后台加密密钥、登录账户密码、用户身份证号、手机号、银行卡号等。
可使用微信开发者工具中的搜刮功能来搜刮例如“appid”、“key”、“phone”等关键字。
https://img-blog.csdnimg.cn/direct/d578a20ff5bf47deaf6571cfe5df89c7.png
https://img-blog.csdnimg.cn/direct/715603009e5e456aaddbad917d996658.png
这里说一下针对AppID与AppSecret的使用,在获取到该信息后,可访问微信开放平台调试工具(https://developers.weixin.qq.com/apiExplorer),可根据小程序的代码内容配合接口文档举行进一步的使用。
提示:微信小程序开发者工具在1.06.2206020版本以后在代码质量分析模块中增加针对AppSecret 的检测,故AppSecret泄漏只可能在2022-06-02以前开发的小程序中发现。
https://img-blog.csdnimg.cn/direct/8b62c65de34e4fcda51d103574355f33.png
SQL 注入

SQL 注入是指 Web 程序代码中对于用户提交的参数未做有效过滤就直接拼接到 SQL 语句中执行,导致参数中的特殊字符突破了 SQL 语句原有逻辑,黑客可以使用该毛病执行任意 SQL 语句。
通过proxifier的流量代理与BurpSuite的抓包,我们可以针对小程序运行时的功能点举行测试。
proxifier设置:
设置ip为127.0.0.1,端口自界说的HTTPS协议代理服务器
https://img-blog.csdnimg.cn/direct/c91428abe5614a4980abef78406b396c.png
添加规则:程序“wechatappex.exe”,动作为刚才设置的代理服务器
https://img-blog.csdnimg.cn/direct/bc0608537f0444d8b96aa1dc595390f5.png
BurpSuite设置:
设置代理服务器,端口为刚才设置的自界说端口,所在为127.0.0.1
https://img-blog.csdnimg.cn/direct/10af188467fe4d32a5a3173a92b3bacb.png
通过对小程序功能点举行SQL注入测试,乐成返回数据库用户名。
https://img-blog.csdnimg.cn/direct/78038f3f061c4dee83aedf0d3a86ea4f.png
弱口令

弱口令指管理后台的用户名密码设置得较为简单大概使用默认账号。攻击者可以通过登录这些账号修改后台数据或举行下一步的入侵操纵。
针对小程序的代码举行审计,发现一处回连域名,访问发现为管理后台。
https://img-blog.csdnimg.cn/direct/b76638ef7b9a4bf5a124691a75038778.png
https://img-blog.csdnimg.cn/direct/aa7463d73ec7430f9692ff42b5febac7.png
使用用户名:admin 密码:123456 乐成登陆后台,获取大量信息。
https://img-blog.csdnimg.cn/direct/7f5f38958d9c41e59e6247c4974e45c1.png
常见题目

将反编译后的源码导入微信开发者工具后,报错 “app.js错误:TypeError: _typeof3 is not a function”

按错误提示找到文件 @babel/runtime/helpers/typeof.js
将所有内容删除,并替换成
function _typeof2(o) {   
"@babel/helpers - typeof";   
return (_typeof2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {   
      return typeof o;   
} : function(o) {   
      return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;   
})(o);   
}   
function _typeof(o) {   
return "function" == typeof Symbol && "symbol" === _typeof2(Symbol.iterator) ? module.exports = _typeof = function(o) {   
      return _typeof2(o);   
} : module.exports = _typeof = function(o) {   
      return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : _typeof2(o);   
}, _typeof(o);   
}   
module.exports = _typeof;

报错“依靠非常”

为程序在反编译过程中对变量还原不正确,通过对比已还原的目次结果删除调用代码中多余路径即可修复。
测试总结

小程序开发者在开发环节中必须基于以下原则:
互不信任原则,不要信任用户提交的数据,包罗第三方体系提供的数据,必要的数据校验必须放在后台校验。
最小权限原则,代码、模块等只拥有可以完成任务的最小权限,不赋予不必要的权限。
克制明文生存用户敏感数据。
小程序代码(不包罗云函数代码)跟传统 Web 应用的前端代码雷同,可被外部获取及举行反混淆,紧张业务逻辑应放在后台代码或云函数中举行。
后台接口调用以及云函数调用,必须举行有效的身份鉴权。
原文链接:https://forum.butian.net/share/2570
黑客&网络安全如何学习
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
1.学习蹊径图

https://img-blog.csdnimg.cn/img_convert/f6d7a70326a6c0071cc4dc6b3eeb8f95.png
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的蹊径图,如果你能学完它们,你去就业和接私活完全没有题目。
2.视频教程

网上虽然也有许多的学习资源,但基本上都残破不全的,这是我本身录的网安视频教程,上面蹊径图的每一个知识点,我都有配套的视频讲解。
内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试底子、毛病详解、盘算机底子知识等,都是网络安全入门必知必会的学习内容。
https://img-blog.csdnimg.cn/img_convert/0d8fcc94a8238255b741c19633efd10c.jpeg
(都打包成一块的了,不能一一展开,统共300多集)
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
3.技术文档和电子书

技术文档也是我本身整理的,包罗我参加大型网安行动、CTF和挖SRC毛病的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。
https://img-blog.csdnimg.cn/63797fd6c6664609870eac7e724a37db.jpeg#pic_center
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
4.工具包、口试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要会集在 信息网络、Android黑客工具、主动化工具、网络垂纶等,感兴趣的同砚不容错过。
尚有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
末了就是我这几年整理的网安方面的口试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。
这些题目都是大家在口试深信服、奇安信、腾讯大概其它大厂口试时经常遇到的,如果大家有好的题目大概好的见解欢迎分享。
参考分析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表示更加易懂。
内容概要:包罗 内网、操纵体系、协议、渗透测试、安服、毛病、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑毛病、工具、SQLmap、NMAP、BP、MSF…
https://img-blog.csdnimg.cn/img_convert/da1274937756ef025cecc0439519a3d4.png
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【Web实战】零底子微信小程序逆向(非常详细)从零底子入门到醒目,看完这