微信小程序渗透实战:了解小程序安全性与防范措施

2024-05-29
来源:网络整理

本文以微信小程序为例,从实战出发,讲解小程序这一新攻击面的渗透,有助于理解小程序的安全及防范措施。

什么是小程序?

小程序作为中国独有的程序形态,已经无处不在,腾讯、百度、阿里、字节跳动、京东等互联网巨头都有自己的生态平台,当然也有快应用等产业联盟型的生态平台。

与传统APP开发相比,小程序的区别如下(以微信为例):

微信小程序架构分析

整个小程序框架体系分为逻辑层(App)和视图层(View)两大部分,小程序提供了自己的视图层描述语言WXML和WXSS,以及基于的逻辑层框架,并在视图层和逻辑层之间提供了数据传输和事件系统,让开发者专注于数据和逻辑。

逻辑层应用

小程序开发框架逻辑层通过引擎为开发代码和微信小程序特有的功能提供运行环境。

逻辑层对数据进行处理并发送给视图层,同时接收视图层的事件反馈。

开发者编写的所有代码最终都会被打包成一个文件,在小程序启动时运行,直到小程序销毁,这种行为类似,所以逻辑层也叫App。

在此基础上,微信增加了一些功能,方便用户开发小程序:

注意:小程序框架的逻辑层并不运行在浏览器中,所以Web中的某些功能无法使用,如等。

视图层

框架的视图层使用WXML和WXSS编写,通过组件的方式展示。

逻辑层的数据体现为视图,视图层的事件发送给逻辑层。

WXML()用于描述页面的结构。

WXS( ) 是一种针对小程序的脚本语言,与WXML结合可以构建页面的结构。

WXSS() 用于描述页面的风格。

组件是视图的基本组成部分。

目录结构

小程序由一个描述整体程序的APP以及多个描述各个页面的页面组成。

小程序主体部分由三个文件组成,必须放在项目的根目录下,如下:

所需文件功能

应用程序.js

是的

小程序逻辑

应用程序.json

是的

小程序公共配置

应用程序.wxss

小程序公共样式表

一个小程序页面由四个文件组成,分别是:

文件类型所需角色

js

是的

页面逻辑

动态链接库

是的

页面结构

json

页面配置

维克斯

页面样式表

注意:为了帮助开发者减少配置项,描述页面的四个文件必须具有相同的路径和文件名。

从上面的架构图和文件组件来看,分析的重点是小程序的逻辑层,逻辑层的主要组件有app.js、app.json、js文件、json配置文件等,所以测试时主要分析的对象就是这些。

微信小程序源码提取及常见漏洞测试准备系统

常用工具名称 用途 下载地址

小程序源码获取工具

小程序源码获取工具

小程序解密

微信开发者工具

调试获取的小程序代码

抓包分析测试

流量代理

测试启动小程序搜索

笔者经常使用的搜索功能是微信官方小程序接口和北京零零新安科技有限公司的0.zone平台。后者可以全自动采集目标企业APP(APK)列表、下载地址及其详细介绍等信息,半自动采集小程序、公众号、生活号等列表、名称及地址,相比官方的搜索功能,可以更精准地检索目标。

源代码提取位置搜索

使用最新版本的微信,打开需要测试的小程序,点击设置-文件管理-打开文件夹。

目录下有一个文件夹,以“wx”开头的文件夹就是小程序文件夹,如果你之前打开过多个微信小程序,那么目录下会有多个小程序文件夹,区分方法一是按照修改时间区分,二是删除微信页面浏览过的小程序,重新打开需要测试的小程序,那么目录下就只有一个小程序文件夹了。

文件名为.,即加密文件。

小程序解密

加密方法如下:

这里使用的解密工具是编写的.exe,使用方法点击“选择加密小包”,选择需要解密的文件,解密后的文件会生成在.exe当前目录的文件夹中。

注意:一定要选择微信小程序原位置,移动待测试文件会导致无法识别,从而导致解密失败!

包文件结构

解密之后,使用 打开文件,可以看到数据包由三部分组成,分别是头段,索引段,数据段。

标头

其以“BE”开始,以“ED”结束,包含4个“00”空白填充,用于验证的索引段长度块和数据段长度块各为4位,固定长度为14个字节。

索引段

前面是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”对应该文件在小节目包中的数据长度。

数据段

数据段就是存储的文件内容,可以通过索引段的信息一一映射。

小程序反编译

通过索引段和数据段,我们可以恢复一个大概的文件结构。

但这并不是原始的项目文件结构,因为微信服务器会把小程序源码中所有的“js”文件压缩到“app-.js”文件中,所有的“json”文件压缩到“app-.json”文件中,所有的“wxml”文件压缩到“page-.html”文件中。经过处理后,“wxss”文件会以“html”文件的形式存放在对应的页面目录中。

关于各个文件的恢复,笔者就不再赘述了,这里推荐使用 和 ,这两个工具都可以直接对解密包进行反编译,并且直接恢复原项目的文件结构。

使用命令为:

node wuWxapkg.js xxxxxx.wxapkg

使用更加便携,直接将需要反编译的包拖拽到程序窗口中,即可在小程序包同一目录下得到同名的小程序项目文件夹。

常见问题 有分包(即一个文件夹内有多个.文件)

分别解密、反编译,放入同一目录下。

使用后,“app-.js”/“app-.json”/“page-.html”/“.html”文件均未成功反编译:

node wuConfig.js

node wuJs.js

node wuWxml.js \[-m\]

node wuWxss.js

安全风险和漏洞

获取到源码之后,我们就可以加载到微信开发者工具中进行调试了。

以下是实战中常见的一些微信小程序漏洞

信息泄露

敏感信息是指一旦泄露,可能对开发者的业务、合作伙伴、用户造成损害的数据,包括但不限于账号、特权账号信息、后台加密密钥、登录账号密码、用户证件号、手机号、银行卡号等。

您可以使用微信开发者工具中的搜索功能,搜索“,”key,“,”等关键字。

这里就说一下和的使用,获取这些信息之后就可以进入微信开放平台调试工具(),根据小程序代码内容以及接口文档进一步使用。

提示:微信小程序开发者工具在1.06版本之后的代码质量分析模块中增加了针对性检测,因此该漏洞仅在2022-06-02之前开发的小程序中发现。

SQL 注入

SQL注入是指Web程序代码没有经过有效的过滤就直接将用户提交的参数拼接到SQL语句中执行,导致参数中的特殊字符破坏了SQL语句原有的逻辑,黑客可以利用此漏洞执行任意SQL语句。

通过流量代理和抓包,我们可以在小程序运行过程中测试小程序的功能点。

配置:

将 IP 地址设置为 127.0.0.1,将端口号设置为自定义协议代理服务器

添加规则:程序“.exe”,动作是刚刚设置的代理服务器

配置:

配置代理服务器,端口是刚才设置的自定义端口,地址为127.0.0.1

通过对小程序功能点进行SQL注入测试,成功返回数据库用户名。

密码强度低

弱密码是指管理后台的用户名和密码设置得比较简单或者使用默认账号,攻击者可以通过这些账号登录修改后台数据或者进行下一步入侵操作。

对小程序代码进行审计后,发现了一个链接回管理后台的域名。

使用用户名:密码:成功登录后端,并获取大量信息。

常见问题 将反编译后的源代码导入微信开发者工具后,出现错误提示:“app.js ::is not a”

根据错误提示找到文件@///.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应用的前端代码,可以从外部获取并进行反混淆处理,重要的业务逻辑应该放在后台代码或者云函数中。

后端接口调用、云函数调用均需要进行有效的身份认证。

原文链接:

无关

如何学习黑客和网络安全

今天只要大家喜欢我的文章,我就把我私藏的网络安全学习资料免费分享给大家,一起来看看都有哪些吧。

1.学习路线图

攻防方面要学的东西很多,我在上面路线图中已经把具体要学的东西都写出来了,如果能全部学会,找工作或者接私人工作就没问题了。

2.视频教程

网上虽然有很多学习资源,但是基本都不全,这是我自己录制的网络安全视频教程,上面的路线图里每个知识点我都有对应的视频讲解。

内容涵盖了网络安全法律的学习、网络安全运营安全评估、渗透测试基础、漏洞分析、计算机基础知识等,都是网络安全入门者必知的学习内容。

(全部打包在一起,无法逐一展开,总共有300多集)

由于篇幅有限,仅展示部分信息,您需要点击以下链接才能查看。

这些东西我可以免费分享给大家,如果你有需要可以点击这里获取:网络安全入门到进阶资源

3. 技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网络安全行动、CTF、利用SRC漏洞的经验和技术要点,电子书也有200多本,由于内容敏感就不一一展示了。

由于篇幅有限,仅展示部分信息,您需要点击以下链接才能查看。

这些东西我可以免费分享给大家,如果你有需要可以点击这里获取:网络安全入门到进阶资源

4.工具包、面试题及源代码

“工欲善其事,必先利其器”,我为大家总结了目前最流行的几十种黑客工具,涵盖范围主要集中在信息收集、黑客工具、自动化工具、网络钓鱼等方面,有兴趣的同学千万不要错过。

还有我在视频里讲到的案例源代码和对应的工具包,大家有需要的话可以拿来用。

这些东西我可以免费分享给大家,如果你有需要可以点击这里获取:网络安全入门到进阶资源

最后,这里是我近几年整理出来的网络安全面试题,如果你正在找网络安全方面的工作,它们绝对能给你带来很大的帮助。

这些问题在深信服、奇安信、腾讯或者其他大公司面试的时候经常会遇到,如果你有好的问题或者好的见解,欢迎分享。

参考分析:深信服官网、奇安信官网、csdn等。

内容特点:组织清晰,图形化展示,更易于理解。

内容概要:包括内网、操作系统、协议、渗透测试、安全服务、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、NMAP、BP、MSF……

由于篇幅有限,仅展示部分信息,您需要点击以下链接才能查看。

这些东西我可以免费分享给大家,如果你有需要可以点击这里获取:网络安全入门到进阶资源

—————————————————

分享