带过不少朋友练靶机,第一台通常打得很兴奋,扫到端口、拿个webshell就觉得自己行了,结果到了第二台就开始卡壳。卡的原因往往不是漏洞难找,而是“不知道下一步该干什么”——该扫的地方扫了,该枚举的也枚举了,但入口就是不出来。如果你正处于这个状态,那这台靶机很适合你。这篇要聊的,是某公开靶机平台DC系列中的第二台。它的入口藏在一条容易被忽略的非标准路径里,中段还要面对一个受限Shell的越狱问题,最后一脚提权也得靠点“歪脑筋”。整条链路不算长,但每一步都值得展开讲透,尤其适合刚打完第一台、想系统练一下提权思路的读者。
说句实在话,这台靶机放到今天的眼光看,漏洞本身并不新,真正难的地方在于它逼着你建立“信息收集要闭环”的意识。下面我按自己复现时的完整流程来讲,端口、命令、踩坑点都会拆开说。
1. 这台靶机真正考验的东西:先搞清它想让你练什么
1.1 它和入门第一台的本质区别
很多人在第一台靶机上用的是“见洞就打”的路径——开着浏览器看页面,扫出个上传点就传马,拿到权限就收工。这种方式练的是工具熟练度,不是渗透思路。到了这台靶机,套路立刻变了:它没有给你一个明显的上传入口,也没有那种一打就穿的漏洞,所有入口都藏在“信息收集是否完整”这个前提下面。
我在复现的时候第一感受就是:它的攻击面其实很小,开放端口也就两个,一个Web一个SSH。可越是这样,越考验你有没有把每一个端口的作用、每一个页面里的提示、每一组凭据的适用范围都串起来。用大白话说,这台靶机考的不是“你会不会用exp”,而是“你会不会把一块块零散信息拼成一条完整的攻击链”。
1.2 打完它你应该带走的能力清单
如果只从“拿flag”的角度看,这台打完也就是走个过场。但我建议你按下面这几项来验收自己的学习效果,这才是它真正的价值所在:
- 端口服务识别:能不能从一堆扫描结果里注意到非标准端口,并判断它的真实服务类型。
- CMS侦查:面对WordPress站点,能不能用专用工具把用户、插件、可爆破点都枚举出来。
- 凭据复用思维:同一组账号密码,能不能从Web侧延伸到SSH侧,打破“Web登录只用来登录Web”的思维定式。
- 受限Shell越狱:遇到rbash这类限制环境,能不能想到利用编辑器等自带功能逃逸。
- 权限提升:能不能从
sudo -l的输出里发现可被利用的命令,并用合理的参数把它变成root Shell。
这五项对应着一条完整的渗透链路:信息收集→Web应用分析→弱口令尝试→横移→提权。每一环断了,后面都走不动,这也是为什么我说它适合用来“练思路”。
2. 信息收集阶段:先把攻击面彻底摊开再动手
2.1 为什么我直接上“全端口+默认脚本”套餐
面对靶机,很多人的习惯是直接扫个常见端口列表就完事,比如默认只扫1000个常用端口。这样做在第一台可能够用,但在这台会吃大亏,因为它的SSH服务并没有跑在标准端口上。我当时的做法很简单,先拿Nmap开一次全端口识别:
nmap -sV -sC -p- <目标IP>这里的参数我拆开解释一下:
-p-:扫描一到六万五千五百三十五号的全部端口,而不是默认的常用端口列表。这一个参数决定了你能不能发现那个非标准的SSH端口。-sV:对发现的开放端口做服务版本探测,判断端口后面跑的是什么服务。-sC:运行Nmap自带的默认脚本集,比如抓取服务 banner 信息、检查常见配置问题等。
结果出来以后,信息其实非常简洁:一个80端口HTTP服务,一个7744端口的未知服务。先用浏览器看80端口的Web,再用nc或Nmap对7744做一次针对性识别,就会确认它是SSH。这一步的价值在于:你提前知道了“这台机器有两个入口”,而且其中一个不在常规位置。很多人在这个阶段就栽了,要么没做全端口扫描,要么看到7744端口时想都不想就略过去。
2.2 80端口上的CMS指纹:一眼认出WordPress
进到80端口的站点后,首页看起来是个普通的博客/信息展示页面。我一般会做三件事来确认站点指纹:
- 看页面源码里的
generator标签,WordPress通常会在meta标签里留下版本线索。 - 访问
/wp-login.php和/wp-admin/,如果跳转到登录页,那基本可以断定是WordPress。 - 检查
/wp-content/目录能否访问,能访问就进一步坐实。
另外别忘了看一眼robots.txt,这台靶机上它就给了我一点提示,虽然提示不是直接指向漏洞的,但这种“官方留线索”的习惯在靶机里很常见,放过了就可惜了。确认是WordPress之后,就该切换到CMS级别的侦察工具了,这也是下一节的主角。
2.3 很容易被忽略的细节:响应头与页面注释
除了上面几个明显的指纹点,我还习惯看一眼HTTP响应头。有些站点会在响应头里泄露用了什么Web服务器、什么脚本语言,虽然这里没有直接给特别关键的信息,但这个习惯本身很值钱。另外,随手翻页面注释,经常能看到开发者留下的调试信息或隐藏链接。我在复现时翻到了页面里一句关于“flag”的提示,这种设计就是在引导你把注意点从“攻击”转向“线索收集”。这句话实质上是个路标:提醒你在当前站点内寻找有效账号信息,而不是急着找什么惊天动地的RCE漏洞。
3. 站点内部侦察:从用户枚举到一套可用的密码
3.1 用WPScan枚举用户:为什么这是WordPress渗透的第一步
确认站点是WordPress之后,手动去翻?author=1这类页面虽然也能猜用户名,但效率太低。我直接用工具来枚举:
wpscan --url http://<目标IP> --enumerate u--enumerate u的含义是枚举站点内的用户,WordPress的作者归档页和REST API接口往往会暴露用户名。工具跑完以后,会列出几个账号。普通用户至少要拿到其中一个有效用户名,因为后续的密码爆破和SSH尝试都依赖这个信息。
我当时枚举出来的账号里有管理员也有普通用户。这里有个实用经验:不要只盯着管理员账号看,普通用户账号往往密码更弱,而且在这台靶机的场景下,后续能不能进SSH,靠的就是某个普通用户账号。
3.2 密码从哪来:站内词采集加字典爆破的组合打法
拿到用户名后,下一步就是爆破密码。很多人上来就用常见密码字典直接扫,结果很容易被WPScan的爆破效率拖垮,或者压根不在字典里。更好的做法是先做一次“站内词采集”,用工具把网页里出现过的单词、人名、品牌词都收集起来生成一份专项字典:
cewl http://<目标IP> -w dict.txt这个命令会把页面里所有文字按单词拆出来去重,存成dict.txt。这样做的好处是,字典里的词都是这个站点自己“说过的话”,命中率通常比通用字典高一个量级。接着用WPScan拿这份字典去爆破:
wpscan --url http://<目标IP> --passwords dict.txt --usernames <枚举出的用户>这一步跑完,会有一个账号成功爆出密码。这类密码往往就是页面里某句话里某个单词加几个数字的变形,所以站内词采集非常对症。
3.3 一个常见误区:爆破不出来就放弃
不少人在这个环节会犯一个毛病:爆破跑了一轮没出结果,就以为这台靶机是“非爆破路径”的,转头去翻什么CVE插件漏洞。实际上,爆破不出密码时先检查几件事:
- 字典是不是太薄了?试着把通用弱密码字典也加进去再跑一遍。
- 用户名是不是选错了?换另一个枚举出来的账号试。
- 有没有被WPScan的API限速影响?加
--random-user-agent和--request-timeout参数,或者稍微调低请求频率。
这台靶机的密码设计就是“藏在你已经看过的页面里”,只要字典来源对了,出来只是时间问题。爆破成功之后不要急着高兴,你得意识到:这一组用户名密码,往后还有大用。
4. 关键转折:那组Web凭据远不止能登录后台
4.1 凭据复用思维:Web密码为什么能试SSH
拿到WordPress后台的账号密码之后,直觉反应是去/wp-admin/登录后台,看看能不能上传插件、改主题来拿Shell。如果你在这台靶机上这么做,会发现后台登录进去了,但在插件上传、主题编辑这些常规拿Shell路线上处处受限,绕来绕去也拿不到权限。
这时候要换个思路:同一组账号密码,在真实环境中经常被用在多个地方。比如员工用同一个密码登录公司门户和服务器,这在真实渗透里太常见了。既然这台靶机开放了7744端口的SSH,而我又恰好拿到了一组有效用户名密码,那我完全有理由去SSH端口试一次:
ssh -p 7744 <用户名>@<目标IP>这里注意指定端口,因为SSH不在默认的22端口上,不写-p的话连接会超时或拒绝。输入密码后,如果能登录成功,那就等于把Web侧的突破口横向扩展到了系统侧。这一步是整个靶机的第一个“啊哈”时刻,它就是专门用来训练你“凭据复用”意识的。
4.2 SSH登录后的第一眼:这Shell怎么这么奇怪
登录成功之后,我记得当时敲了几个常用命令,结果几乎全都报错,什么cd不能用了,什么ls找不到,整个Shell像被什么东西捆住了一样。这就是典型的受限Shell环境,通常是通过把用户的登录Shell设置成rbash(受限bash)来实现的。
受限Shell的特点是:你不能切换目录、不能设置环境变量、不能执行带路径的命令,只能在一个固定的工作目录里用少数几个内置或白名单命令。很多人到了这一步就懵了,觉得“我明明登录进来了,却被困在笼子里”。但别慌,这个设计本身就是一个训练点:受限Shell不是牢笼,只要找到能执行系统命令的“漏洞”,就能越狱。
4.3 判断环境:先确认自己到底在哪里
在动手越狱之前,我先做了两件简单的确认工作:
- 运行
echo $SHELL,看当前登录Shell是不是/bin/bash的受限模式。 - 运行
env或pwd,看看当前目录和环境变量是否正常,判断限制到底有多严。
这些确认动作看起来不起眼,但在真实环境里很重要,因为“看到什么”决定了“接下来的操作有没有可行性”。我确认完以后,基本可以断定:这层限制是Shell层面的,不是系统权限层面的,只要绕过Shell限制,后续的资源调用就正常了。
5. 从受限Shell到root:提权路径的完整展开
5.1 rbash越狱思路:为什么自带编辑器能当突破口
受限Shell限制的是命令执行,但它没法限制所有程序本身。要知道,像vi、less、vim这类交互式程序,设计上就有一种功能:让你在程序内部执行Shell命令。比如在vi里输入!,再输入要执行的命令,它就会把这条命令交给系统去跑。我当时的做法是:
vi 任意文件名进入vi后,输入:
:!/bin/sh这一下就跳出了受限Shell的限制,拿到一个不受约束的普通Shell。原理其实很简单:你执行的/bin/sh已经不是一个受限Shell了,而vi本身就是通过系统调用启动这个进程的,所以限制被绕了过去。
这里补一个经验:如果你用vi不熟练,或者目标环境里没有vi,那可以试试less或find。less同样支持!执行系统命令,find也有-exec参数。核心思路是一致的:找一个你能运行、同时又能帮你启动任意命令的程序。看到受限Shell,第一反应不该是“没辙了”,而是“我有哪些程序能运行”。
5.2 拿到普通Shell后的侦察:一个flag和sudo权限列表
越狱成功之后,我就开始正常地逛系统了。用户目录里能看到一个flag文件,内容里会提示你下一步方向,我记得大意是“从上一个flag里能找到提权线索”,再结合这台的提权路径,核心目标就指向了sudo。
在Linux提权侦察里,sudo -l是我必看的一条命令,它会列出当前用户能免密或带密码执行的sudo命令。执行完的结果里,我发现有一条命令非常显眼:当前用户可以用root权限执行git命令。这就相当于是系统直接把提权入口摆在了你面前,剩下的就是怎么利用它。
5.3 利用sudo git完成提权:一条被反复使用的“野路子”
Git能用来提权,是因为它内部会调用分页器(pager)来显示长内容,而分页器默认的less又允许在执行中启动Shell。只要让git打开一个帮助页面或日志页面,再趁分页器运行时输入!/bin/bash,就能以root身份弹出Shell。我当时执行的是:
sudo git help config等分页器打开后,输入:
!/bin/bash按下回车,一个root Shell就这么出来了。敲一下id确认身份,返回的uid=0说明已经拿到最高权限了。最后一站就是去root目录下拿最后那个flag,收工。
这条利用链很经典,建议你一定要亲手敲一遍。它背后的逻辑是:sudo授权给了一个“带子进程执行能力”的程序,而这个程序本身又允许执行任意命令,那sudo就相当于白给了。
5.4 提权后的收尾检查
拿到root之后,不要直接关终端,我习惯做三件事:
- 用
id确认当前uid是否为0,防止只是拿到了一个假root。 - 访问root家目录,确认最终flag存在并完整读取。
- 记录每一步执行的命令,方便复盘时对照。
这三件事看着简单,却能让你的渗透测试笔记更完整,对之后写报告或者向别人讲解都很有帮助。
6. 复盘与延伸:三个易卡点,以及防守视角的思考
6.1 卡点一:没做全端口扫描导致入口直接消失
这是这台靶机最常见的翻车点。如果你只扫了默认端口,7744这个SSH端口根本不会出现在结果里,后面Web侧的密码爆破做得再漂亮,也找不到一个合适的地方去复用那组凭据。用大白话说,攻击面你自己都没看全,后面的路径自然走不通。
给个建议:凡是练靶机,nmap命令里一定要包含-p-,这台靶机的难点早就在扫描阶段埋好了。
6.2 卡点二:登录到受限Shell后没意识到编辑器能绕过
第二个高频卡点就是rbash越狱。很多人一看到受限Shell就以为要做系统层面的漏洞利用,完全忘了vi、less这些程序自带的Shell执行功能。实际上,只要目标环境里存在交互式编辑器,越狱思路就可以立刻铺开。
这里再给个兜底方案:如果vi和less都不好用,可以用nmap的--interactive模式,或者awk、find的某些参数来执行命令。道理都是同一个,多积累几个“能在程序内拉Shell”的技能,遇到受限环境就不慌。
6.3 站在防守方看:这几个配置对应的真实风险
打靶的最终目的是为了防守。这台靶机里的几个漏洞,在真实环境中都是可以举一反三的:
- 非标准SSH端口:改了端口不等于安全,攻击者做全端口扫描照样会发现,安全的核心永远不是“藏起来”。
- 凭据复用:Web密码和SSH密码一样,这是真实企业内网里最容易被打穿的点。防守方能做的是开启多因素认证,或者至少让不同系统使用不同密码。
- sudo授权过细:给
git这类能执行任意命令的程序开sudo权限,等于把root权限送到攻击者嘴边。防守方应该遵循最小权限原则,定期审计sudo -l的输出。 - WordPress相关组件长期不升级:这类CMS是最容易被打点的地方,保持版本更新、移除无用用户、禁用XML-RPC这类风险接口都是基本动作。
打完这台靶机之后,我自己最大的感觉是:真正的难点从来不是某个漏洞的利用方法,而是你能不能把整个信息收集和利用过程串成一条线。这台靶机每个环节单看都不难,但组合在一起就特别考验耐心和思维缜密度。
如果你正好练完第一台,我建议先别急着看别人的完整攻略,给自己两小时,从全端口扫描开始重新走一遍。卡住了再回头看我上面写的这些排查思路。等你能不看笔记把整条链路走通了,回过头再看其他同类靶机,会发现它们其实都长得很像。