网络安全----小程序渗透测试反编译审计漏洞

news2024/11/24 18:48:08

一、什么是反编译审计漏洞

微信小程序反编译渗透测试是一种针对微信小程序的安全测试方法,是在通过对小程序源代码的反编译和分析,发现潜在的安全漏洞,并对其进行渗透测试以验证其安全性的一种方法。

二、测试流程及其步骤

  • 反编译小程序:使用适当的工具对微信小程序进行反编译,将其源代码还原成可读的形式,以便进行后续分析和测试。
  • 源代码审查:仔细审查小程序的源代码,查找潜在的安全漏洞,例如代码中的XSS漏洞、未经授权的访问点、不安全的数据处理等。
  • 逻辑分析:分析小程序的业务逻辑,了解其工作原理和数据流动,找出可能存在的逻辑漏洞和不当授权等问题。
  • 渗透测试:基于发现的漏洞和问题,对微信小程序进行渗透测试,尝试利用这些漏洞进行攻击,例如尝试执行XSS攻击、SQL注入、CSRF攻击等,以验证漏洞的存在性和影响程度。
     

三、小程序渗透测试详细步骤

1.小程序的发现

在日常生活中,利用微信自带的小程序搜索功能可以轻松地找到我们需要的小程序。微信会根据用户输入的关键字,依次搜索小程序的名称、简介以及开发者信息,并返回与关键字匹配度较高的相关小程序。下图展示了用户搜索含有“微信”关键字的小程序时客户端返回的搜索结果:

在渗透测试工作中,单独通过逐个搜索的方式来寻找目标小程序显然效率太低,且无法搜集到所有相关的小程序。因此,我们需要一种更为方便、高效的方法来获取小程序搜索结果。

一种可能的解决方案是尝试修改微信搜索请求的数据包,以便一次性返回大量的搜索结果,或者多次获取足够数量的搜索结果。当然,这需要我们通过抓包工具捕获到相关的网络数据包。下图是抓取到的数据包的简化版本,已删除其他非关键参数。

可以看到这是一个向“https://mp.weixin.qq.com/wxa-cgi/innersearch/subsearch” POST数据的请求包,POST的内容中含有“query”、“cookie”、“subsys_type”、“offset_buf”这四个参数。“query”内容为用户搜索的内容,可以为任意值;“cookie”参数是当前微信用户的校验信息,具有一定的有效期,但能保持在很长一段时间内不会过期;“subsys_type”则为一个固定值,恒等于“1”;“offset_buf”参数较为关键,控制具体搜索多少个小程序、返回多少小程序信息。我来带大家分析一下“offset_buf”参数为什么我认为比较关键:参数内容是一串JSON数据,我们可以把他拆分成“server”、“index”、“client”三组来分析。第一组“server_offset”表示服务器从第几个小程序中开始搜索,我们将参数保持不变为“0”即可;“server_limit”表示服务器最多查询多少个小程序,在普通用户的搜索中恒为“120”,这也就解释了为什么我们在搜索一些小程序关键字时总是搜索不全,并不是没有更多的相关小程序了,而是服务器不会继续搜索了。第二组“index_step”表示每一次查询多少个值,这个值肯定是越大越好,以便于我们能一次查完;“index_offset”可以理解为用户目前已经查询了多少个小程序,我们将他设置为恒为“0”即可。第三组“client_offset”表示微信客户端上已经显示了多少个微信小程序,我们无需去理会,也直接设置为恒为“0”即可,“client_offset”则是每次查询返回多少个小程序结果,这里我们设置为实际想查询的数量。

我们便可构造参数来编写自定义微信小程序搜索的脚本,其Python程序源码如下:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import requests
import json

def Get_Apps(query, number, cookie):
    headers = {
        "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.11(0x17000b21) NetType/WIFI Language/fr"
    }
    url = "https://mp.weixin.qq.com/wxa-cgi/innersearch/subsearch"
    params = {
        "query": query,
        "cookie": cookie,
        "subsys_type": 1,
        "offset_buf": json.dumps({
            "page_param": [
                {
                    "subsys_type": 1,
                    "server_offset": 0,
                    "server_limit": int(number) + 30,
                    "index_step": number,
                    "index_offset": 0
                }
            ],
            "client_offset": 0,
            "client_limit": int(number)
        })
    }

    response = requests.post(url=url, params=params, headers=headers).json()
    App_Id_List = []
    App_Name_List = []
    try:
        App_Items = response['respBody']['items']
        for App_Item in App_Items:
            App_Id = App_Item['appid']
            App_Name = App_Item['nickName']
            App_Id_List.append(App_Id)
            App_Name_List.append(App_Name)
    except KeyError:
        print("无法获取小程序信息,请检查参数是否正确。")
        return [], []

    return App_Id_List, App_Name_List

if __name__ == '__main__':
    query = input("请输入要搜索的微信小程序名称: ")
    number = input("请输入要返回的小程序数量: ")
    cookie = input("请输入你获取到的Cookie信息: ")

    App_Id_List, App_Name_List = Get_Apps(query, number, cookie)

    if App_Id_List and App_Name_List:
        print("返回的小程序名: {}".format(",".join(App_Name_List)))
        print("返回的小程序ID: {}".format(",".join(App_Id_List)))
    else:
        print("信息获取失败,请检查!")

2.获取小程序源码

打开文件夹

返回上一级目录

这些wx开头的就是小程序文件

获取其小程序源码

3.反编译小程序

反编译需要工具:unveilr  (工具链接会放在文末)

将unveilr 解压,然后在当前目录打开cmd

复制小程序路径,运行反编译文件

成功会在刚才的小程序文件夹目录下生成一个__APP__的文件夹,这里面的就是小程序的源码

3、审查源代码

这里需要用到微信开发者工具(直接百度搜索微信开发者工具,选择对应版本就可以)

安装好之后,打开微信开发者工具,选择小程序——>导入

选择刚才的__APP__文件夹

导入时候,选择不使用云服务, AppID 自动获取,项目名称自己起一个

我这里是之前已经打开过了,所以会提示

点击确定,就可以进行调试了

现在就可以审查源代码了

4、渗透测试

一般我们会看app.js文件和app.json文件,js文件包含小程序调用的JS文件。 json文件包含小程序的路径,一般可以用来测试未授权访问。

到这里前期的准备工作就算结束了,大家就可以利用反编译出来的源码进行渗透了,其实就类似web渗透过程中,找前端源码一样。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1672098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【opencv】图像处理(一)

实验环境:anaconda、jupyter notebook 实验用到的包:numpy,matplotlib,opencv 一、opencv安装 最好使用python3.6(我之前用的3.9安装opencv3.4.1.15会失败) conda create -n cv python3.6安装opencv3.4.1.15(3.4.2版…

[C语言知识]return和exit到底有什么区别?

前言 💖💖💖欢迎来到我的博客,我是anmory💖💖💖 又和大家见面了 欢迎来到C语言知识系列 用通俗易懂的语言让编程语言不再困难 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭…

windows版本达梦数据复制软件 DMDRS安装

安装步骤: 1: 2:注意安装提醒 3:接受 4:选择安装路径,注意权限以及所需空间大小 5:观察支持的数据源类型

2024审计师报名流程图解❗报名时间汇总❗

2024年审计专业技术资格考试报名正在进行中 🔍审计报名流程 一、考生注册 打开浏览器登录中国人事考试网进行【考生注册】,按照提示认真填写个人注册信息,确保个人信息真实、完整、准确,并上传已处理好的照片。 二、考生报名 1⃣考…

计算机毕业设计springboot体育馆场地预约管理系统【附源码】

计算机毕业设计springboot体育馆场地预约管理系统[附源码] 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制…

ue5地编模块学习记录

ue5网站功能3d溜溜网下载模型https://anyconv.com/max-to-fbx-converter/3dmax转换fbx模型解决问题记录 一、光源 搜索光源搜索不到的时候可以点击 窗口> 对场景内的光照进行处理 二、认识节点 在UE5中,Depth Fade节点通常用于在材质中实现深度淡化效果&#…

element ui输入框后面带输入的字符数量

使用el-input的属性&#xff1a; maxlength&#xff1a;最长字符限制&#xff1b; show-word-limit&#xff1a;显示输入字符数量&#xff1b; 例&#xff1a; <el-input v-model"title" placeholder"请输入名称" maxlength"200" show-wor…

kafka 图形化

介绍 idea 中的一个插件 kafkalytic,kafka 图形化 简单又强大 安装 使用界面 总体信息 数据查看

基于Java的qq截图工具参考论文(论文 + 源码)

【免费】基于Java的qq截图工具.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89304179 基于Java的qq截图工具 摘要 当今时代是飞速发展的信息时代&#xff0c;人们在对信息的处理中对图像的处理量与日俱增&#xff0c;这一点在文档人员上显得非常突出。 本软…

【KMP算法最详细讲解】28. 实现 strStr()

实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串&#xff0c;在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在&#xff0c;则返回 -1。 示例 1: 输入: haystack "hello", needle "ll" 输出: 2 示…

《三》菜单栏_工具栏_状态栏动作与实现

上期我们创建了辣么多的动作&#xff0c;那么这次我们要是开始实现这些动作&#xff0c;撸起袖子来吧&#xff1a; //菜单动作&#xff08;ACtion&#xff09;QAction *newAct;//新建QAction *openAct;//打开QAction *saveAct;//保存QAction *saveAsAct;//另存为QAction *prin…

高铁列车班组信息宣传投稿我喜欢上了这个好方法

作为高铁列车班组的一名工作人员,我肩负着对外信息宣传的重任。随着高铁列车的快速发展,我们班组不仅需要提供优质的服务,还需要通过媒体向外界传递我们的声音,展示我们的风采。然而,在投稿的过程中,我经历了一段充满挑战和困惑的时光。 起初,我采用传统的邮箱投稿方式,将精心撰…

TS的快速入门(HarmonyOS学习第一课)

快速入门 学习TypeScript 对于Harmony0s,应用开发至关重要。在Harmonyos 中&#xff0c;主力编程语言为 ArKTS&#xff0c;它是基于 TypeScript 的一种语言&#xff0c;其通过与ArkUI 框架的匹配&#xff0c;拓展了声明式UI和状态管理等能力&#xff0c;使开发者能够以更简洁自…

BMS-HiL系统方案设计

系统集成了业内著名 NI 公司的软硬件平台。 系统设计采用分布式设计模式。主控上位机作为整个实验的管理者主要设计软件交互和 流程管理的业务&#xff1b;下位机主要业务为序列执行与设备调用&#xff0c;各模块详细测试方案如下所示。 系统搭建使用 PXI 系统技术&#xff0c;…

【命名空间】(中北大学-程序设计基础(2))

目录 题目 源码 结果示例 题目 学校的人事部门保存了有关学生的部分数据&#xff08;学号、姓名、年龄、住址&#xff09;&#xff0c;教务部门也保存了学生的另外一些部分数据&#xff08;学号、姓名、性别、成绩&#xff09;&#xff0c;两个部门分别编写了本部门的数据管…

OS复习笔记ch5-4-2

引言 承接上文我们介绍了信号量机制和应用信号量机制实现的进程同步和互斥&#xff0c;这一节我们将围绕一些经典问题对信号量机制展开更深入地探讨。 读者/写者问题 读者/写者问题与我们之前遇到的问题类型不同&#xff0c;它描述的是&#xff1a; 有读者和写者两组进程&am…

分布式版本控制工具git

1 安装Git 在linux上我们建议你用二进制的方式来安装git&#xff0c;可以使用发行版包含的基础软件包管理工具来安装&#xff0c;如果你是 是CentOS或者Fedora的操作系统&#xff0c;可以使用yum命令来安装git&#xff1a; $ sudo yum install git如果你是ubuntu或者是Debian…

语音识别-paddlespeech-流程梳理

上一次研究语音识别是21年年底的事情了&#xff0c;记得当时是先进行了语音识别的应用&#xff0c;然后操作了模型的再次训练&#xff1b;两年过去&#xff0c;关于ASR相关流程忘得差不多了&#xff0c;这次基于paddlespeech的代码&#xff0c;进行了流程的梳理&#xff0c;关于…

从零创建一个vue2项目

标题从零创建一个vue2项目&#xff0c;项目中使用TensorFlow.js识别手写文字 npm切换到淘宝镜像 npm config set registry https://registry.npm.taobao.org安装vue/cli -g npm install -g vue/cli检查是否安装成功 vue -V创建项目 vue create 项目名安装TensorFlow npm …

AI试衣IDM-VTON,Windows11本地安装配置记录!

昨天我们已经介绍过IDM-VTON这个开源项目了。 通过这个软件可以轻松实现一键换衣服。 昨天&#xff0c;简单演示了一下在线使用。 今天&#xff0c;来演示如何安装到本地电脑上&#xff01; 本地配置会有一定的专业性&#xff0c;懂的人可以参考下。 不懂得直接拉到最后&am…