记一次基于AES-CBC+RSA(PKCS1_v1_5)+HMAC-SHA256的加解密
背景:某客户系统存在多种算法混合加密以及签名校验,记录分析过程。
Rsa公钥为st(已省略):MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIVwAZ2E+O7qVmGPrBrVFVfe93V1bkLrV9LTbEA0tqPLgZzg/BPYQs0j02LZZ……
RSA私钥为ct(已省略):MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAjoS58XGU1pP+SEiJPxe9tjNiTE3orbr5I2fHtWp64p5Xsa14Yw5apqIaBNL6ot7B+FMCN7514vQhdFOs+kKvKQIDAQABAkB08eJmhc4dGYlRpPvB4uhQJu/lLxTb4g3niJQugDZf11aF2R7pBEl3zPDkXbw9KE+DbvIA5U0IkzRpZg46nIAFAiEAy1WTzlY3qxrr+ioeQneFMQW6rJQ6……
AES的固定密钥和iv(已省略):ut = "……3690……", lt = "… ...
记一次Js-Forward绕双重签名校验
背景:
某客户系统,数据包存在header和body的双重签名校验,并且参数为乱序,即使还原了签名算法也可能使得签名的结果不一致,此时用到了Js-forward工具以转发明文参数和参数值,而此系统请求和响应调用不在一个函数中,如果还原加密的请求和响应需要插入两处,一个负责转发请求,一个转发响应,可实现绕过签名的同时抓取明文的请求和响应包(此处系统请求响应的数据包均为明文,即只需要抓取请求即可,不需要抓明文响应,但为了深入学习研究也一并实现了)
工具链接:
https://github.com/G-Security-Team/JS-Forward
数据包:
数据包的header和body均存在签名校验
断点:
此处为乱序跟数据包排序不一致:
如果还原算法,但排序为混乱,拼接生成的结果会不一致此处改用JS转发的思路(本质上是修改作用域,但转发更方便直观):找一个还没生成nonce和timestamp和sign的地方(因为如果生成了以上三个,再去改参数值将会报签名错误,所以要在还没生成之前拦截才有意义):
此处有个beforesign
此处使用js-forward工具插入转发 ...
记一次Mitm绕过某数防重放的另辟蹊径
背景:
某客户系统存在某数防重放攻击(URL中拼接一个参数值,用过的将会不能再次使用,以达到防重放效果),如果进行补环境/纯算,时间/技术成本较大,本文研究了一种市面上尚未存在的另辟蹊径的方法,利用Mitm捕获参数值,并且伪造返回状态码,不发送到目标服务器,并利用某种方法批量保存N组数据到本地,在后面渗透测试的时候自动替换掉Burp中数据包对应参数的参数值,达到数据包的唯一性,以绕过防重放(可能有人想到这种思路,但没人实现开源出来,这里应该算是原创首发吧?🤣),适用于只有URL参数校验的防重放的情况。
免责声明:
本文仅用于学习研究目的,禁止销售或任何直接、间接的营利行为,转载请注明出处,通过使用本文相关代码产生的风险与作者无关。
某数防护:
重放:
会出现400状态码
但是这里发现只要重新获取一个没被用过的参数(这里是xxxxxxXD,已脱敏)的值就不会出现400状态码,那么是不是可以利用某种方法先保存N组参数值,然后利用某种方法不发送到目标服务器记录,到后面进行替换已保存的参数值就可以绕过防重放了呢?
这里使用Mitm捕获参数值,并且伪造200状态码的响应达到不发送 ...
记一次从信息收集到获取任意用户权限
背景:某客户系统,登录只需要ID号以及对应的身份证的后四位,ID号可从社交媒体收集,只需要得到身份证后四位,其登录没有任何锁定限制,而四位数在可能的时间内可进行爆破,但存在验证码,无法直接直接使用burp实现,于是编写了脚本进行爆破,最终成功爆破获取用户权限。
登录框:
进行信息收集获取ID号:
此处发现了一份报告单,右上角有二维码,扫描后得到一串域名后面跟着一串jwt:
https://xxx.xxxxxx.xxx.cn/xxxxx/#/pages/xxxxxPdf?params=eyxxxxxx
base64解密后得到了ID号,后续进行身份证爆破
这里用到ddddocr识别验证码,而此处为svg的图像验证码,需要svg转png的库cairosvg,其库在windows上运行需要安装环境:https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases/tag/2022-01-04
具体代码逻辑实现(部分已脱敏):
import requestsimport base64i ...
记一次FLASK绕签名校验联动SQLMAP获取系统权限(Getshell)
背景:
某客户系统存在签名校验,由参数以及其值拼接随机数和时间戳生成,并且数据包由multipart/form-data的表单形式传输,前端JS逆向完成后编写出了签名生成工具,但是一个个参数值复制替换到burp进行测试十分不方便,后续也是遇到了SQL注入,而手动注入比较麻烦,于是有了一键签名并发送数据包的想法,在SQLMAP的联动下快速进行SQL注入并且获取系统权限。
直接篡改数据包,会出现签名不正确:
此处单纯从数据包上看,存在随机数nonce和timestamp和签名校验sign
逆向分析JS:
其中nonce和timestamp的实现方法有了
打断点,发现是将参数以及其值和nonce和timpstamp排列后进行md5
编写脚本:
import hashlibimport timeimport randomimport jsonclass SignGenerator: def __init__(self): self.chars = "ABCDEFGHIJKLNMOPQRSTUVWSYZabcdefghijklnmopqrstuvws ...
记一次某数VMP+加解密+签名校验Bypass到越权的渗透测试
参考博客:https://darkless.cn/2025/04/10/rsvmp-bypass
使用工具:https://github.com/handbye/RSVmpBypass
背景:
在某次客户渗透中发现其数据包Url中存在固定参数的随机参数值以及固定参数的随机Cookie,数据包重放会导致返回状态码为400,无法正常请求,于是利用工具进行Bypass,从而进一步渗透测试。
此处拿某验证码接口举例:
这次请求了三次,发现每次url中参数和cookie不一致
拿其中一个进行重放:
重放发现数据包已经失效了
F12打开控制台发现有无限Debugger
并且发现瑞数VMP特征
其代码进行了高度混淆,难以还原
网上寻找相关Bypass方法:
其中博主分享了其绕过工具:
下面根据文档部署一下工具:
这里注意是要使用kali进行部署,并且有node环境
这里我已经部署好了就不重复演示了
启动服务:
启动后,在server文件夹会出现params-data.json文件:
Burp加载插件后根据相关文件位置以及自定义的参数进行配置:
重放:
此时发 ...
记一次加解密+签名校验+编写FLASK手动注入/联动SQLMAP的渗透测试
背景:
同事某系统存在加解密+签名校验,并且发现其中一些接口存在SQL注入,但鉴于存在加解密和签名校验难以测试,于是想到一种将脚本变成FLASK的网页形式进行SQLMAP的联动或进行手动注入,协助其达到无痛测试的效果
数据包存在url参数加密
其中还有签名校验
JS断点出加密为AES,并且得到密钥
进行数组转明文:
得到密钥,此密钥为动态密钥
断点也可以得到明文动态密钥
接下来分析签名校验:
此处是先获取所有请求参数中的值,将其拼接成arr
注意后面有两个时间戳,两者不一致,一个是前(timerandom)一个是后(signTime)
整理得到具体步骤:
加密参数:将每个参数值使用AES-ECB加密(PKCS7填充)并Base64编码
生成签名:a. 按固定顺序拼接加密前的原始参数的值b. 添加一前一后时间戳(timerandom)(signTime)c. 计算整个字符串的MD5d. 构造JSON字符串:{"md5": md5值, "signTime": 时间戳}e. 使用相同的AES密钥加密该JSON字符串得到签名
构 ...
记一次DLL劫持白加黑挖掘过程
工具ZeroEye
https://github.com/ImCoriander/ZeroEye
先扫描电脑上的exe:
扫描完后会在当前目录生成:
这里拿某box演示:
此处有一个exe和一个dll,Dll就是可被用来劫持的目标
Infos中有相应dll的函数信息:
如果直接执行会发生什么?
这里会发现exe无法找到对应函数,所以要将上面infos文件夹中对应dll的函数进行转发
编写cpp文件:
#include <Windows.h>#pragma comment(lib, "user32.lib")// 加载原始ffmpeg.dll的句柄HMODULE hOriginalDll = nullptr;// 定义函数指针类型(示例仅展示部分函数,需补充全部)typedef int(*av_buffer_create_t)();av_buffer_create_t pOriginal_av_buffer_create = nullptr;typedef int(*av_dict_count_t)();av_dict_count_t pO ...
记一次Smartbi从登录绕过到三连Shell
背景:
某客户系统由Smartbi框架二次开发,存在登录绕过,可获取Web管理员权限,进入后台后可利用各种方法进行命令执行Getshell,最终使用三种不同方法拿下服务器控制权限
登录绕过获取管理员权限:一般Smartbi存在三个默认用户,system,public,service此处尝试得service可成功获取cookie替换至浏览器中:此处成功登录获取管理员权限数据包:
POST /xxx/vision/RMIServlet HTTP/1.1Host: xxx.xxx.xxx:xxxxxAccept: */*Content-Length: 68Content-Type: application/x-www-form-urlencodedclassName=UserService&methodName=loginFromDB¶ms=["service","0a"]
进入后台获取管理员权限后,尝试Getshell:其中定制处,可执行计划任务:这里执行ping命令验证是否执行成功可以看到此处成功执行计划任务代码:
...
记一次Edge调试模拟器APP内webview到越权的渗透测试
背景:
在一次渗透测试中,一个APP的传输存在加密,且存在反hook防护,fridahook无法hook住,并存在360加固,无法直接分析,尝试frida-dexdump后依然找不到加解密方法和密钥,此时发现可以用浏览器调试模拟器APP的webview的方法进行调试,定位加密方法断点出密钥,从而实现解密数据,进而顺利挖掘漏洞
渗透某APP发现数据为加密传输:
尝试逆向分析加解密算法,发现存在360加固:
尝试脱壳分析,Frida-dexdump出classes
修复dex
Jadx载入,尝试搜索相关加密方法关键字
但无法找到
此时寻找了其他方法:
参考链接:https://blog.csdn.net/smile_pp123/article/details/142649944
模拟器打开APP后:
在物理机edge浏览器输入:
edge://inspect/#devices
查看此处可调试了,相当于开启了浏览器开发者工具
定位到加密方法和密钥
从而编写python加解密脚本还原加密方法
成功实现加解密
脚本代码
from gmssl ...
