尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

DC-2靶机渗透实战:从WordPress弱口令到rbash绕过提权

发布时间:2026/9/24 22:33:57

资讯中心
01
ARTICLE

DC-2靶机渗透实战:从WordPress弱口令到rbash绕过提权

DC-2靶机渗透实战:从WordPress弱口令到rbash绕过提权
VulnHub 上的 DC 系列我一直建议刚接触靶机的人按顺序打。DC-1 教会你基础的信息收集和 Drupal 漏洞利用DC-2 则直接把难度往上拉了一档它需要你从 WordPress 后台弱口令一路摸到 SSH再从受限 Shell 绕过拿到最终 root。这篇文章是我最近重打 DC-2 的完整记录从环境准备写到拿到 final flag每一步都尽量讲清楚为什么这么做而不是直接甩命令。适合有一定 Linux 命令基础、想从“会用工具”过渡到“会串流程”的渗透测试新手老手也可以直接跳到第 4 章的提权部分核对细节。1. 项目概述与实验环境准备1.1 DC-2 到底难在哪DC-2 是设计师 DCAU 继 DC-1 之后出的第二台靶机整体风格延续了 DC 系列“模拟真实站点 组合漏洞链路”的思路。它故意搭建了一套有弱密码、配置不当的 WordPress 站点并通过自定义端口、受限 Shell、sudo 授权错误等方式把整条攻击链拉长。这台靶机真正难的地方不是某个单点漏洞特别刁钻而是你需要把一条链完整走通先做信息收集找到 Web 入口再用站点内容生成字典打 WordPress 后台拿到账号后还要学会从一个被高度限制的 Shell 里脱身最后通过一个配置不当的 sudo 权限提权。每一步拆开看都是基础操作串起来却非常考验思路。新手往往在拿到第一个 flag 之后就不知道下一步该干嘛这就是“只知道工具不知道方法”的典型表现。1.2 搭建靶机先让环境跑起来我这次用的是 VMware Workstation Kali Linux靶机直接导入官方 OVA 文件。导入后第一件事不是去浏览器访问而是确认网络拓扑。靶机默认网卡是 NAT 模式Kali 也用 NAT这样两台机器能互通同时和外部网络隔离开避免测试流量打到真实设备上。设好网络之后登录 Kali 查一下自己的 IP 和网段ip a ip route从这里能看到 Kali 当前的网段比如192.168.56.0/24或192.168.1.0/24。然后用netdiscover或arp-scan扫一下这个网段找到靶机 IPnetdiscover -r 192.168.56.0/24这里有个小技巧如果扫描结果里出现很多设备先通过 MAC 厂商做初步筛选。VMware 虚拟网卡的厂商名通常是VMware, Inc.或Pcs SystemtechnikKali 自己的虚拟网卡是另一张靶机一般就是除了 Kali 之外新冒出来的那台主机。拿到 IP 后先ping一下确认连通。如果 ping 不通优先检查网卡模式是不是 Host-only 或者没分配 IP不要急着怪靶场有问题很多时候只是虚拟网卡兼容性。VirtualBox 里如果靶机一直拿不到 IP可以把网卡型号改成Intel PRO/1000 MT Desktop再重启VMware 一般没有这个问题。2. 信息收集从端口到站点的完整枚举2.1 主机发现与端口扫描拿到靶机 IP 之后我习惯先做一次全端口扫描而不是只扫 80、443、22 这些常见端口。DC-2 就把 SSH 服务放到了 7744 端口如果只扫默认端口列表很容易错过这扇真正的大门。命令用的很朴素nmap -sS -sV -p- -T4 靶机IP简单解释一下参数-sS是 SYN 半开扫描速度快目标主机上留下的连接记录也少-sV探测服务版本后面判断漏洞要用-p-扫 1 到 65535 全部 TCP 端口-T4是时间模板加快扫描节奏。扫描结果很清晰80/tcp是 HTTP7744/tcp是 OpenSSH。看到这两个端口基本可以确定这是一台 WordPress 加 SSH 的靶机后期有两个入口可以打。这里顺带说一句很多管理员喜欢把 SSH 改到高位端口来“隐藏”服务但全端口扫描一开这种隐藏约等于没有。改成非默认端口的主要价值是减少被批量扫描命中的概率而不是作为安全机制。这个思路在真实渗透里也有用永远不要假设没有暴露的服务就不存在。2.2 找 Flag1从 HTTP 服务开始浏览器访问http://靶机IP看到的是一套 WordPress 站点。页面上是一篇文章大体是欢迎语和 DC-2 的介绍。CTF 靶机通常会在首页源码里放点东西所以我第一步先右键查看页面源代码或者直接curl抓下来过滤关键词curl -s http://靶机IP/ | grep -i flag果然在 HTML 注释里看到了 flag1。很多新手会忽略注释认为它不是“功能代码”但恰恰是这种不起眼的位置最适合放提示信息。拿到 flag1 之后我并没有急着高兴而是继续做站点识别。用whatweb或者curl -I看一眼响应头curl -I http://靶机IP/响应头里的Set-Cookie字段带有wordpress_前缀基本确定是 WordPress。WordPress 这类 CMS 的信息收集重点比较固定版本、主题、插件、用户、文章和可能的备份文件。其中用户枚举是后面的突破口所以我会优先做这一步。2.3 WordPress 用户枚举与 cewl 字典生成WordPress 用户枚举有两种常见姿势一种是通过作者归档页面逐个试/?author1、/?author2另一种是用 wpscan 一把梭。这次我直接用 wpscanwpscan --url http://靶机IP --enumerate u执行完可以看到站点版本信息和用户名列表。本次识别的用户有三个admin、jerry、tom。有了用户名接下来就需要密码。暴力破解不是拿网络上的大字典硬怼那样既慢又可能被锁定。更好的办法是先分析目标站点自身用 cewl 从站点内容里提取单词生成一个小而精准的字典cewl http://靶机IP -m 6 -w dc2_pass.txt wc -l dc2_pass.txt-m 6表示只保留 6 个字符以上的单词因为短单词作为口令的概率低而且会让爆破请求数量膨胀。cewl 的思维是很多人喜欢用身边出现过的词当密码而靶机站点里的文章、标签、评论就是最好的词库。它生成的字典一般只有几百到几千行配合用户列表去做登录爆破效率远高于几百万行的大字典。如果爆破结果不理想可以把-m降到 4把短词也加进去或者用cewl --email额外收集邮箱这些都算词库调整的技巧。3. 漏洞利用从 WordPress 登录到 SSH 入口3.1 爆破 WordPress 后台用户列表和字典都有了下一步就是爆破 WordPress 后台。wpscan 自带密码爆破模块使用起来最省心wpscan --url http://靶机IP -U jerry,tom -P dc2_pass.txt --password-attack wp-login-U指定用户名-P指定密码字典--password-attack指定攻击方式。这里我没有把admin放进去因为后台登录页通常有防爆破机制而且admin往往被重点保护先从普通用户下手更符合实际攻击思路。实际跑的过程中jerry和tom的密码都命中了字典是两个看起来很普通的英文单词。为什么说这是 DC-2 最精彩的设计因为用户密码不是随机字符串而是来自站点自身的词用 cewl 构造字典正好对症。如果需要用 hydra 手动打一遍也可以参考这个模板hydra -L users.txt -P dc2_pass.txt 靶机IP http-post-form \ /wp-login.php:log^USER^pwd^PASS^wp-submitLogIntestcookie1:SLocation -f不过手写 hydra 参数有个坑WordPress 登录表单有很多隐藏字段SLocation是用来判断成功标志的如果目标响应里没有Location跳转匹配条件就要换成页面中的dashboard之类的关键词。没有把握时先用 wpscan它内部处理 cookie 和跳转逻辑更成熟能把误判率降到最低。3.2 WordPress 后台与 Flag2拿到jerry的账号后我的目标很明确进入wp-admin后台。登录 URL 是http://靶机IP/wp-login.php输入jerry和密码成功进入 WordPress 控制台。后台信息量很大但 CTF 靶机的 flag 一般不会藏在某个很深的插件设置里多半在文章、页面或者媒体库。我依次看了“文章”和“页面”最终在页面列表里看到了一个名为 Flag 2 的页面内容就是 flag2。对比一下整个过程登录后台本身没有利用任何漏洞靠的就是弱口令。这里带着一个真实经验很多 WordPress 站点后台登录后能拿到的不只是内容编辑权限还可能有主题编辑器、插件上传、用户管理等功能这些都可能变成 getshell 的入口。DC-2 没有在这个环节继续加深而是把线索往 SSH 方向引所以我拿到 flag2 之后注意力立刻转回到了之前 nmap 扫出来的 7744 端口。3.3 利用密码复用登录 SSH在 WordPress 后台拿到的口令我习惯性会去尝试登录其他服务。这不是碰运气而是真实内网中密码复用比例高得惊人业务系统用一套口令服务器登录又是同一套口令常常能一路打通。于是我用tom的密码去试 SSHssh tom靶机IP -p 7744提示输入密码时把tom在 WordPress 的密码填进去成功登录。tom在系统里有一个真实用户家目录这说明 WordPress 站点用户和 Linux 系统用户是有关联的这类设计在 DC 系列里很常见其实也是在还原很多公司“同一个账号接所有系统”的陋习。登录后我第一件事就是看当前目录和用户身份结果发现问题没那么简单命令提示符是-rbash$很多常用命令都无法执行。到这里真正的“超详细”部分才刚开始。4. 受限 Shell 绕过与提权4.1 rbash 绕过先搞清楚限制了什么rbash是 Restricted Bash看起来像是一个“安全 shell”实际上它在设计上就不是强隔离工具。rbash 的常见限制包括不能cd到其他目录、不能修改PATH、不能执行包含/的命令、不能导入函数等。但限制的基础是指定命令集合并没有阻挡所有能发起外部命令的程序。我在tom用户下ls了一下发现家目录里可用的命令有vi、less、ls、cat等。vi就是突破口。具体绕过步骤是这样的先输入vi打开编辑器然后在命令模式按Esc确保在普通模式下输入:set shell/bin/bash :shell或者更直接:!/bin/bashvi的!命令用来执行外部程序它会调用变量shell指定的解释器。rbash 的限制范围是登录 shell 的 PATH 和命令解析但它管不住 vi 启动子进程。当!/bin/bash执行时就等于从受限环境里弹出了一个完整交互式 bash。这个原理和 Web 后门里常见的“命令注入后通过编辑器逃逸”如出一辙。进入完整 shell 后我补了一句export PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin这样目录切换、命令补全都恢复正常。4.2 在 tom 家目录找到 Flag3绕过 rbash 之后我实际就在tom用户的家目录里。用ls -la看了一眼发现flag3.txt存在于当前位置。cat出来内容除了 flag3 之外还有一句提示大意是“真正的大鱼还不在你这里”。这句话基本就是告诉我需要提权。我先确认当前身份和权限id sudo -lid显示当前用户是tom不是 root但sudo -l的结果让我眼前一亮User tom may run the following commands on DC-2: (root) NOPASSWD: /usr/bin/git这意味着tom可以不用密码就以 root 身份运行git命令。git受 sudo 管控很多人第一反应是“git 能干什么”如果你看过 GTFOBins 就会知道git 可以利用其内置的 pager 逃逸到 shell。4.3 使用 sudo git 的 pager 逃逸拿到 root执行提权命令前我先解释一下原理。git help系列命令会打开一个基于less的帮助页这个帮助页支持!command执行外部命令。由于整个git进程是以 root 权限启动的pager 里执行命令时同样以 root 身份运行。我输入sudo git -p help config-p强制使用分页器打开。帮助页出现后在末尾输入!/bin/bash回车系统会提示确认执行再回车就回到了一个 root shell。这里每次用sudo git -p help都要按两下回车略显繁琐但非常可靠。验证身份id cat /root/final-flag.txt果然在/root下看到了最终 flag。至此从 WordPress 前台到 root 的完整链路结束。整个过程其实没有任何特殊漏洞全是弱密码、配置不当和利用技巧的组合这也正是 DC-2 想训练的目标。5. 常见问题与排查技巧5.1 靶机 IP 始终找不到这是我最常被问的一个问题。首先要确认 Kali 和靶机在同一虚拟网络里最简单的方法是ip a看 Kali 的网段再netdiscover -r 网段扫描。如果扫不到靶机优先检查靶机网卡是否处于启用状态以及虚拟机网络模式是否 NAT。VMware 下还有个经典坑OVA 导入后可能自动勾选了“连接到其他网络”需要手动改回 NAT。VirtualBox 则可以在设置里把网卡类型从默认的82540EM换成Intel PRO/1000 MT Desktop改完重启虚拟机再看 DHCP 分配。5.2 wpscan 枚举或爆破无结果wpscan 跑不动的原因多半不是工具问题而是网络和目标环境。先确认curl -I http://目标IP能正常返回如果页面本身 502wpscan 自然拿不到结果。用户枚举失败时可以手动访问/?author1、/?author2观察响应里的作者链接。爆破失败则先看生成的字典如果 cewl 只抓到几十个词建议降低-m阈值或换用--email如果请求数量太多导致被限速--password-attack xmlrpc可能更不容易被拦截因为 WordPress 的 xmlrpc 接口可以通过批量调用减少握手次数。必要时还得依靠 hydra 的详细错误输出。5.3 SSH 端口登录不上怎么办最容易犯的错是直接用默认 22 端口连。DC-2 的 SSH 在 7744必须加-p 7744。如果连接被拒绝先用 nmap 确认端口状态如果显示 SSH 版本且有服务再考虑账号密码问题。登录后如果发现命令全部报错别以为系统坏了看看提示符是不是-rbash$。有些新手会尝试用python -c import pty;pty.spawn(/bin/bash)来重置 shell但 rbash 下python通常不在可用 PATH 里这条路基本走不通。老老实实用 vi 逃逸最可靠。vi方法的另外一个好处是它不依赖网络也不会触发对目标进程的额外写入适合大多数类似环境。5.4 提权时 GTFOBins 命令记不住怎么办比起死记sudo git -p help config更重要的是理解 pager 逃逸的通用套路。很多程序都有“打开帮助页”、“进入交互模式”、“执行外部命令”的能力比如less、more、man、vi、git。当它们被 sudo 授权后只要运行终端支持!command就能变成 root shell。遇到新的 sudo 授权程序可以先查 GTFOBins 确认它支持哪些逃逸功能。实在记不住 git 那条命令也可以用备选sudo git -c core.pagerbash config这个参数直接告诉 git 使用bash作为分页器执行后同样得到一个 shell适合对-p分页方式不熟悉的场景。现象可能原因处理思路靶机 IP 扫不到网卡模式不对或未获取 IP检查 NAT 模式重启 VMVirtualBox 可换网卡型号wpscan 用户枚举为空网络不通或站点不可达先用 curl 验证 HTTP 响应再手动访问作者页爆破不出密码字典太小降低 cewl 的-m阈值或换用 xmlrpc 方式SSH 连接被拒使用了默认 22 端口加-p 7744重新确认端口状态登录后命令全报错登录到了 rbash用 vi 的:!/bin/bash逃逸不要硬试 python写到这DC-2 的完整复现就结束了。我个人重打这台靶机最深的体会是它的每条线索都在教你“不要机械执行命令”。拿到 80 和 7744 两个端口时如果没有想到去枚举 WordPress 用户后面的路程会痛苦很多拿到 WordPress 后台账号后如果不顺手尝试 SSH 密码复用又会在 rbash 门口卡住。建议你也别急着翻别人的 writeup先自己从nmap开始一步步做卡住的时候再回来看这篇对照。每台靶机的 flag 内容不是重点真正值得留下来的是这套“信息收集—定向字典—登录爆破—受限 Shell 绕过—sudo 提权”的方法论。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。