越权漏洞简介

越权漏洞形成的原因

  1. 后台使用了不合理的权限校验规则
  2. 对客户端请求的数据过分相信而遗漏了权限的判定

越权漏洞的分类

  • 水平越权(横向越权):这种类型的越权就是越权其他用户,比如说你要查看一篇邮件,但是有越权漏洞,却可以查看其他人的邮件。水平越权导致任意用户敏感信息泄露或者用户信息被恶意修改。
  • 垂直越权(纵向越权):这种类型的越权就是可以在不同身份之间越权,比如你是普通用户,但是可以越权到管理员,甚至超级管理员。管理员和超级管理员能使用的功能就多了。这里再提一下,有时候会把垂直越权再细分为向上越权和向下越权:
    • 向上越权:普通用户可以执行管理员权限
    • 向下越权:一个高权限用户可以访问低权限用户的数据(但我总感觉“向下越权”这个说法很怪,作一个了解即可)
  • 上下文越权:上下文越权就是说在某个程序需要执行n个步骤,而你却可以跳过其中某个步骤,直接到最后的步骤。

还有一些对越权漏洞的划分,不太常见,稍作了解即可:

  • 交叉越权:既存在水平越权也存在垂直越权

再用一幅图直观感受一下:

image-20231204214718264

越权漏洞测试手法

猜测接口找到越权漏洞

  1. 使用f12开发者工具,寻找js文件,里面一般会有一些接口,形如:api/模块名、api/v1/模块名、域名/api/模块名、域名/api/v1/模块名【在找 js 文件的时候,可以关注下有没有以 runtime 命名的 js 文件,因为在这种 js 文件中会包含其他 js 文件的名称(包括当前页面没有加载的 js 文件),这样利用 runtime js 文件就发现了更多的 js 文件,使得找到 api 接口的概率又大了些】

  2. 尝试访问接口,直接在浏览器输入接口网址即可

  3. 判断一下该接口的作用(添加?删除?修改?查询?),以确定下一步的构造【比如,某个js文件中只有查询的接口,那么接下来可以尝试一下构造添加、修改和删除接口】image-20231027141911393

  4. 尝试构造接口,下面是一些后台模块常见的接口格式

    添加接口

    • POST/PUT /api/模块名
    • POST /api/模块名/add

    删除接口

    • DELETE /api/模块名/id
    • GET /api/模块名/del?id=
    • POST /api/模块名/

    修改接口

    • POST /api/模块名/modify
    • POST /api/模块名/

    查询接口

    • GET /api/模块名/list
    • GET /api/模块名/all

    其他说明

    • POST发包的值常为{},即{“键1”:“值”,“键2”:“值”}

前端接口信息本质上是JS信息收集,可以使用工具:

这里再说明一下为什么要多多关注JS文件:JS文件与HTML、CSS等文件统一作为前端文件,是可以通过浏览器访问到的,相对于HTML和CSS等文件的显示和美化作用,JS文件将会能够将页面的功能点进行升华。对于渗透测试来说,JS文件不仅仅能够找到一些URL、内网IP地址、手机号、调用的组件版本等信息,还存在一些接口,因为前端需要,所以一些接口将会在JS文件中直接或间接呈现

微信小程序接口未授权

微信小程序解包

微信小程序解包介绍:微信小程序解包是指将微信小程序的源代码从其原始的.wxapkg文件中提取出来,以便进行分析、修改或反编译。一些开发者可能会使用这种技术来了解小程序的内部工作原理,或者为了进行安全审计。请注意,微信小程序的反编译和解包操作可能会违反微信的服务条款

.wxapkg文件介绍:.wxapkg文件是微信小程序的打包文件格式(所以又称微信小程序包、微信小程序源码包),它是一种压缩文件,通常包含了一个或多个小程序的代码、资源和配置信息等。可以将.wxapkg文件解压缩成一个目录结构,其中包含了小程序的所有文件和文件夹,例如JavaScript、CSS、图片、音频、视频、配置文件等【微信小程序在运行时,会在用户系统中生成一个后缀为wxapkg的程序包,通过反编译这个包,我们便可以获取到此小程序的前端代码,通过分析前端代码,可以得到后端接口与传输数据】

操作手法:想要对微信小程序进行解包操作,首先是要获取目标小程序的wxapkg文件。wxapkg文件是微信小程序的安装包文件格式,用于将小程序的代码、资源以及其他必要的文件打包成一个单独的文件。但是Windows环境下的wxapkg文件中的js代码和资源文件一般是被加密的,需要使用专门设计的解密工具先进行解密,再进行解包操作,获取文件内容。iOS和Android平台下可直接进行解包操作

  1. 获取.wxapkg文件(Windows版和手机版的微信小程序包稍微有点区别,下面以Windows版为例)

    • Windows .wxapkg 文件默认存放路径:C:\Users\{系统用户名}\Documents\WeChat Files\Applet\{小程序的AppID}\
    • IOS .wxapkg 文件默认存放路径:/var/mobile/Containers/Data/Application/{系统UUID}/Library/WechatPrivate/{user哈希值}/WeApp/LocalCache/release/{小程序的AppID}
    • Android .wxapkg 默认文件存放路径:/data/data/com.tencent.mm/MicroMsg/{user哈希值}/appbrand/pkg/

    说明:以上是默认存放路径,如果更改过微信文件保存路径,可以在微信设置中查看

    image-20231030150424988

    目录展示:目录下有一堆wx开头的目录,后面的一串字符就是对应的小程序ID【可以在访问小程序时通过抓包获取到。如果不想抓包又想知道小程序ID,有个技巧,可以把这些目录删掉,重新访问小程序时会再次自动下载,根据日期来找到对应的包即可】image-20231030145000259

  2. Windows版的小程序包自动在外部加了一层的加密(所以才需要解密,只有解密了才能解包),我们看到的包名统一为:_APP_.wxapkg

image-20231030145549897

说明:如果打开后看到多个.wxapkg,这是一种防御手段,称为分包,处理方式还是一样,对所有.wxapkg文件进行解密、解包即可(无非就是多逆向几个包而已)【文件大小最大的一般是主包】

image-20231030210013880

使用010editor打开,可以看到V1MMWX这样的文件头,V1MMWX标识就是加密后所添加的标识

Windows版的微信小程序的加密流程:

  1. 首先pbkdf2生成AES的key。利用微信小程序id字符串为pass,salt为saltiest 迭代次数为1000。调用pbkdf2生成一个32位的key
  2. 首先取原始的wxapkg的包得前1023个字节通过AES通过1生成的key和iv(the iv: 16 bytes),进行加密
  3. 接着利用微信小程序id字符串的倒数第2个字符为xor key,依次异或1023字节后的所有数据,如果微信小程序id小于2位,则xorkey 为 0x66
  4. 把AES加密后的数据(1024字节)和xor后的数据一起写入文件,并在文件头部添加V1MMWX标识

下面两个github项目都可以对Windows版的微信小程序进行解密操作

这里使用pc_wxapkg_decrypt进行解密:

image-20231030175422842

  • 注意:
    • 路径中不要带空格,否则会报错,类似“Program File”这种,要避免
  • 解密命令
#.\pc_wxapkg_decrypt.exe -wxid 小程序ID -in __APP__.wxapkg路径
.\pc_wxapkg_decrypt.exe -wxid wx518a2b2e96ce3ca0 -in C:\Users\Zeroten\Desktop\微信小程序解包测试\__APP__.wxapkg

image-20231030180007316

解密后的文件默认名称为dec.wxapkg,会直接生成在pc_wxapkg_decrypt.exe所在目录下

image-20231030180405972

解密后的包就是需要通过解析来获取小程序源码的包,这里先使用010editor查看小程序的结构

image-20231030180830409

从旁边的文件目录中可以看出,这种包并非是一个压缩格式的包,而是一个二进制的包,所以需要特定的方法解包

  1. 解包操作:

下面两个github项目都可以微信小程序进行解包操作:

#执行后,会在dec.wxapkg目录下生成解包后的文件夹
python3 unwxapkg.py dec.wxapkg

image-20231030182724709

image-20231030182857180

image-20231030182913615

目录介绍:

image-20231030210847809

敏感关键词:appid、secret(如果这个appid和secret可以使用,就能获取到seesion_key),下面是微信官方的小程序登录流程【https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html】

image-20231030212430785

img

image-20231030212404448

#执行后,会在dec.wxapkg目录下生成解包后的文件夹
node wuWxapkg.js dec.wxapkg

image-20231030185209297

image-20231030185415461

image-20231030185634433

如提示,检测到此包是分包后的子包,使用-s参数指定存放路径即可

#node wuWxapkg.js 分包.wxapkg -s=/分包所在目录
node wuWxapkg.js _19871000_28.wxapkg -s=../_1514036652_28

自动化测试

这里给出几个未授权漏洞测试工具:

鸣谢

Comments

2023-12-04

⬆︎TOP