文章总结: 本文详细记录了一次渗透测试过程,通过文件下载漏洞获取源码,审计发现SQL注入漏洞,面对前端加密和签名校验防护,通过JS逆向工程还原加密密钥和签名算法,最终成功利用漏洞。文章展示了从漏洞发现到绕过前端防护的完整思路,对类似场景下的渗透测试具有参考价值,强调了前端安全防护和代码审计的重要性。
综合评分: 91
文章分类: 渗透测试,代码审计,漏洞分析,前端安全,JS逆向
渗透测试-从下载漏洞到前端加解密+签名校验拿下sql注入
原创
有恒
有恒安全
2025年6月13日 10:59
广东
前言
在一次渗透中,通过下载漏洞获取源码,审计出sql注入漏洞,也是在朋友的帮助下通过js逆向出加密密钥与签名算法,成功拿下sql注入
漏洞挖掘
在响应包中,下载路径部分是base64编码的
通过解密可知为服务器的绝对路径,那么就存在文件下载漏洞
通过下载历史命令/root/.bash_history,得知源码路径,成功下载到源码
漏洞审计
该sql语句存在参数替换,存在sql注入漏洞
通过接口进行构造参数
但是失败了,原因是存在参数加密与sign签名校验
(正常的数据包)
目前有两种主要思路:一种是通过前端 JS 逆向工程,还原出加密密钥和 sign 签名逻辑;另一种则是通过后端断点调试来分析请求参数。但由于这套代码无法在本地运行,我选择了第一种方案
js调试
这部分可以看我朋友的文章,讲得比较细,同时文章中还提供了可以尝试通过其他手段与sqlmap联动利用的思路。
https://jielun.site/2025/06/12/%E8%AE%B0%E4%B8%80%E6%AC%A1%E5%8A%A0%E8%A7%A3%E5%AF%86+%E7%AD%BE%E5%90%8D%E6%A0%A1%E9%AA%8C+%E7%BC%96%E5%86%99flask%E8%81%94%E5%8A%A8sqlmap%E7%9A%84%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95/
通过搜索encrypt,找到加密方法,通过断点得知密钥的数组
进行数组转明文:
接下来分析签名校验:
此处是先获取所有请求参数中的值,将其拼接成arr
注意后面有两个时间戳,两者不一致,一个是前(timerandom)一个是后(signTime)
整理得到具体步骤:
- 加密参数:将每个参数值使用AES-ECB加密(PKCS7填充)并Base64编码
- 生成签名:
a. 按固定顺序拼接加密后的参数值
b. 添加一前一后时间戳(timerandom)(signTime)
c. 计算整个字符串的MD5
d. 构造JSON字符串:{“md5”: md5值, “signTime”: 时间戳}
e. 使用相同的AES密钥加密该JSON字符串得到签名 - 构造HTTP请求头,包含签名和其他必要字段
- 发送请求并输出响应
漏洞利用
使用朋友编写的脚本,对equTypes参数进行注入
再根据系统源码中的sql语句来编写注入payload
由于该注入点存在放大延时的效果,所以这里写的是0.01
证明存在sql注入
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:有恒安全 有恒《渗透测试-从下载漏洞到前端加解密+签名校验拿下sql注入》