1. 从一台靶机说起Aragog 的关卡设计思路Aragog 这个靶机名字取自《哈利·波特》里的巨型蜘蛛命名本身就暗示了它的特点——盘根错节的线索、需要耐心梳理的攻击面以及一个藏在深处的巢穴。我在练习这台机器的时候第一感觉就是它的入口并不难找但真正拿到 root 的过程需要把好几条看似无关的线索串起来。这种设计在靶机练习里非常典型它不考验你会不会用某个单一工具而是考验你能不能把信息收集、服务枚举、文件分析、权限提升这几步连成一条完整的链路。这篇文章面向的是已经接触过基础渗透流程、想进一步提升实战串联能力的朋友。如果你还停留在扫端口、跑字典的阶段Aragog 会是一个很好的过渡靶机——它不会一上来就给你一个明显的漏洞而是需要你从 Web 服务里挖出隐藏信息再结合本地文件系统的配置问题完成提权。整个过程没有花哨的 0day全是配置疏忽和信息泄露的组合拳这恰恰是真实环境里最常见的失陷路径。我打算按照实际的攻击顺序来写从信息收集开始一步步走到 root shell。中间会重点讲清楚每一步为什么这么做而不是只给命令。因为命令谁都能抄但判断力才是渗透测试里真正值钱的东西。同时我会补充一些在实战中容易忽略的细节比如目录爆破的字典选择、文件传输的几种方式对比、以及提权时如何快速定位可疑配置。提示本文所有操作均在授权的练习靶机环境中进行。任何未经授权的测试都是违规行为请务必在合法合规的范围内练习。2. 信息收集端口扫描与 Web 服务的初步探测2.1 全端口扫描的策略与结果解读拿到一台目标机器第一步永远是搞清楚它开了哪些门。我习惯先用一次快速的全端口扫描摸清范围再针对开放端口做深度探测。这里用到的思路是先广度后深度避免在单个端口上浪费太多时间却漏掉了其他入口。nmap -p- --min-rate 1000 -T4 10.10.10.x -oN allports.txt-p-表示扫描全部 65535 个端口--min-rate 1000强制每秒至少发 1000 个包来加速-T4是激进的时间模板。扫完之后通常会看到 22 和 80 两个端口开放。22 是 SSH80 是 HTTP。这两个端口的组合意味着Web 服务很可能是主要入口SSH 则是最终拿 shell 或者维持访问的通道。接下来对这两个端口做服务版本探测nmap -sV -sC -p 22,80 10.10.10.x -oN detail.txt-sC会跑一遍默认的 NSE 脚本能顺带发现一些常见信息比如 HTTP 标题、SSH 主机密钥指纹等。这一步的输出里80 端口的 HTTP 标题往往就是第一个线索。Aragog 的 Web 页面标题和内容会给你一个域名提示这个提示在后续的虚拟主机枚举里至关重要。2.2 虚拟主机枚举为什么直接访问 IP 看不到东西很多人扫到 80 端口开放浏览器一打开发现是个默认页或者空白页就以为没东西了。这是新手最容易踩的坑。真实环境里一台服务器上往往跑着多个站点通过不同的域名来区分。你直接用 IP 访问服务器不知道该给你哪个站点就返回默认页。所以第二步是把这个域名线索用起来。假设页面里提到了一个类似aragog.htb的域名先把它加到本地 hosts 文件echo 10.10.10.x aragog.htb | sudo tee -a /etc/hosts然后做虚拟主机爆破看看还有没有其他子域名gobuster vhost -u http://aragog.htb -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt --append-domain这里字典的选择很关键。subdomains-top1million-5000.txt是 SecLists 里常用的子域名字典5000 条在速度和覆盖率之间比较平衡。如果时间充裕可以换更大的字典但大多数练习靶机的子域名都在常见词范围内。爆破结果里通常会出现一个类似dev.aragog.htb的子域名这就是真正的入口。注意虚拟主机爆破和目录爆破是两回事。前者是找不同的域名后者是找同一个域名下的路径。很多人混淆这两者导致漏掉关键入口。2.3 目录爆破与文件类型关注拿到dev.aragog.htb之后再对它做目录爆破gobuster dir -u http://dev.aragog.htb -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,html,txt,zip-x指定要尝试的扩展名。这里加上zip和txt是有讲究的——开发站点经常会把源码打包或者留下说明文件这类文件往往是突破口。爆破结果里如果出现一个dev.zip或者类似的压缩包基本可以确定这就是设计者留给你的入口。我在实际操作中的体会是目录爆破不要只盯着 200 状态码。301、302、403 同样有价值。403 意味着目录存在但禁止访问可能通过其他方式绕过301/302 可能是跳转顺着跳转往往能找到真实路径。把这些状态码都记下来后面分析的时候会用上。3. 源码分析从压缩包里挖出数据库凭据3.1 下载与解压源码包假设目录爆破发现了一个dev.zip直接下载wget http://dev.aragog.htb/dev.zip unzip dev.zip -d aragog_src解压之后先别急着看代码先用tree或者find把目录结构过一遍find aragog_src -type f | head -50这一步的目的是快速定位关键文件。通常配置文件config.php、.env、settings.py、数据库脚本.sql、备份文件.bak是重点。Aragog 的源码里关键信息藏在一个 WordPress 的配置文件里。3.2 WordPress 配置文件里的凭据如果源码是 WordPress 站点直接看wp-config.phpdefine(DB_NAME, aragog_db); define(DB_USER, aragog_user); define(DB_PASSWORD, s3cr3t_pssw0rd); define(DB_HOST, localhost);这里就拿到了数据库的用户名和密码。很多人拿到这个就停了觉得数据库在 localhost 上没法直接连。但别忘了你手上还有 SSH 端口。如果这个密码在系统里被复用就能直接 SSH 登录。这就是所谓的凭据复用真实环境里极其常见。先试试用这组凭据 SSH 登录ssh aragog_user10.10.10.x如果成功恭喜你拿到了初始 shell。如果失败说明系统账户和数据库账户不是同一套那就需要另找路径。Aragog 的设计是这组凭据确实能登录但登录后的用户权限很低需要进一步提权。3.3 源码里其他容易被忽略的线索除了配置文件源码里还有几类东西值得翻一翻。第一是注释开发者经常在代码注释里留下测试账号、TODO 事项或者临时后门。第二是版本信息readme.html、changelog.txt这类文件会告诉你用的什么版本如果版本有已知问题可以直接利用。第三是上传功能相关的代码如果站点有文件上传接口代码里会写清楚允许的扩展名和存储路径这对后续拿 shell 很有帮助。我在翻 Aragog 源码的时候注意到它的 WordPress 版本比较老而且装了一个有问题的插件。这个插件的信息在wp-content/plugins目录下能直接看到。虽然这台机器最终不是靠插件漏洞拿下的但这个习惯要养成——源码在手等于把目标的底牌看了一半。4. 从 Web 到 Shell利用已知凭据建立立足点4.1 SSH 登录后的第一件事环境摸底用数据库凭据成功 SSH 登录后第一件事不是急着找 flag而是做环境摸底。我通常会跑这几条命令id whoami uname -a cat /etc/os-release sudo -lid和whoami确认当前身份uname -a和/etc/os-release确认系统版本sudo -l看当前用户有没有 sudo 权限。Aragog 这台机器上sudo -l的输出会告诉你一个关键信息当前用户可以用某个特定命令或者属于某个特定组。如果sudo -l显示可以无密码运行某个命令那提权就简单了。但 Aragog 没这么直接它需要你从其他角度切入。4.2 文件系统里的敏感信息排查拿到低权限 shell 后要养成翻家底的习惯。重点看这几个地方/home下其他用户的家目录看有没有可读的配置文件、SSH 私钥、历史命令记录/var/www下的 Web 目录看有没有数据库配置、上传目录、日志文件/tmp和/var/tmp看有没有其他用户留下的临时文件/opt和/srv看有没有自定义应用Aragog 的关键线索藏在 Web 目录的一个配置备份里。这个备份文件权限设置不当普通用户可读里面包含了另一个用户的凭据。这就是典型的配置疏忽导致的信息泄露。find /var/www -type f -name *.bak -o -name *.old -o -name *.save 2/dev/null这条命令专门找备份文件。2/dev/null是把权限不足的报错屏蔽掉让输出干净一些。找到备份文件后cat出来看内容往往会有意外收获。4.3 用户切换与权限提升的中间步骤拿到新凭据后用su或者ssh切换到新用户su - newuser切换成功后再次检查sudo -l和用户所属的组。Aragog 的设计是第一个用户能读到一个备份文件备份文件里有第二个用户的密码第二个用户属于一个特殊组或者有特定的 sudo 权限这个权限就是提权到 root 的关键。这种多级跳板的设计在真实环境里很常见。攻击者往往不是一步到位而是通过一次次的信息泄露和凭据复用逐步扩大权限。理解这个链路比记住某个具体命令重要得多。5. 提权到 root利用配置疏忽完成最后一步5.1 识别可疑的 sudo 配置假设切换到第二个用户后sudo -l显示类似这样的内容User newuser may run the following commands on aragog: (root) NOPASSWD: /usr/bin/somecommand这意味着你可以用 root 权限运行somecommand而且不需要密码。接下来的问题就是这个命令能不能被用来执行任意代码或者读取任意文件常见的可利用命令包括vim、less、find、awk、python、tar等。这些命令本身功能正常但如果以 root 权限运行就能通过它们的特性来提权。比如vim可以在里面执行 shell 命令find可以配合-exec参数执行命令。Aragog 这台机器上可用的命令是一个自定义脚本或者某个常见工具。如果是自定义脚本先cat出来看内容分析它做了什么、有没有调用其他程序、有没有路径劫持的可能。如果是常见工具直接查 GTFOBins 这个网站上面列出了所有可以被用来提权的常见命令及其利用方式。5.2 利用 sudo 权限获取 root shell假设sudo -l显示可以用 root 运行tar那么可以这样利用sudo tar -cf /dev/null /dev/null --checkpoint1 --checkpoint-actionexec/bin/bash这条命令的原理是tar在打包过程中会触发 checkpoint 动作--checkpoint-actionexec允许执行任意命令。因为tar是以 root 权限运行的所以执行的/bin/bash也是 root 权限。如果可用命令是findsudo find / -exec /bin/bash \; -quit-exec让find对每个匹配的文件执行指定命令-quit让它在执行一次后就退出。这样就能拿到 root shell。如果可用命令是pythonsudo python -c import os; os.system(/bin/bash)这些利用方式的共同点是它们都滥用了程序本身执行外部命令的功能。防御的方法也很简单——不要给普通用户配置这类命令的 sudo 权限如果确实需要要用精确的参数限制而不是给整个命令的完全权限。5.3 拿到 root 后的收尾工作拿到 root shell 后确认身份id whoami然后读取 root flagcat /root/root.txt到这里Aragog 的完整攻击链路就走通了。回顾整个过程从端口扫描发现 Web 服务到虚拟主机枚举找到开发站点到目录爆破拿到源码包到源码分析拿到数据库凭据到凭据复用 SSH 登录到文件系统排查找到第二个用户凭据最后利用 sudo 配置疏忽提权到 root。每一步都建立在前一步的信息之上没有跳跃也没有依赖运气。6. 复盘与经验沉淀这类靶机教会我的几件事6.1 信息收集的深度决定攻击链的长度Aragog 最值得复盘的地方是它对信息收集深度的要求。如果你只扫端口、只访问 IP、只跑一遍默认字典很可能在第一步就卡住了。虚拟主机枚举、目录爆破的扩展名选择、源码里的注释和备份文件这些细节决定了你能不能找到入口。我在练习的时候有个习惯每拿到一个新信息就问自己这个信息还能推出什么。比如拿到域名就想到虚拟主机拿到源码就想到配置文件和版本信息拿到一个用户凭据就想到凭据复用和横向移动。这种信息推演的能力比会多少工具都重要。6.2 凭据复用是真实环境里最危险的漏洞Aragog 的核心攻击链就是凭据复用数据库密码复用到系统账户一个用户的密码泄露导致另一个用户被攻陷。在真实环境里这种情况太常见了。很多人为了方便到处用同一个密码或者把密码写在配置文件里还不设权限。作为防御方这意味着密码要唯一、配置文件要限权、敏感信息要加密存储。作为攻击方这意味着拿到任何一组凭据后都要在所有可能的入口上试一遍。6.3 sudo 配置是提权的重灾区sudo -l应该是拿到 shell 后第一批执行的命令之一。Aragog 的提权完全依赖于 sudo 配置疏忽。防御 sudo 提权的原则很简单最小权限。不要给普通用户配置NOPASSWD不要给整个命令的完全权限如果必须给用精确的参数白名单限制。比如允许重启某个服务就只给systemctl restart servicename而不是给systemctl的全部权限。6.4 工具是死的思路是活的整个 Aragog 的攻克过程用到的工具无非是 nmap、gobuster、wget、ssh、sudo 这些最基础的东西。没有用到任何高级漏洞利用框架也没有复杂的脚本。真正起作用的是思路知道什么时候该扫什么、知道看到什么信息该往哪个方向想、知道每一步的目的是什么。我见过很多人工具用得很溜但拿到一台机器就不知道从哪下手。问题就出在思路没有建立起来。建议在练习靶机的时候不要急着看 walkthrough先自己卡一卡卡住了再去看别人是怎么想的。对比自己的思路和别人的思路差距在哪里这才是进步最快的方式。6.5 记录与复盘的习惯最后分享一个我坚持了很多年的习惯每做完一台靶机都写一份自己的 walkthrough。不用写得多正式但要包含几个要素攻击链路图、每一步的关键命令、卡住的地方和突破的思路、以及如果重来一次会怎么做。这份记录在下次遇到类似场景的时候就是最好的参考。Aragog 这台机器我做完之后在笔记里标注了两个关键点一是虚拟主机枚举不能跳过二是拿到源码后要优先看配置文件和备份文件。这两个点在后来的很多台机器上都用到了。渗透测试这个领域经验就是这样一点点积累起来的。
阅读完成 · 觉得有帮助?