☰
DC-2靶机渗透实战:从WordPress枚举到rbash越狱与sudo提权
2026/10/17 8:13:33 网站建设 项目流程

带过不少朋友练靶机,第一台通常打得很兴奋,扫到端口、拿个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这类风险接口都是基本动作。

打完这台靶机之后,我自己最大的感觉是:真正的难点从来不是某个漏洞的利用方法,而是你能不能把整个信息收集和利用过程串成一条线。这台靶机每个环节单看都不难,但组合在一起就特别考验耐心和思维缜密度。

如果你正好练完第一台,我建议先别急着看别人的完整攻略,给自己两小时,从全端口扫描开始重新走一遍。卡住了再回头看我上面写的这些排查思路。等你能不看笔记把整条链路走通了,回过头再看其他同类靶机,会发现它们其实都长得很像。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询