DC-2 通关详细教程
本文是一篇DC-2靶机的完整通关 Writeup。DC-2 是 VulnHub 上的经典入门靶机主要考察WordPress 站点渗透、用户名枚举、密码爆破、SSH 登录、rbash 受限 shell 逃逸、以及利用 git 的 SUID 提权等一系列基础但非常实用的渗透流程。全程在 Kali Linux 下操作适合刚接触渗透测试 / CTF 的同学练手。目录0x00 环境准备0x01 启动虚拟机0x02 使用 nmap 扫描探活0x03 信息收集探测端口及服务0x04 访问 Web 站点0x05 发现 Flag10x06 扫描后台目录0x07 用户名枚举0x08 暴力破解账号密码0x09 发现 Flag20x10 登录 SSH 与发现 Flag30x11 rbash 受限 shell 逃逸0x12 在 jerry 家目录发现 Flag40x13 提权git SUID 提权0x14 发现 final-flag通关成功总结0x00 环境准备项目说明攻击机Kali Linux靶机DC-2VulnHub 下载网络模式NAT攻击机与靶机处于同一网段网段192.168.126.0/24下载好 DC-2 的镜像后导入到 VMware 或 VirtualBox 中把网络适配器设置为NAT 模式保证攻击机和靶机能互相通信即可。0x01 启动虚拟机把虚拟机调整为NAT 模式后启动启动成功会显示如下页面启动之后我们并不知道靶机的具体 IP只知道网段是192.168.126.0/24所以第一步需要自己去探活找到靶机的 IP。0x02 使用 nmap 扫描探活用 nmap 对整个网段做存活主机探测nmap-sP192.168.126.0/24-sP即-sn只做主机存活探测Ping 扫描不扫描端口。扫描结果如下根据扫描结果可以推断出192.168.126.139就是我们的 DC-2 靶机。0x03 信息收集探测端口及服务确定目标 IP 后对目标进行全端口和服务探测。这里推荐两条命令nmap-sS-T5-sC-p- --min-rate10000192.168.126.139 nmap-A-p--v192.168.126.139下面对常用参数做一下解释参数含义-sSSYN 扫描半开放扫描不完成完整 TCP 连接只发 SYN 包收到 SYN-ACK 后回 RST。速度快且隐蔽不易被目标日志记录-T5扫描时间模板取 0~5T5 为极速模式延迟低、速度快但可能增加被察觉风险-sC等同于--scriptdefault运行 nmap 默认脚本集用于检测常见服务版本、漏洞等信息-p-扫描所有端口1~65535 全部 TCP 端口--min-rate 10000每秒至少发送 10000 个探测包提高扫描速度-A综合扫描包含操作系统探测、版本探测、脚本扫描、路由追踪等-v显示详细输出扫描结果可以看到80 端口开放存在 Web 服务7744 端口开放存在 SSH 服务。注意这里的 SSH 并不是默认的 22 端口而是7744后面登录时要指定端口。0x04 访问 Web 站点浏览器访问http://192.168.126.139却发现访问不了而且我们输入的 IP 地址自动被转换成了一个域名dc-2。原因就是dc-2这个域名解析失败。解决方法是修改 hosts 文件添加「IP → 域名 dc-2」的指向。在 Kali Linux 中hosts 文件路径为/etc/hosts用下面的命令编辑sudovim/etc/hosts在文件末尾添加一行192.168.126.139 dc-2保存后再次访问http://dc-2访问成功很明显这是一个WordPress站点。0x05 发现 Flag1在站点里点进去可以找到Flag1内容大意如下你通常的单词列表wordlists可能不起作用所以也许你只是得小心点cewl。更多的密码总是更好但有时候你就是赢不了它们全部。以一个身份登录以查看下一个标志如果你找不到它就以另一种身份登录。从 Flag1 的提示可以分析出几个关键信息普通的字典可能没用暗示要用cewl生成针对性的密码字典需要登录才能看到下一个 Flag存在多个用户身份一个不行就换另一个。所以接下来的思路就是枚举用户名 → 生成字典 → 爆破密码 → 登录。0x06 扫描后台目录先扫描一下网站的后台路径和敏感文件常用的工具是dirb和dirsearchdirb http://192.168.126.139 dirsearch-uhttp://192.168.126.139-e*dirb、dirsearch同属 WEB 目录爆破后台路径扫描工具都是「爬虫 字典爆破」的方式去查找后台地址、敏感文件。扫描结果成功找到了 WordPress 的登录后台页面/wp-login.php。0x07 用户名枚举前面已经确定这是一个 WordPress 站点针对 WordPress我们有专门的工具WPScan。WPScan是 Kali 自带、用 Ruby 编写的、专门针对 WordPress 的黑盒安全扫描器也是渗透 WP 站点的「标配工具」。WPScan 的一些常用语句wpscan--urlhttp://dc-2# 获取版本信息wpscan--urlhttp://dc-2--enumeratep# 扫描插件wpscan--urlhttp://dc-2--enumerateu# 枚举用户先看一下站点信息wpscan--urlhttp://dc-2得到关键信息目标 IP192.168.126.139Web 服务Apache/2.4.10 (Debian)WordPress 版本4.7.102018 年的老版本存在大量历史漏洞高危XMLRPC 接口开启可用于暴力枚举用户名 密码爆破WP 经典爆破点接着枚举用户名wpscan--urlhttp://dc-2--enumerateu枚举出了三个用户名admin、jerry、tom。配合前面的登录页面测试随便输入用户名密码会提示「用户名不存在」这进一步说明可以进行用户名枚举。0x08 暴力破解账号密码根据 Flag1 的提示普通字典可能不行所以使用cewl生成针对性的密码字典。cewl爬虫抓取目标网站页面关键词 → 自动生成自定义密码字典。针对 DC-2 这种 WP 站点它会爬取网页标题、栏目、人名、英文单词生成专属密码本比通用字典爆破成功率高很多。生成字典cewl http://dc-2/1.txt拿到字典后用 WPScan 进行密码爆破wpscan--urlhttp://dc-2--passwords1.txt爆破出了两个账号用户名密码jerryadipiscingtomparturient回到登录页面用爆破出的两个账号尝试登录0x09 发现 Flag2使用jerry / adipiscing登录 WordPress 后台在 jerry 账号里找到了Flag2If you can’t exploit WordPress and take a shortcut, there is another way.如果你不能利用 WordPress 并走一条捷径还有另一种方法。Hope you found another entry point.希望你找到了另一个入口。Flag2 的意思很明确如果 WordPress 这条路走不通还有另一个入口。前面我们已经发现开放了 SSH7744 端口所以下一步就是去试试 SSH。0x10 登录 SSH 与发现 Flag3SSHSecure Shell是安全远程连接协议默认端口 22但本靶机用的是7744端口。用tom账号登录 SSHsshtom192.168.126.139-p7744登录成功后在 tom 账号的家目录发现了Flag3。但是cat命令用不了这里改用vi来查看viflag3.txtFlag3 内容大意Poor old Tom is always running after Jerry. Perhaps he should su for all the stress he causes.可怜的老汤姆总是追着杰瑞跑。也许他应该为他造成的所有压力感到自豪——su 一下。这里提示了suLinux 切换用户命令暗示需要切换到 jerry 用户。但问题是当前环境没有su这个命令而且提示我们需要进行rbash 逃逸。0x11 rbash 受限 shell 逃逸rbash是受限的 bash shell对用户操作做了诸多限制例如不能使用cd命令改变目录、不能随意修改PATH环境变量、限制导入功能等。目的是提升系统安全性限制用户在系统中的操作范围。当前 tom 用户处于受限的 rbash 环境中需要先绕过它。先查看可以使用的命令发现cd进不去目录用ls可以直接查看目录信息。这里使用echo来绕过 rbash步骤如下BASH_CMDS[a]/bin/sh;aexportPATH$PATH:/bin/exportPATH$PATH:/usr/binecho/*下面逐条解释这个「简易提权 payload」BASH_CMDS[a]/bin/sh;a给数组变量BASH_CMDS[a]赋值/bin/sh系统 shell 解释器末尾的;a用分号分隔单独执行变量a触发调用 shell作用是生成一个交互式shshell。export PATH$PATH:/bin/PATH是系统命令搜索路径$PATH保留原有路径:/bin/追加 bin 目录export全局生效确保系统能找到/bin/sh、ls等系统命令。export PATH$PATH:/usr/bin继续追加/usr/bin到系统环境变量补齐系统常用命令路径。echo /*/*表示根目录下所有目录 / 文件echo用于遍历、列举服务器根目录文件。简单来说这套操作是配置环境变量 → 调用/bin/sh弹出系统 shell配合错误配置的 sudo、SUID、定时任务可以实现权限提升这也是 DC 系列靶机提权的高频代码。/bin/sh是 Linux 默认命令解释器拿到 sh 之后就可以执行系统指令了。逃逸成功后查看当前用户身份和当前目录idls此时我们仍在 tom 的家目录里通过cd ..返回到上一级目录也就是从 tom 家目录~/跳到/home。/home目录下有两个系统用户jerry、tom然后cd到 jerry 目录。0x12 在 jerry 家目录发现 Flag4进入 jerry 家目录后用cat查看 Flag4cdjerrylscatflag4.txtFlag4 内容大意Good to see that you’ve made it this far - but you’re not home yet.很高兴看到你走了这么远但你还没到家。You still need to get the final flag (the only flag that really counts!!!).你仍然需要获得最后的标志——唯一真正重要的标志No hints here — you’re on your own now. 这里没有暗示你现在只能靠自己了。意思就是还没结束需要提权才能拿到最终的 flag。而且 Flag4 提示我们可以使用git所以可以通过 git 来提权。先检查一下权限情况。我们发现 tom 用户不能使用 sudo那么切换到 jerry 用户试试看sujerrysudo-l再查找一下系统中设置了 SUID 位的文件find/-userroot-perm-4000-print2/dev/null-perm -4000用于筛选具有特定权限的文件。在 Linux 权限体系中4000八进制对应的权限标志是SUID。设置了 SUID 的文件普通用户执行时会临时获得文件所有者这里是 root的权限来运行该程序。该命令即表示查找所有设置了 SUID 权限位的文件。0x13 提权git SUID 提权经过前面的信息收集可以发现sudo、su都需要 root 权限我们这里能利用的只有git命令因此使用 git 的 SUID 配置来提权。思路是以 sudoroot 身份打开 git 的帮助文档然后在寻呼机less中执行命令。sudogitbranch--helpconfig以 sudo 权限即 root 身份打开 Git 分支配置相关的帮助文档sudogitbranch--helpstatus同理以 root 身份打开 Git 状态相关的帮助文档进入帮助文档后默认由less寻呼机打开直接输入!/bin/sh在某些寻呼机程序如less中!符号用于执行外部命令。这里的!/bin/sh会尝试以 root 权限启动一个交互式 shell。提权成功此时已经是 root 权限了。0x14 发现 final-flag通关成功最后进入 root 目录读取最终 flagcd/rootcatfinal-flag.txt读取到 final-flagDC-2 通关成功总结DC-2 是一台非常经典、环环相扣的入门靶机整体渗透路径如下信息收集nmap 探活/扫端口 → 发现 80(Web) 与 7744(SSH) → 修改 hosts 访问 WordPress 站点 → 发现 Flag1提示 cewl 多用户登录 → WPScan 枚举用户名admin/jerry/tom → cewl 生成字典 WPScan 爆破jerry、tom → jerry 登录后台发现 Flag2提示另一个入口 SSH → SSH 登录 tom 发现 Flag3提示 su → rbash 受限 shell 逃逸BASH_CMDS PATH → jerry 家目录发现 Flag4提示 git → git SUID 提权sudo git --help !/bin/sh → 读取 /root/final-flag.txt 通关知识点回顾nmap 参数-sSSYN 半开扫描、-T5极速模板、-sC默认脚本、-p-全端口、--min-rate最小发包速率WordPress 渗透WPScan 枚举用户名、cewl 生成专属字典、WPScan 爆破密码hosts 文件解决域名解析问题rbash 逃逸利用BASH_CMDS数组 修改PATH环境变量绕过受限 shellSUID 提权find / -user root -perm -4000查找 SUID 文件利用git的--help打开 less 寻呼机通过!/bin/sh提权到 root。希望这篇 Writeup 对你有所帮助欢迎交流讨论免责声明本文内容仅用于安全技术学习与 CTF 靶机练习请勿用于任何非法用途。对任何未经授权的渗透测试行为请务必遵守相关法律法规。