这类靶机实战复盘最值得先看的不是它有多少个漏洞而是整个攻击路径里哪些环节是新手最容易卡住、哪些思路转换是OSCP这类考试里真正会考的。HTB-Eighteen这台靶机名字里带“OSCP”意味着它比基础OSCP靶机更贴近实际渗透测试的复杂度核心考点在于立足点的获取以及如何将看似零散的信息Web攻击、哈希处理、数据库交互、枚举串联成一条完整的攻击链。很多人一看到“Web攻击”、“哈希爆破”这些词会直接去搜现成Payload或工具命令但往往在靶机上跑不通。问题通常不在工具本身而在于对当前场景的理解和转换。比如Web攻击拿到的可能不是Shell而是一段需要转换的哈希数据库交互查到的可能不是明文密码而是需要进一步利用的RID。这篇文章我会按我实际打靶时的排查顺序拆解从外网探测到最终拿到立足点的完整过程重点讲清楚每个环节“为什么这么做”以及“卡住了该往哪看”。1. 靶机环境与核心攻击路径预览在动手之前先明确两个关键点目标状态和攻击主线。HTB-Eighteen是一台线上靶机你需要有自己的HTB VIP权限才能访问。它的IP地址是动态分配的每次启动不同。这不是一个本地虚拟机所以所有操作都基于网络。它的核心攻击路径可以概括为Web入口点通过一个Web应用漏洞获取初步的数据或权限。哈希的获取与转换从Web漏洞中获得的数据很可能不是直接可用的密码而是某种哈希Hash。这里需要识别哈希类型并进行转换或破解。凭证喷洒与横向移动利用得到的凭证可能是转换后的尝试登录其他服务如SSH、SMB、数据库等。数据库交互与信息提取通过某个服务如Web后台或数据库端口与数据库交互提取更敏感的信息如用户哈希或RID。RID枚举与权限提升利用提取到的信息如RID结合系统特性枚举用户或资源最终找到提权至立足点如www-data到user或user到root的方法。这条路径里哈希转换和RID枚举是容易让人困惑的环节。很多人知道要“爆破哈希”但卡在“这是什么哈希”或者“爆破出来了然后呢”。接下来我们就顺着这条线一步步拆。2. 信息收集不止是端口扫描信息收集不是简单地跑个nmap -sV -sC就完了。对于OSCP级别的靶机你需要更仔细地观察结果并主动进行下一步探测。2.1 初始端口扫描与Web应用发现首先进行全端口扫描这是标准动作nmap -sS -p- --min-rate 10000 -oN nmap_allports 10.10.10.xxx扫描结果通常会显示几个关键端口比如80HTTP、22SSH、3306MySQL等。记下所有开放端口。接下来对开放的服务进行更详细的版本和脚本扫描nmap -sV -sC -p 80,22,3306,... -oN nmap_detail 10.10.10.xxx这里要特别注意-sC默认脚本输出的信息。对于Web端口80/443一定要同时用浏览器访问并用gobuster或ffuf进行目录爆破gobuster dir -u http://10.10.10.xxx -w /usr/share/wordlists/dirb/common.txt -o gobuster_common.log在HTB-Eighteen上你很可能通过目录爆破发现一个不那么显眼的Web路径比如/admin、/dev或一个特定的应用入口点。关键点不要只满足于找到登录框要查看页面源码、JS文件、抓包分析请求寻找注释、隐藏参数或API端点。2.2 服务枚举与漏洞初步筛查对于其他服务如SSH和MySQL也要进行针对性信息收集SSH观察nmap -sC输出的banner信息看是否有版本漏洞提示。但通常HTB的SSH端口本身不是直接突破口。MySQL尝试空密码或弱密码root/root, root:password进行连接测试虽然成功率低但必须作为步骤记录。更重要的可能是通过Web漏洞获得的凭证来连接MySQL。信息收集阶段的目标是绘制一张“服务地图”并标记出最可能薄弱的入口——通常是那个自定义的、功能复杂的Web应用。3. Web攻击获取初始数据往往是哈希假设我们通过枚举发现了一个有漏洞的Web端点。这个漏洞类型可能是SQL注入在登录框、搜索框或ID参数处。文件包含通过参数读取系统文件。反序列化在Cookie或POST数据中。简单的认证绕过通过修改Cookie、请求头或参数直接进入后台。在HTB-Eighteen的上下文中这个Web攻击的输出往往不是Shell。你可能会得到数据库中的数据用户表、密码哈希。服务器的文件内容如配置文件其中包含数据库连接密码。一个可以执行命令的有限接口但被严格过滤。实战技巧使用sqlmap进行自动化注入测试时不要一上来就用--os-shell。应该按顺序# 1. 确认注入点 sqlmap -u http://target/page?id1 --batch # 2. 获取数据库名 sqlmap -u http://target/page?id1 --batch --dbs # 3. 获取当前数据库的表 sqlmap -u http://target/page?id1 --batch -D database_name --tables # 4. 获取关键表如users的列 sqlmap -u http://target/page?id1 --batch -D database_name -T users --columns # 5. 转储数据 sqlmap -u http://target/page?id1 --batch -D database_name -T users -C username,password --dump如果sqlmap被WAF拦截或效果不佳要尝试手动注入使用联合查询UNION来直接读取数据。从Web漏洞中你最终拿到手的很可能是一组用户名:哈希格式的数据。例如admin:5f4dcc3b5aa765d61d8327deb882cf99 guest:098f6bcd4621d373cade4e832627b4f6这个5f4dcc...就是著名的MD5哈希“password”。但靶机不会这么简单它可能会用其他哈希类型或者哈希本身是另一种格式。4. 哈希处理识别、转换与爆破这是第一个关键转折点。你拿到了一串字符它真的是密码吗大概率不是它是密码的哈希。4.1 哈希识别第一步是识别哈希类型。使用hash-identifierKali自带或在线工具注意靶机环境通常禁止联网最好用本地工具hash-identifier然后输入你得到的哈希值。常见的哈希类型有MD5、SHA1、SHA256、NTLM、bcrypt等。hash-identifier会给出可能的类型。但更可靠的方法是结合上下文判断如果是从MySQL数据库的users表password列中提取的可能是MD5或SHA1。如果哈希长度是32位十六进制如5f4dcc3b5aa765d61d8327deb882cf99很可能是MD5。如果长度是40位如a94a8fe5ccb19ba61c4c0873d391e987982fbbd3很可能是SHA1。如果包含$符号如$2y$10$...可能是bcrypt。在HTB-Eighteen中你可能会遇到一种情况哈希看起来像MD5但直接拿去破解如用rockyou.txt失败。这时就要考虑哈希转换。4.2 哈希转换与爆破“哈希转换”是什么意思有时应用程序会对密码进行多次哈希或加盐哈希。例如它可能存储的是md5(md5(password))或md5(password salt)。你从数据库里拿到的是最终结果。如果直接破解失败你需要尝试识别模式观察多个用户的哈希看是否有固定部分可能是盐值。尝试常见转换用hashcat或john的规则进行转换后爆破。例如假设你怀疑是md5(md5($p))你可以用hashcat的规则来模拟这种转换或者写一个简单的Python脚本生成候选哈希进行比对。import hashlib password_candidate password123 first_hash hashlib.md5(password_candidate.encode()).hexdigest() final_hash hashlib.md5(first_hash.encode()).hexdigest() print(final_hash) # 与你得到的哈希比对使用更强大的字典和规则不要只依赖rockyou.txt。可以尝试hashcat自带的best64.rule、d3ad0ne.rule等组合字典进行智能变形爆破。hashcat -m 0 -a 0 target_hashes.txt /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule关键点在靶机环境中时间可能有限。如果在线破解如用在线彩虹表网站被禁止且本地破解耗时太长就要思考这个哈希是否必须被破解有没有可能直接用它进行下一步比如哈希传递攻击在HTB-Eighteen的场景里你很可能需要破解至少一个哈希以获得一组可用的明文凭证。5. 凭证喷洒与横向移动假设你成功破解了一个哈希得到了admin:supersecret这样的明文密码。接下来就是尝试用这组凭证去访问其他服务。5.1 凭证喷洒凭证喷洒Credential Spraying是指使用少数几组密码通常是你破解得到的去尝试登录大量的用户名。但在靶机中更常见的是用得到的一组或几组用户名:密码去尝试登录所有发现的服务。SSHssh admin10.10.10.xxx输入密码。MySQLmysql -u admin -p -h 10.10.10.xxx输入密码。其他Web后台用hydra或medusa进行自动化爆破但要注意不要触发账户锁定。hydra -l admin -p supersecret 10.10.10.xxx http-post-form /login:username^USER^password^PASS^:FInvalid重要原则先手动尝试再用工具。手动尝试可以更清楚地看到错误信息判断是密码错误、用户不存在还是服务不可用。5.2 数据库交互在HTB-Eighteen中数据库交互是一个重要环节。你可能通过Web漏洞拿到了数据库密码或者用破解的凭证直接登录了MySQL。登录MySQL后不要只盯着之前Web注入时看到的users表。要做全面的信息收集-- 查看所有数据库 SHOW DATABASES; -- 切换到可能包含敏感信息的数据库 USE another_database; -- 查看所有表 SHOW TABLES; -- 查看表结构 DESCRIBE sensitive_table; -- 提取数据 SELECT * FROM sensitive_table;你要寻找什么更多的用户凭证可能是其他格式的哈希。应用程序配置信息可能包含路径、密钥。特别是与系统用户相关的信息。有时数据库里会存储系统用户名、用户IDUID或Windows环境下的RIDRelative Identifier。这就是通向下一步的钥匙。6. RID枚举与立足点获取这是第二个关键转折点也是“OSCP”难度的一个体现。RID相对标识符是Windows安全标识符SID的最后一部分用于唯一标识域或本地计算机中的用户、组。在Linux靶机中类似的概念是UID用户ID。但题目中提到了“RID枚举”这可能暗示靶机有Samba服务SMB或需要与Windows风格的权限系统交互。6.1 理解RID枚举场景在什么情况下我们需要枚举RID你通过数据库或文件泄露拿到了一个用户名但没有密码。或者你发现目标系统可能是通过SMB允许空会话或某种未授权访问可以枚举用户列表。你知道一个用户的RID比如管理员通常是500想通过暴力枚举其他RID来发现隐藏用户。在Linux靶机中更常见的提权路径是利用数据库中的信息来提升到另一个系统用户。例如你以www-data权限获得了数据库访问权并从数据库中找到了另一个用户比如john的密码哈希或明文密码。然后用这个密码通过SSH登录为john你就从Web服务权限提升到了普通用户权限这就是“立足点”。6.2 利用数据库信息进行用户枚举和登录假设从数据库中提取到如下信息username: john uid: 1001 homedir: /home/john或者你提取到了一个看起来像$6$...的哈希这是Linux的SHA512 crypt哈希。你可以用这个哈希尝试破解或者如果条件允许比如你发现了/etc/shadow的读取漏洞可以直接将哈希与用户名一起添加到本地尝试切换用户。更常见的操作是你用得到的明文密码john:s3cretpass直接尝试SSH登录ssh john10.10.10.xxx如果成功恭喜你你获得了第一个立足点user shell。立即运行id和sudo -l命令查看当前用户的权限为下一步提权到root做准备。6.3 真正的RID枚举SMB场景如果靶机确实开放了SMB端口445并且允许空会话或使用你获得的凭证访问那么可以使用enum4linux或smbclient进行RID枚举enum4linux -R 0-5000 10.10.10.xxx或者使用impacket工具包中的lookupsid.pypython3 /usr/share/doc/python3-impacket/examples/lookupsid.py anonymous10.10.10.xxx这会列出所有通过SID枚举发现的用户和组。你可以从中发现一些低权限或服务账户然后结合之前获得的密码进行喷洒可能获得新的访问权限。在HTB-Eighteen的典型路径中更可能的情况是Web漏洞 - 数据库凭证 - 数据库信息提取 - 获得另一个系统用户的凭证 - SSH登录获得立足点。RID枚举可能作为数据库信息提取的一部分例如数据库中存储了用户的RID或通过其他服务如SMB辅助进行。7. 从立足点到最终提权拿到user权限的shell后工作只完成了一半。最终目标是root。这时要进行标准的Linux本地提权信息收集# 检查sudo权限 sudo -l # 查看SUID文件 find / -perm -4000 -type f 2/dev/null # 查看可写文件 find / -writable 2/dev/null | grep -v proc | grep -v sys # 查看计划任务 crontab -l ls -la /etc/cron* # 查看进程和服务 ps aux systemctl list-units --typeservice # 查看环境变量 env # 查看内核版本 uname -a根据收集到的信息寻找可利用的漏洞或配置错误。例如如果sudo -l显示可以以root身份运行某个程序如/usr/bin/vi则可以尝试提权。如果找到具有SUID位的非常见二进制文件可以搜索已知漏洞使用searchsploit。检查计划任务中是否有以root身份运行的可写脚本。在HTB-Eighteen的语境下提权环节可能涉及对之前获得信息的深度利用。例如在数据库里可能还存有root密码的哈希或提示或者某个从Web端获取的配置文件里包含了提权所需的密钥。8. 复盘与核心要点打穿HTB-Eighteen这类靶机关键在于理解攻击链的流动性。信息不是孤立的上一个阶段的输出是下一个阶段的输入。最容易卡住的地方通常有三个哈希处理环节看到一长串字符就以为是密码没想到是哈希或者识别错了哈希类型导致爆破失败。应对养成拿到字符串先hash-identifier的习惯并结合来源数据库列名、上下文综合判断。破解失败时考虑哈希是否被转换如双重哈希、加盐。数据库信息利用环节登录数据库后只重复提取已知的users表没有进行全面的数据库和表枚举错过了关键信息。应对登录任何数据库服务都要系统性地SHOW DATABASES;、USE db;、SHOW TABLES;、DESCRIBE table;寻找任何与“user”、“config”、“setting”、“system”相关的表。权限提升思路固化拿到user shell后只运行自动化脚本如LinEnum没有结合靶机特有的信息如之前数据库里发现的路径、配置、密码。应对把前期收集的所有信息文件路径、配置片段、密码、用户名重新梳理一遍思考它们是否可能在提权阶段被用到。例如数据库里发现的某个文件路径可能对应一个可写的root计划任务脚本。最后对于OSCP备考者这台靶机的价值在于它模拟了真实渗透测试中常见的“迂回”场景你很少能直接拿到Shell更多的是拿到数据然后需要转换、破解、喷洒、再利用。把这条攻击链的每个环节都练熟遇到新靶机时你的思路才会清晰。