MazeSec ED

发布于: 2026-03-29 16:37

靶机信息

靶机名称:ED
靶机作者:ll104567/群主
靶机类型:Linux
难度:Easy
来源:MazeSec / QQ 内部群 660930334
官网:https://maze-sec.com/

信息收集

目标主机 IP 地址

使用 arp-scan 进行扫描

┌──(root㉿kali)-[~]
└─# arp-scan 192.168.6.0/24

192.168.6.102   08:00:27:24:f8:53       PCS Systemtechnik GmbH

目标主机 IP 地址为 192.168.6.102

端口扫描

使用 nmap 进行端口扫描

  • -p- 扫描所有端口
  • -sS 使用 SYN 扫描,也称为半开放扫描,速度较快
  • -n 不进行 DNS 解析,直接使用 IP 地址,提高扫描速度
┌──(root㉿kali)-[~]
└─# nmap 192.168.6.102 -p- -sS -n     

PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

目标主机开放了 22 和 80 端口,分别对应 SSH 和 HTTP 服务。

80端口信息收集

访问 web 页面,页面信息“Listen carefully”

页面源码存在注释:“web is nothing”

提示 web 没有东西

流量抓取

web 页面提示“Listen carefully”,常规思路,wireshark 或 tcpdump 抓包分析流量。

tcpdump 命令行操作方便,可以使用工具 tldr(too long; didn't read)来获取简洁的命令说明:

tldr tcpdump

tcpdump 的基本用法是:

-X 显示数据包的十六进制和 ASCII 内容
-A 显示数据包Ascii内容
-i <interface> 指定网络接口
host <IP_ADDRESS> 过滤特定主机的流量

使用 tcpdump 抓取目标主机的流量:

tcpdump -i eth0 host 192.168.6.102 -A

靶机在局域网里进行广播发送私钥

把私钥提取出来,保存到文件中

SSH 私钥登录用户backupd

ssh-keygen 查看该私钥对应的公钥及其注释(backupd@ED)

ssh-keygen -yf key

ssh 登录目标主机

  • -i 指定私钥文件
ssh -i key backupd@192.168.6.102

backupd 用户有 sudo reboot 权限

备份私钥发现

用户家目录有files、logs目录,在files目录下有一个备份文件backupd.tgz,files目录没有写权限,无法直接在该目录解压文件,新建目录tmp,解压文件到tmp目录

解压后,出现一个 .ssh 目录,目录下有一对密钥对及authorized_keys 文件

ssh-keygen 查看该私钥对应的公钥及其注释,发现私钥存在密码

靶机存在 php,使用 php 开启web服务,在 kali 机器上下载该私钥文件,提取哈希进行爆破

php -S 0.0.0.0:8080

在复盘前,我已经爆破过密码,因此这里可以直接john查看私钥密码是yellow

该私钥是 admin 用户的私钥,使用该私钥登录admin用户

私钥登录 admin 用户失败,回退到了密码登录,可以猜测没有配置公钥到 authorized_keys 文件中或其他原因,暂时不得而知

进行信息收集

查看进程,可以看到root用户在运行的广播私钥脚本

脚本所有者是 admin 用户,如果能够拿到 admin 用户,修改该脚本,在root执行时,就可以执行我们修改后的脚本,达到提权的目的

脚本审计:

脚本会读取 /home/backupd/.ssh/id_ed25519 文件的内容,并将其广播到局域网中,同时向 /home/backupd/logs/broadcast.log 文件写入日志

/home/backupd/.ssh/id_ed25519 位于当前用户家目录,可以删除或重命名该文件,创建一个软连接文件,指向要读取的文件,那么就可以让脚本读取我们指定的文件内容,并在局域网广播监听

该广播脚本很可能由 systemd 管理并随系统启动自动执行,因此需要确认其是否为开机自启服务,以便后续通过重启触发利用。

现在还需要确定一件事,这个广播脚本是否是开机自启服务?如果是,那么就可以通过当前用户的sudo reboot权限,重启机器,触发该脚本的执行,进行任意文件读取。

列出靶机运行的服务:

systemctl list-units --type=service

可以看到广播服务

管理员新增的服务一般在 /etc/systemd/system/ 目录下,查看该目录下的服务文件

ls -lt /etc/systemd/system/

这也就引出了这台靶机第一种方案

方案一:任意文件读取

建议提前生成一份新的密钥对,并将公钥追加到 authorized_keys 文件,避免后续无法登录靶机

ssh-keygen -t rsa -b 4096

追加到 authorized_keys 文件中

cat ~/.ssh/id_rsa.pub >> /home/backupd/.ssh/authorized_keys

删除私钥,创建软连接文件,指向 /root/root.txt 文件

重启机器,触发广播脚本执行,监听局域网广播,获取 root.txt 文件内容

方案二:上线 admin用户

前面提到私钥登录 admin 用户失败,回退到了密码登录,可以猜测没有配置公钥到 authorized_keys 文件中或其他原因

通过 find 命令查看最近变动的文件,群友靶机有奇效

find / -type f -ctime -7 2>/dev/null | grep -Ev '/proc|/sys|/run' | xargs ls -lt

关键部分:

可以看到有一个新建的 ssh 配置文件 /etc/ssh/sshd_config.d/deny-admin.conf

查看该文件内容,发现禁止 admin 用户登录

backupd@ED:~$ cat /etc/ssh/sshd_config.d/deny-admin.conf
DenyUsers admin

正是这个文件导致了 admin 用户无法使用 ssh 私钥登录,如果可以删除该文件或篡改其内容,同时使用 backupd 用户的重启权限,让 ssh 服务重启加载,最终可以让 admin 用户成功登录

前面利用到了脚本的任意文件读取功能,另外脚本还有一个日志写入功能,日志内容恰好是 # 注释符开头,如果写入到 deny-admin.conf 文件中,可能会被 sshd 解析为注释,替换掉 admin 禁止登录的限制

backupd@ED:~$ cat logs/broadcast.log 
#33 2026-03-29 06:42:19 UDP successed

由于广播脚本会向 /home/backupd/logs/broadcast.log 写入日志,因此可以删除原有 logs 目录后重建一个可控目录,再将其中的 broadcast.log 创建为指向 /etc/ssh/sshd_config.d/deny-admin.conf 的软链接,从而把日志内容写入 SSH 配置文件

提示文件存在情况属于被脚本抢先创建了,当前新建的logs目录有写权限,直接删除即可

重启系统后,广播脚本再次执行并将日志写入 deny-admin.conf,使其中原有的 DenyUsers admin 被注释内容覆盖;随后即可通过 SSH 成功登录 admin 用户

修改脚本,创建一个 setuid位 的 bash,重启后,触发脚本执行,获取到具有 setduid 位的 bash 文件,执行该文件即可获得 root 权限

admin@ED:~$ ls -alh /tmp/bash
-rwsr-sr-x 1 root root 1.2M Mar 29 06:55 /tmp/bash
admin@ED:~$ /tmp/bash -p
bash-5.0# id
uid=1002(admin) gid=1002(admin) euid=0(root) egid=0(root) groups=0(root),1002(admin)
bash-5.0#