如何使用jscythe并通过Node.js的Inspector机制执行任意JS代码
2022-11-15 21:58:53 Author: FreeBuf(查看原文) 阅读量:9 收藏

 关于jscythe 

jscythe是一款功能强大的Node.js环境安全测试工具,在该工具的帮助下,广大研究人员可以利用Node.js所提供的Inspector机制来强制性让基于Node.js/Electron/v8实现的进程去执行任意JavaScript代码。值得一提的是,即使是在目标进程的调试功能被禁用的情况下,jscythe也能做到这一点。

当前版本的jscythe1在Visual Studio Code、Discord和任意Node.js应用程序上进行过完整测试,请广大研究人员放心使用。

 Node.js的Inspector机制是什么?

Node.js 提供的 Inspector 非常强大,不仅可以用来调试 Node.js 代码,还可以实时收集 Node.js 进程的内存、 CPU Profile 和堆栈内存快照等数据,同时支持静态、动态开启,是一种调试和诊断 Node.js 进程非常好的方式。

通过它可以收集 Node.js 进程的堆快照分析是否有内存泄漏,可以收集 CPU Profile 分析代码的性能瓶颈,从而帮助提高服务的可用性和性能。另外,它支持动态开启,降低了安全风险,同时支持对子线程进行调试,是一个非常强大的工具。

 工具运行机制 

1、定位到目标进程;

2、向目标进程发送SIGUSR1信号,此时将会打开一个端口并开启调试器;

3、通过在发送SIGUSR1信号之前和之后比较打开的端口来确定调试端口;

4、从http://localhost:<port>/json获取WebSocket调试URL和会话ID;

5、使用提供的代码发送一个Runtime. evaluate请求;

6、搞定!

 工具下载 

该工具基于Rust语言开发,因此我们首先需要在本地设备上安装并配置好Rust环境。

接下来,广大研究人员可以使用下列命令将该项目源码克隆至本地:

git clone https://github.com/evilsocket/jscythe.git

项目构建

切换到项目目录下,然后通过cargo命令完成项目代码构建:

cd /jscythecargo build --release

 工具运行 

指定一个目标进程,并执行一个基础表达式语句:

./target/debug/jscythe --pid 666 --code "5 - 3 + 2"

从一个文件执行代码:

./target/debug/jscythe --pid 666 --script example_script.js

向右滑动、查看更多

example_script.js文件中的代码可以require任何代码模块并执行任意代码,例如:

require('child_process').spawnSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator', { encoding : 'utf8' }).stdout
向右滑动、查看更多

通过表达式语句搜索进程信息:

./target/debug/jscythe --search extensionHost --script example_script.js

向右滑动、查看更多

查看工具帮助信息:

jscythe --help

 工具运行截图 

 许可证协议 

本项目的开发与发布遵循GPLv3开源许可证协议。

 项目地址 

jscythehttps://github.com/evilsocket/jscythe

参考资料:

https://nodejs.org/en/docs/guides/debugging-getting-started/

精彩推荐


文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NjA0NjgyMA==&mid=2651203410&idx=4&sn=a65cf57c0a31b4c32bca3f3742d9cd31&chksm=bd1db5d98a6a3ccf5e1996ebee17fc2a9bf6f185934b4034523df44d9ac837b1e6dcca4e17d0#rd
如有侵权请联系:admin#unsafe.sh