ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从WordPress到root:DC-6靶机实战中的定制字典与sudo提权

从WordPress到root:DC-6靶机实战中的定制字典与sudo提权 VulnHub 上的 DC 系列我基本是当成每周一练来刷的。前面几台各有侧重到了 DC-6官方把难度标成中等打开一看其实考点非常聚焦一个标准的 WordPress 站点、一段不算复杂的口令爆破、一个利用起来五秒钟就能完成的 sudo 提权。整台靶机打下来路径清晰得像教科书但它恰恰把“密码字典怎么造”这件事讲透了——这也是很多人在实战里最欠缺的一环。如果你正在准备 OSCP、红队入门或者想在合法靶场里练手DC-6 是性价比极高的一台。它不考花里胡哨的 0day考的全是“有没有耐心收集信息、会不会针对目标定制字典、拿到用户 shell 之后有没有 sudo 敏感度”。下面我把完整打靶过程、参数选择背后的逻辑、以及我踩过的几个小坑都写出来你照着走一遍基本就能通。1. 开局三件套导入靶机、域名解析、端口扫描1.1 下载导入与网络模式选择DC-6 依然走 VulnHub 的 ova 分发方式去 DC-6 的详情页下载镜像文件就行。拿到 ova 之后VMware 和 VirtualBox 都能导我个人习惯用 VMware Workstation兼容性好、快照方便。导入过程没什么悬念直接“打开虚拟机”选中 ova 文件它会自己建好配置。网络这块我建议直接用 NAT 模式别用桥接。原因很简单NAT 下 Kali 和靶机在一个虚拟子网里Kali 访问靶机 IP 就是直连干净利落桥接反而可能跟物理局域网里的其他设备抢 IP 段而且如果公司或家里路由器有 DHCP 限制靶机可能拿不到地址纯给自己添堵。DC 系列的靶机一般开机后用 DHCP 自动获取 IP你不需要登进去配置。开机后屏幕上会显示一个登录提示正常情况下我们不去动它直接回 Kali 开始扫描。1.2 为什么必须先改 hosts 文件这一步是 DC 系列最容易忽略的坑尤其是第一次接触 DC 靶机的人。你随手用浏览器访问http://192.168.x.x会发现页面能打开但排版是乱的图片加载不出来点击跳转还会被带到http://dc-6/然后直接失败。原因在于 WordPress 后台的siteurl和home两项配置写死了dc-6这个域名所有资源链接、登录跳转都以它为基准。靶机作者故意这么设置目的就是让你去改本机 hosts。在 Kali 上打开/etc/hosts加一行192.168.x.x dc-6注意这里填的是靶机的实际 IP。改完之后再访问http://dc-6整个站点就恢复正常了。这一步不只是通关需要在真实渗透里也有很强的对应场景——内网里用域名做 vhost 的站点一抓一大把你只扫 IP 不看域名等于漏了一半攻击面。1.3 nmap 扫描别放过端口也别迷信端口环境就绪之后先做一轮完整的端口扫描。我习惯上来就跑全端口加版本识别nmap -sV -sC -p- dc-6DC-6 的结果很干净只有两个开放端口端口服务版本信息22/tcpSSHOpenSSH 7.4p1 Ubuntu80/tcpHTTPApache httpd 2.4.25-sC跑默认脚本-sV做版本探测-p-扫全端口。这一步有两个心得想分享第一很多教程喜欢直接写nmap -sV dc-6只扫默认的 1000 个端口但靶机世界里经常有端口开在高位段比如 DC 前作就出现过高端口服务。养成全端口扫描的习惯成本也就多等一两分钟但能避免错过关键入口。第二看到 22 端口也不要急着去试 SSH 暴力破解。DC-6 的设计思路很明确SSH 是留给“拿到口令之后”用的真正的入口在 80 的 WordPress 上。端口扫完攻击路径基本确定——Web 打点拿 Web 口令再撞 SSH。2. WordPress 站的正确侦察姿势wpscan 枚举与登录页暗示2.1 用 wpscan 把用户清单拿干净确认 80 端口跑的是 WordPress 之后直接上 wpscan。这是 Kali 自带的老牌工具专干 WordPress 指纹识别、插件枚举、用户枚举和密码爆破这一套活。先做用户枚举wpscan --url http://dc-6 --enumerate u或者用简写-e u。跑完之后wpscan 会列出站点上枚举到的用户名DC-6 这里出来的是adminmarkgrahamsarahjens为什么要做这一件事因为 WordPress 的登录爆破是两段式的先知道用户名再去猜密码。如果你连用户都没有爆破时还得套用一份 username 字典尝试次数直接翻几倍而且在真实环境里还会因为请求特征太明显被 WAF 拦。有了这份用户名清单后面爆破就是“带着名单点名”效率和成功率完全不是一个级别。顺带提一句wpscan 在枚举用户时如果发现xmlrpc.php开着也会反馈给你。这个端点可以被用来做放大式的密码爆破一次 POST 里面塞多个密码效率很高。但 DC-6 没必要绕这个弯子直接打wp-login.php就行。2.2 插件和主题扫描判断要不要走 Nday 路线接下来枚举插件和主题看有没有已知漏洞可打wpscan --url http://dc-6 -e vp,vtvp是有漏洞的插件vt是有漏洞的主题。结果基本没什么收获——主题是一个自定义的 Activity 主题插件也很少wpscan 没有爆出可以一键 getshell 的 Nday。WordPress 本身的版本号也不会有直接可用的 RCE。这个结果其实很重要。它告诉你别在这台机器上浪费时间找插件漏洞了DC-6 的出题人就是希望你走“弱口令 定制字典”这条路。我在打靶时常犯一个毛病就是工具报“没有漏洞插件”之后不甘心还非要去翻历史 exp、找边缘接口。遇到这种信息收集阶段就把攻击面摸清楚的情况最正确的做法是顺着线索往下走而不是原地折腾。2.3 登录页那段话是全站最重要的提示打开http://dc-6/wp-login.php页面底部或者登录框附近有一段小字。原话大意是Password is not in rockyou.txt, but might be on this page.这句话基本就是官方出题思路的自白。它直接告诉你两件事第一默认字典这条路被堵死了。rockyou 是全球通用密码集的代表覆盖的密码都是“大部分人的常用口令”。作者既然明确说密码不在里面你就不用再费劲去跑那 1400 万条了。第二密码线索就在网站本身的页面文字里。这正好对应一种很常见的实战场景企业站点的密码不是随机生成的高强度口令而是员工拿品牌名、项目名、人名、文章关键词加上一些大小写和数字符号的变形组合出来的。这种密码有一个特点——它不会出现在通用字典里但一定出现在目标自己的内容里。再回头看看首页一堆文章、作者署名、评论内容这些词就是天然的密码素材池。到这一步攻击路径已经完全清晰采词、造字典、爆破。3. 站内词典定制cewl 绕过 rockyou 的“标准答案陷阱”3.1 rockyou 为什么在这台靶机上注定失败先聊一个很多人没想明白的问题密码爆破失败很多时候不是字典不够大而是字典“不够准”。rockyou 是通用型字典它的逻辑是“撞大众化弱口令”比如password、admin123、qwerty这些。但 DC-6 的密码是作者从站点页面文字里提取的再经过大小写变形和特殊字符拼接天然就不在通用集里。就算 rockyou 有 1400 万条也几乎不可能命中一个“只存在于这个网站文字里的、经过刻意加工的密码”。真实渗透里同理。你去打一个企业内网的 WordPress如果对方密码是CompanyName2023!这种组合rockyou 绝对查无此词但如果你能拿到公司官网、年报、员工博客的内容从里面提取高频词来自定义字典命中率立刻翻几倍。这就是“定制字典”的核心价值——不是靠数量取胜而是靠相关性取胜。3.2 cewl 参数选择与词表加工cewl 是 Kali 自带的工具专门从网站页面上抓取单词并生成字典。我用的命令是cewl http://dc-6 -d 2 -m 5 -w dc6_dict.txt参数含义参数作用我这边的选择理由-d爬取深度设成 2让它顺着首页链接多抓两层页面覆盖面更大-m最小单词长度设成 5太短的词比如 a、it、the没有密码价值纯噪音-w输出字典文件保存成 dc6_dict.txt后面直接喂给 wpscan生成完之后先看两眼字典内容wc -l dc6_dict.txt head -50 dc6_dict.txt你会发现里面有不少文章标题、人名、评论词。这些就是下一步爆破的弹药。这里有个小细节我踩过坑cewl 默认会把页面里所有a标签、段落文本里的词都抓出来但有些词是 HTML 标签属性里的残留比如css、http、com之类的这些其实是噪音。如果你嫌字典太脏可以先sort -u去重再按长度过滤一下。但对于 DC-6 来说原始词表已经够用了我先不加工直接拿去跑能命中就行。3.3 用 wpscan 定向爆破mark 的密码浮出水面字典准备好了用户清单也有了接下来执行 WordPress 登录爆破。我针对每个枚举到的用户都尝试但为了减少请求量优先从 mark 开始——因为首页文章和页面里 mark 出现的频率明显更高像是站点的主要维护者。wpscan --url http://dc-6 --usernames mark --passwords dc6_dict.txt --password-attack wp-login这里--usernames可以直接传单个用户名也可以传一个包含多个用户名的文件。--password-attack wp-login指定攻击目标是登录接口wpscan 会用内置的逻辑去构造 POST 请求。跑起来之后wpscan 会一条条尝试并输出进度。这个过程可能看起来有点慢因为 wpscan 默认请求间隔不算快你千万别以为它卡死了就手动 CtrlC。让它跑完一轮结果很快就出来了——mark 用户的密码是m2Z开头的一串组合由页面上的单词变形拼接而成大小写和数字符号都有。具体的完整密码我不在这里写了建议你自己跑一遍看结果也算验证整个链路是否真的通了。这种“页面词汇 大小写变形 特殊符号拼接”的密码结构在现实中也非常典型。很多时候员工的密码就是把喜欢的球队、宠物名字、公司项目代号改一改再尾缀一个年份和感叹号。你与其跑 rockyou不如花几分钟抓取目标官网內容生成更“懂它”的字典。4. SSH 登录后的 sudo 侦察为什么 joe 会躺在提权列表里4.1 用 Web 口令撞 SSH拿下初始立足点拿到 mark 的口令之后我直接拿到 SSH 上去试。这个行为在你看来可能有点“莽”但请想清楚一件事靶机只有一个 80 和一个 22密码又是从 WordPress 爆破出来的两个服务之间极大概率复用同一套账号密码——这在真实内网里更是常态化操作员工常常把 Web 后台口令和服务器 SSH 口令设成一样的。命令很简单ssh markdc-6输入刚才爆破出来的密码成功登录。进来先看一下基本身份id ls -la /home/mark顺手翻一下 mark 的家目录一般能看到第一个 flag 文件。把它读出来记录一下自己在整个攻击链路中已经推进到的位置——这个习惯对打多阶段靶机特别重要防止思路断掉后忘记已经拿到了哪些信息。4.2 sudo -l 是提权侦察的第一步永远别跳过拿到用户级 shell 之后下一步就是提权侦察。我见过的很多新手在拿到 shell 之后直接开始翻数据库配置、看内核版本但其实最该先做的是sudo -l——看看当前用户有没有被授予额外的 sudo 权限。sudo -l如果要求输入密码就输 mark 的密码。DC-6 这里的结果非常干脆User mark may run the following commands on dc-6: (root) NOPASSWD: /usr/bin/joe翻译成人话mark 这个用户不需要输 root 密码就能以 root 身份执行/usr/bin/joe。就这一条整台靶机的提权路径就锁死了。这里我想多说一句看到sudo -l输出里有“编辑器”“包管理器”“文件查看器”这类程序时第一反应就应该是“能不能用它执行命令或者读写系统文件”。所有编辑器几乎都自带“在编辑器里执行 shell 命令”的隐藏功能vi/vim 有:!nano 有CtrlR然后CtrlXjoe 也有自己的命令模式。这些功能本身是给管理员在编辑文件时偷懒用的但一旦 sudo 授权落到编辑器头上就等于把 root shell 拱手送给了普通用户。4.3 别急着下一步先理解 joe 在这个系统里的处境joeJoes Own Editor是 Linux 上一个轻量级文本编辑器定位跟 nano 差不多。DC-6 系统里大概率是预装的而且莫名其妙地给它配了 NOPASSWD 的 sudo 规则——这明显是作者故意埋的提权入口。遇到这种情况我的习惯是先用常识快速验证一下“编辑器能不能执行命令”再决定采用哪种方式提权。joe 的执行方式稍后细说但你要理解一个底层逻辑当你用sudo joe启动它时整个进程的属主是 root编辑器内部再去启动一个/bin/bash子进程这个子进程自然也是 root 权限。整个过程没有任何漏洞利用的技术含量纯粹是 sudo 配置失当。在这个阶段我还顺便看了下/etc/passwd里有 shell 的用户、/var/www/html下的 WordPress 配置确认没有其他更明显的后门路径。但说实话这些是“确认没有意外”的常规动作。真正要做的事情只有一件——进 joe拿 root。5. 利用 joe 编辑器拿到 root Shell完整实操与替代路径5.1 joe 命令模式的原理和 vi 里的:!如出一辙前面说了joe 是个文本编辑器但本质上所有编辑器都是“可以执行外部命令的进程”。joe 的逻辑是这样在编辑界面里按CtrlK会进入它的命令模式底部会弹出一个命令输入提示你在这里输入以!开头的命令joe 就会调用系统 shell 去执行它并把输出返回到编辑器屏幕里。这篇文章不想让你背指令而是想让你理解这条链路的每个环节mark 用户 →sudo joe→ 编辑器进程以 root 运行 → 编辑器执行!/bin/bash→ 生成的 shell 是 root → 拿到交互式 root 会话。类比一下你在 vi 里敲:!ls能看到以当前 vi 进程权限执行的命令输出。如果 vi 是 root 启动的那你执行的就是 root 命令。这个原理在所有带外部命令功能的编辑器里通用。5.2 完整提权操作从 sudo joe 到 root shell一步步来。整个过程我控制在十秒以内。第一步启动 joe。随便打开一个文件或者直接新建一个临时文件都行sudo joe /tmp/anything.txt第二步按CtrlK。屏幕底部会出现命令模式的输入栏类似Command:或直接在底部一行显示可输入状态。第三步输入以下命令并回车!/bin/bash注意这个!不能省它是 joe 识别“这是外部命令”的前缀。第四步回车之后你的当前终端会变成一个新的 shell 会话。马上验证一下身份id uid0(root) gid0(root) groups0(root)到这一步root shell 已经到手。你可以直接读最终 flagcat /root/flag*.txt整个过程没有编译任何 exp没有内核提权没有 Dirty Cow就是纯粹靠 sudo 授权滥用。这就是 DC-6 最有教学价值的地方——它告诉你提权不一定是高难度的漏洞利用有时候只是一个管理员图省事留下的错误配置。5.3 另一种更“持久”的利用路径直接改 sudoers除了用!bash拿一次性 shelljoe 还可以用来直接修改系统授权文件实现更持久的控制。我自己在测试时会优先选择!bash因为上手最快但如果你想让后续操作更轻松可以考虑这条替代路径。方案一修改/etc/sudoerssudo joe /etc/sudoers按CtrlK输入!/bin/bash或者直接在编辑器里添加一行mark ALL(ALL) NOPASSWD: ALL保存退出之后mark 用户以后想sudo -i提 root 都不需要密码了。这种做法的好处是权限变更直观、可控性强。方案二修改/etc/passwd把 mark 的 UID 改成 0这个方式更“野”等于直接把 mark 变成 root 账号但副作用很大会影响账号属性、文件归属判断而且容易在日志里留下明显痕迹。实战内网里我一般不推荐这种糙办法靶机里玩玩可以但没必要。两种方案对比方案操作复杂度持久性风险!bash拿临时 shell最低低退出即失效无修改/etc/sudoers中高配置错误会导致 sudo 崩溃修改/etc/passwdUID低高破坏系统语义痕迹重改系统文件前记得先备份这是底线。sudo cp /etc/sudoers /etc/sudoers.bak这种事养成肌肉记忆。5.4 打靶收尾别忘了回到“信息收集”这一步再看一眼拿到 root 之后整台 DC-6 的理论流程就结束了。但我个人的习惯是拿到 root 后不会立刻关机走人而是回头再做一次“复盘式信息收集”。比如我会再翻一下 WordPress 的wp-config.php看看数据库账号密码是怎么存的会看一眼/home下每个用户目录的文件属主和权限会翻一下/var/log/auth.log里有没有我爆破的痕迹。这些动作不是靶机通关的必要条件但能帮你建立“攻击链完整闭环”的感知——从 Web 入口到数据库口令、从用户文件到系统日志整个系统在你面前是透明的。DC-6 打下来我最深的体会是它没有考任何“花活”但每一步都在锤炼渗透测试的基本功。信息收集阶段要你耐心看页面、看登录提示爆破阶段要你放弃默认字典转而定制词表提权阶段要你懂 sudo 授权和编辑器命令模式的原理。这三件事恰恰是真实项目中天天要用到的能力。最后分享一个小技巧如果你在别的靶场里也遇到sudo -l输出里出现奇怪的编辑器或交互式程序比如joe、vim、less、more、man第一反应永远是“它能不能执行命令或读文件”。less 里有!shman 里有!命令vim 里有:!这些出口一旦绑定了 root 权限那就是现成的 root shell。把这套思路刻进脑子里比背十个提权 exp 都管用。
返回列表