1.auto.js混淆加密怎么还原
2.JS代码混淆解密
3.关于YApi <1.12.0 远程命令执行漏洞
4.AES算法(十一) NodeJS 环境中实战
auto.js混淆加密怎么还原
分析混淆或加密的解密解密方式,尝试逆向工程。源码
1、解密解密分析混淆或加密的源码方式:混淆是通过改变变量名、函数名、解密解密缩进等方式,源码apicontroller源码使得代码难以阅读和理解,解密解密加密是源码通过一种算法将代码转化为另一种形式,使用特定的解密解密解密算法来还原。
2、源码尝试逆向工程:混淆或加密的解密解密方式非常复杂,需要使用一些逆向工程工具来尝试理解代码的源码行为。
JS代码混淆解密
\x实际上就是解密解密将后面的进制数对应到ASCII码表中的相应字符第一段应该是
var _$ = ["<frameset framespacing=\"0\" border=\"0\" frameborder=\"0\">", "<frame name=\"main\" src=\"/\" scrolling=\"auto\" noresize=\"noresize\" />", "</frameset>"];window["document"]["writeln"](_$[0]);
window["document"]["writeln"](_$[1]);
window["document"]["writeln"](_$[2]);
最后一段应该是
var _$ = [' ', '_self', ' '];function a() {
window["b"] = null;
window["open"](_$[0], _$[1], _$[2]);
window["close"]()
}
关于YApi <1..0 远程命令执行漏洞
实验室团队开发出一款自动化Web/API漏洞Fuzz的命令行扫描工具(工具地址:github.com/StarCrossPor...)。本周将重点持续更新漏洞POC库,源码已新增多个热门组件的解密解密漏洞检测规则。功能方面:在前三个版本已陆续修复相关BUG问题,目前对扫描器结果展示也进行了优化,预计在下个版本进行更新。后续也会对使用说明文章进行补充,mvc单项选择源码方便大家使用。
YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。
github: github.com/YMFE/yapi/tr...
YApi 是一个支持本地部署的可视化接口管理平台。YApi 在 1..0 之前的版本(目前所有版本)中由于 base.js 没有正确对 token 参数进行正确过滤,导致存在远程代码执行漏洞。攻击者可通过MongoDB注入获取用户 token,其中包括用户ID、项目ID等参数。免费x站源码yapi后台的pre-request和pre-response方法存在缺陷点,通过注入调用自动化测试接口runAutoTest(),进而利用沙箱逃逸触发命令执行。
YApi < 1..0
docker 搭建 : github.com/fjc0k/docker...
docker-compose.yml 修改为存在漏洞版本,这里使用的是Yapi 版本:1..2。
使用 docker ps 查看环境搭建成功。
页面地址: xxxxx:
默认用户名:admin@docker.yapi
默认密码:adm1n
docker安装后、需要创建项目、添加接口。
添加接口
设置接口状态
导入接口
接口环境设置
若为本地搭建,环境域名修改为:.0.0.1:
非 Chrome 浏览器可忽略接口测试。
接口测试
注意:Chrome浏览器安装插件后、可以发送测试数据。
添加教程: juejin.im/post/5e3bbd...
github.com/YMFE/yapi/co...
1、修复Mongo注入导致token泄漏
2、默认关闭Pre-request 和 Pre-respones
修复方式:在if 判断中增加对参数token的验证,token 必须为字符串。
复现思路:
1、联机网站游戏源码通过接口注入获取token
2、使用aes加密方式生成加密后token
3、上传vm2逃逸脚本到 pre-response
4、调用自动化测试接口触发逃逸脚本
在漏洞描述部分、结合修复记录,发现注入点为 token。
查看官方文档: hellosean.github.io... ,/api/project/get
接受参数为token
在request.body 、query获取到token后 ,进入server/utils/token.js#parseToken()方法。
parseToken()在判断token不为空后 ,进入 aesDecode()解密token,如果解密失败,parseToken() 返回False。
tokens为False,经 if(!tokens) 条件判断后进入 getProjectIdByToken()。该方法使用在请求中获取到的token,查询项目id。app 前端后端源码在getProjectIdByToken() 内部会调用server/models/token.js#findId()。
在 findId()中、最后会进入mongdb中使用findOne(),查询数据。使用token 查询项目Id。
mongdb介绍:MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
mongdb注入: anquanke.com/post/id/...
在这里使用 $regex 正则匹配 、根据响应报文判断实现盲注。数据库中token为进制。
在 server/utils/token.js#aseEncode() 方法下已经实现了加密算法,稍微改点代码即可直接使用。要注意的是,aseEncode()方法,data参数为 uid + '|' + token ,password 为 默认salt 或用户自定义salt。默认salt为 abcde
nodejs 加密代码如下,需要安装nodejs。
注意:这里的uid是写死的,可以通过使用for循环,改变uid,生成批量token。
测试脚本如下:
上传vm2逃逸脚本
YApi pre-script:通过自定义 js 脚本方式改变请求的参数和返回的 response 数据。
pre-script 官方介绍: hellosean.github.io...
vm2介绍:vm2 是一个沙箱,可以使用列入白名单的 Node 内置模块运行不受信任的代码。
vm2版本为:3.8.4
这里可以使用 vulhub 上的脚本。
pre-response 上传接口为:/api/project/up?token=加密后的token
请求参数为:
这里将 参数 after_script 的值替换为 逃逸脚本。参数id 为项目id,需要正确,否则上传失败。id可以使用for循环,进行探测。上传测试脚本:
目前、已上传vm2逃逸脚本,使用自动化测试触发逃逸脚本,实现远程命令执行。
YApi 服务端自动化测试 :服务端自动化测试功能是在YApi服务端跑自动化测试,不需要依赖浏览器环境,只需要访问 YApi 提供的 url 链接就能跑自动化测试,非常的简单易用,而且可以集成到 jenkins。
自动化测试接口为:/api/open/run_auto_test
接口参数:id(需要爆破),token(加密后的token),mode=html
测试脚本如下:
脚本测试
修复建议
1、目前EXP已公开,受影响用户升级到最新 1..0 版本: github.com/YMFE/yapi/re...
相关参考
1. github.com/YMFE/yapi/co...
2. thegoodhacker.com/posts...
3. github.com/patriksimek/...
4. github.com/vulhub/vulhu...
5. mp.weixin.qq.com/s/7mfP...
6. mp.weixin.qq.com/s/iaQH...
7. anquanke.com/post/id/...
漏洞检测工具
工具地址: github.com/StarCrossPor...
已更新:
1、POC库新增5条热门组件漏洞检测POC:蓝凌OA前台任意文件读取漏洞、MessageSolution 企业邮件归档管理系统EEA 信息泄露漏洞、锐捷RG-UAC统一上网行为管理系统信息泄露漏洞、若依管理系统任意文件下载漏洞、ShopXO任意文件读取漏洞。已内置+漏洞检测POC。
2、扫描器功能优化了扫描结果展示(预计在下个版本更新)
持续更新:漏洞POC库、漏洞检测场景、扫描工具漏洞检测优化(检测逻辑,满足对需要连续数据包关联操作漏洞场景的检测)
关于Portal Lab
星阑科技 Portal Lab 致力于前沿安全技术研究及能力工具化。主要研究方向为API 安全、应用安全、攻防对抗等领域。实验室成员研究成果曾发表于BlackHat、HITB、BlueHat、KCon、XCon等国内外知名安全会议,并多次发布开源安全工具。未来,Portal Lab将继续以开放创新的态度积极投入各类安全技术研究,持续为安全社区及企业级客户提供高质量技术输出。
想了解更多消息,欢迎关注“星阑科技”微信公众号;
了解技术干货,欢迎关注“星阑实验室”微信公众号。
AES算法(十一) NodeJS 环境中实战
本文将简要探讨如何在 NodeJS 环境下利用 AES 算法实现加密与解密功能。NodeJS 提供的内置加密模块 crypto 是实现这一目标的关键工具,它集成了多种加密算法的 API,依赖于系统底层的 OpenSSL 支持。 在本篇内容中,我们仅聚焦于 AES 算法的核心应用。首先,需引入 crypto 模块,然后通过初始化加密函数来指定算法(如 AES--CBC),并传入 key 和 iv 参数。key 和 iv 分别作为加密和解密的密钥与初始向量。加密与解密操作的核心步骤包括数据的加密和解密,结果输出,以及填充模式的设置。默认情况下,NodeJS 的加密/解密函数会自动填充数据,使用 PKCS7 填充模式确保数据完整性。如需自定义填充模式,可通过设置 cipher.setAutoPadding(false) 来禁用自动填充,并自行调整数组长度。 此外,为了全面理解 NodeJS 中 AES 算法的使用,我们还简要介绍了 crypto 模块及 Cipher 类、Decipher 类中的常用函数。这些函数包括: crypto.createCipheriv() 和 crypto.createDecipheriv():用于初始化加密和解密操作。 Cipher 类的 cipher.update() 和 cipher.final():用于数据的加密与最终处理。 Decipher 类的 decipher.update() 和 decipher.final():用于数据的解密与最终处理。 通过遵循上述步骤与函数应用,开发者能够在 NodeJS 环境下实现 AES 算法的加密与解密功能。如有需要深入了解或查看完整实现案例,请查阅官方文档或源码资源。