Post on: Jul 8, 2025Last edited: Jul 8, 2025
Words 2245Read Time 6 min

type
status
date
slug
summary
tags
category
icon
password

matrix-breakout-2-morpheus

信息收集

端口扫描与服务识别

攻击机ip:192.168.108.50
靶机ip:192.168.108.132

信息收集

端口扫描与服务识别

notion image
图片.png
端口
服务
常见漏洞
22
SSH
弱口令、默认账户、版本漏洞
80
HTTP
XSS、SQL注入、目录遍历等
81
自定义HTTP
同样可能存在 Web 漏洞
先访问80和81端口,发现80是个普通端口,源码也没放东西,81是个登录端口,弱密码和万能密码无效
notion image
图片.png
notion image
图片.png
尝试使用使用nmap扫一下,发现也没东西

Web目录爆破

尝试对80端口和81端口进行目录爆破
发现了5个页面
  • index.html
  • robots.txt
  • javascript
  • graffiti.txt
  • graffiti.php
index之前看过了,其他的全部尝试curl一下
notion image
图片.png
notion image
图片.png
notion image
图片.png
notion image
图片.png
notion image
图片.png

漏洞发现

发现graffiti.php是一个带留言板功能的主页,而且具备潜在的文件写入命令注入入口,而且联系同名的.txt文件可以判断这个页面大概率可以对.txt文件进行修改
notion image
图片.png

漏洞利用

文件写入获取WebShell

尝试传入123看看是否能写入.txt文件
可以写入,尝试传入shell
成功拿到RCE,用攻击机进行连接

获取反向Shell

权限提升

内部信息收集

进入之后尝试信息收集,一番搜寻之后发现第一个flag并且带有后续提示
notion image
图片.png
notion image
图片.png
说明下一步和neo的图片有关
将图片拿回本地,尝试查看元数据
没有发现有用的信息,因为是png格式所有考虑LSB隐写判断真实文件类型
无果,先暂时放弃这里,继续收集其他消息

Docker环境探查

ip a 后发现还存在一个docker环境,ip为172.17.0.1,尝试查看docker容器,依旧没有权限,当前用户也不在用户组,也跑不了docker命令,先用python在攻击机上开个端口,上传linpeas脚本进行信息收集,并将结果传回攻击机查看

Linpeas脚本扫描

Capabilities分析

发现了python被赋予了cap_sys_admin 能力,并且权限是 effective (e)permitted (p),所以当我们以普通用户身份运行 /usr/bin/python3-9 时,这个进程也拥有 CAP_SYS_ADMIN 权限,而这个权限在linux中很强大,几乎等价于 root 权限
https://book.hacktricks.wiki/zh/linux-hardening/privilege-escalation/linux-capabilities.html#cap_sys_admin
但是我们发现只有root和humans组的成员能执行这个python,线索又断了

Nginx配置审计

回到开头尝试在靶机上查看两个主页的信息
目录根路径:/var/nginx/html 用户名密码存储在:/var/nginx/html/.htpasswd
查看一下发现是apache使用的md5hash,使用john直接破解,无果
发现index还给了一点提示
将图片拿下来分析,发现也没什么东西 : (

进程监控

上传pspy64
发现有定期执行任务
查看程序发现并不在本机上,应该在docker中,程序定期连接到81端口,我们可以想办法截获一下

流量劫持获取凭证

用iptables重定向81端口的TCP流量到3333端口
iptables
管理防火墙规则的命令
-t nat
指定操作的表是 nat 表(用于网络地址转换)
-D
删除(delete)一条规则
PREROUTING
链名:数据包刚到达网卡,还未被路由前触发
-p tcp
匹配协议类型为 TCP 的数据包
--dport 81
匹配目标端口为 81 的数据包
-j REDIRECT
动作为重定向(REDIRECT),即转发到本地端口
--to-port 3333
重定向目标端口为 3333
启动socat监听并转发
将拿到的凭证解密
https://www.freebuf.com/articles/system/358115.html

横向移动与提权

拿到凭证后登录到ssh,发现刚好也是humans组的那我们之前收集到的信息就有用了,直接开始使用cap_sys_admin进行提权,伪造一个passwd,将密码为password的密码加密,写入伪造的passwd
notion image
图片.png

利用CAP_SYS_ADMIN提权

基于python的exp 利用 libc.mount() 和 Python 的 ctypes 库,通过 MS_BIND(绑定挂载)机制将伪造的 /etc/passwd 文件挂载覆盖到真实的 /etc/passwd 上,从而实现提权

函数定义

这是为了告诉 ctypes 函数 mount() 的参数类型是什么:
参数名
类型
含义
source
c_char_p
源路径(你要挂载的文件)
target
c_char_p
目标路径(你要挂载到哪里)
filesystemtype
c_char_p
文件系统类型,MS_BIND时为 "none"
mountflags
c_ulong
挂载选项,这里是 MS_BIND = 4096
data
c_char_p
一些额外选项(通常为 Noneb""
结束

Loading...