从VulnHub DC4靶机实战看渗透测试全流程:信息收集、SSH弱口令与提权
1. 打靶前的准备环境部署与信息收集1.1 靶机导入与网络规划DC4是VulnHub上比较经典的入门级到中级渗透测试靶机作者DCAU把整个环境打包成OVF下载后导入VMware Workstation或者VirtualBox就能直接跑。这类靶机的核心意义在于用一种受控且完全合法的方式模拟现实网络里常见的脆弱配置让人在断网环境下安心练手不至于像在真实系统上那样承担法律风险这也是所有白帽和安全爱好者练习基本功的通用路子。先把网络规划说透。我在VMware里给DC4配置的是NAT模式这样做的好处是靶机和攻击机处在同一个虚拟子网里既能互相通信又不会影响宿主机所在的外部网络复现完直接关机收工干净利落。攻击机用的是Kali Linux同样是虚拟机网卡也选NAT开机之后第一步不是急着扫描而是先确认两台机器在同一个网段。很多新手卡在这一步靶机能开但扫不到十有八九就是网卡模式不一致要么一个NAT一个桥接要么都在桥接模式下被分配到了两个不同的物理网段。确认网络通之后我用ip a看了一下攻击机自己的IP地址然后针对靶机所在的整个C段做了一个快速的存活探测。这里有个小习惯值得保留不要一上来就全端口扫描先做主机发现确认目标到底开没开机、IP是什么再决定下一步动作。用nmap -sn或者直接arp-scan都行我个人更常用arp-scan --local因为局域网内ARP比ICMP更可靠遇到禁PING的机器也能发现。1.2 端口扫描与服务识别主机探测确认了靶机IP接下来是端口扫描。端口扫描这件事不要只跑一次也不要只用默认配置。我的习惯是先做一个快速的全端口扫描确认哪些端口是开放的再做一次带服务版本检测和默认脚本扫描的详细指纹识别。命令大概是这样nmap -p- --min-rate 5000 -T4 靶机IP nmap -sV -sC -p 22,80 靶机IP第一句是全端口扫描用-p-把1到65535全部过一遍--min-rate 5000提高发包速率缩短等待时间。第二句针对已知的开放端口做二次确认-sV开启服务版本探测-sC运行Nmap内置的默认脚本套件能顺便把SSH版本、HTTP响应头、可能的开放目录都列出来。DC4这台机器扫描结果很干净只开放了两个端口端口服务说明22/tcpOpenSSH远程管理入口可能存在弱口令风险80/tcpnginxWeb服务攻击面主要集中在这里这个结果其实已经透露了很多信息对外开放的服务越少意味着运维人员做过基础收敛但从另一个角度看入口越少说明只要找到一个突破口后续路径往往就越窄越好走。常见的攻击思路无非两条要么从Web应用本身找到漏洞要么尝试针对SSH做口令猜测。这两条路都会试但顺序上有讲究一般先看Web因为Web攻击面更大而且容易存在逻辑漏洞。1.3 访问Web应用确认指纹浏览器打开靶机IP映入眼帘的是一个普通的网站页面。这里不要急着点来点去先做两件事看页面源代码抓HTTP响应头。通过响应头基本可以确认Web中间件的具体版本比如Server: nginx/1.10.3这样的信息直接给后续漏洞搜索缩小了范围。页面本身的HTML代码里也常有惊喜比如开发者留下的注释、隐藏的表单字段、以及引入的静态资源路径这些细节都能反映站点目录结构。DC4的页面比较简单没有明显的CMS痕迹不属于WordPress或Joomla这种一键搭建的框架这就意味着注入和漏洞利用的路径更偏向手工逻辑挖掘。我随后用浏览器插件看了一眼Cookie机制、是否有登录框、是否存在可以被参数控制的功能点。如果站点存在动态交互功能比如搜索框、留言表单、文件上传点那都是重点测试对象。DC4首页给我的感觉是一个业务型页面功能点不算多但这都不妨碍我进入下一步——目录枚举。2. 突破口Web枚举与SSH弱口令2.1 目录枚举的坑字典选择与过滤Web目录枚举是信息收集里最枯燥但最有效的一步。选字典是个技术活用大字典虽然全面但消耗时间对小靶机来说很多路径根本用不上。我倾向于先用中等大小的字典快速扫一轮再根据页面情况决定要不要扩大范围。我用的是gobustergobuster dir -u http://靶机IP -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,html -q-x参数很关键它指定了要追加扫描的后缀名扫描器会顺带尝试index.php、flag.txt这类带后缀的文件很多时候隐藏的备份文件就是这么被扫出来的。另外过滤条件也要提前想好默认返回200的就是存在的路径但有些路径返回403或301也要关注301意味着存在重定向背后可能藏着一个新的目录。在DC4上扫出了几个路径其中一个登录入口页面引起了我的注意。这类登录页面如果存在弱口令或者存在认证绕过后面就能直接拿到一个合法的用户身份。还有的时候目录里会存在config.php.bak、backup.zip这类备份文件下载回来甚至可以直接看到数据库账号和密码这在我做其他靶机时碰到过不止一次。2.2 为什么弱口令在实战里依然常见现在很多教学活动在讲渗透测试时会把漏洞利用的重心放在0day、复杂链路上但实际经验告诉我真正让攻击者省力的往往是弱口令。为什么因为业务系统需要可用性为了方便管理员会把密码设置成简单好记的词或者在各处复用同一个密码。Docker部署的网站后台、监控面板、SSH账户只要存在不需要复杂爆破就能猜到的密码整个防线就形同虚设。在DC4上Web登录页面按常规试了admin/admin、admin/123456这组基础口令没有成功。不过我没有在这个登录框上死磕太久因为它在爆破时没有明显的速率限制但我也不确定它的认证逻辑背后是否对应真实的系统用户。如果直接爆破Web登录即便拿到密码也不一定能直接用于SSH。这时候更好的思路是回到信息收集的层面看看有没有更省力的入口。2.3 Hydra爆破SSH与首次登录既然22端口开着而且Web页面上疑似存在真实用户名提示那直接用Hydra对SSH做弱口令爆破就是一条非常自然的路径。在爆破之前我先根据站点的开发者签名在页面上收集到了可能的用户名比如页面下方留下的dave字样这种信息泄露在现实系统里也经常出现。准备工作做好直接上Hydrahydra -l dave -P /usr/share/wordlists/rockyou.txt ssh://靶机IP -t 4 -f参数说明一下-l指定单一用户名这里先只爆破dave-P指定字典文件rockyou是Kali自带的大字典解压后大概1400万条密码-t控制并发线程数SSH爆破并发不要拉太高4个线程足够太快容易触发服务端保护机制或者让靶机响应变慢-f表示找到第一个可用密码后就停止节省时间。爆破是有耐心的活儿但DC4的字典命中来得很快没有等太久就拿到了SSH登录密码。这里要给新手提个醒看到了密码之后第一件事不是急着到处看文件而是先建立稳定的会话把SSH密钥拷贝到这边方便后续操作不过靶机环境里我直接输入密码登录了。ssh dave靶机IP登录成功后的第一眼信息量很大id命令能看到当前用户ID、所属组whoami确认身份pwd看当前目录。到这里为止攻击表面上已经从Web协议层转移到操作系统层接下来的重点变成了提权路径探索。3. 提权与取证从普通用户到Root3.1 拿到Shell后的信息收集低权限Shell只是阶段性的成果目标是把权限提升到root并读取最终的flag文件。提权前的信息收集比端口扫描还要重要因为你要搞清楚这台机器上存在哪些可以被利用的薄弱点。常用命令一条一条过uname -a cat /etc/os-release sudo -l find / -perm -4000 -type f 2/dev/null find / -writable -type f 2/dev/null | grep -v proc crontab -l ls -la /home/这些命令各自的用途很清晰uname -a看内核版本判断是否存在已知的内核提权漏洞sudo -l看当前用户能免密或带密码执行哪些sudo命令这是最优先检查的点find带SUID位或可写的文件找找有没有可以被利用的特殊权限程序crontab看计划任务有些靶场会放置周期性执行的脚本如果普通用户可以修改这个脚本就能借root之手执行任意命令在DC4上内核版本并不老直接内核提权的路不建议走风险高还容易把机器弄崩。更有价值的是sudo -l的结果它显示当前普通用户可以在某些配置下以另一个用户身份执行命令这直接拉开了一条横向移动和纵向提权的清晰路径。3.2 sudo配置检查与用户横向移动sudo -l的具体输出会列出当前用户可以执行的命令比如User dave may run the following commands on DC4: (jim) NOPASSWD: /usr/bin/teetee是个很有意思的命令正常用途是读取标准输入并把内容同时输出到屏幕和文件。但如果某个用户能通过sudo以另一个账号运行它那么就可以利用它向任意文件写入内容比如覆盖目标用户家目录下的authorized_keys来植入自己的SSH公钥从而实现免密登录。这种意想不到的利用方式正是提权过程中最考验经验的地方。我没有急着直接写公钥而是先看看目标用户家目录里有哪些现成的文件比如.bash_history、backup脚本之类的内容。很多靶机设计者喜欢把下一步线索放在用户目录的历史记录里这种遗留信息在真实环境中也是审计找到突破口的关键。顺着这个思路我在jim用户的home目录里找到了下一步需要的凭证信息成功实现了横向移动从dave切换到了jim。这一步看起来简单但思路值得反复琢磨换位思考靶机设计者他会把下一关的钥匙藏在哪往往不是那种需要高深漏洞才能读到的地方而是一个普通用户恰好能读到的位置。这就是权限边界设计的意义所在——通过层层受限的访问控制把整个渗透过程拆成好几个阶段。3.3 提权到root并读取flag横向移动到jim之后重复一遍提权信息收集流程。这里面有个极其容易被忽视的点不要只查当前用户能sudo什么还要看全局计划任务、临时目录里的可执行脚本、以及各个用户家目录下的隐藏文件。在DC4这台靶机上最终提权到root靠的还是密码复用和sudo权限的结合。我记得当时继续用sudo -l发现jim或者后续切换到的用户具备以root身份执行命令的权限配合之前掌握到的密码信息一台命令直接切入root shellsudo su -进入root之后常规的取证动作分三步在/root下找到flag文件用cat读取内容并完整记录下来回溯整个攻击路径把每个阶段用到的漏洞、账号、命令全部整理成报告这里要说一个专业习惯很多人在拿到root之后就高兴地关掉终端这是不对的。一次完整的打靶应该以一份复盘笔记收尾记录哪些步骤走了弯路、哪些判断失误、哪些技术点有更优解。这比单纯把flag读出来有价值得多。4. 从零复现的踩坑记录与通用排错清单4.1 网络层问题排查打靶过程中最让人抓狂的不是漏洞难挖而是环境本身出了问题。我在这台DC4上最开始遇到过靶机无法获取IP的情况表现是Nmap扫不到任何主机arp-scan也看不到靶机MAC。排查步骤如下现象可能原因解决办法靶机无法获取IPVMware服务没起来重启VMware NAT和DHCP服务靶机和攻击机互PING不通网卡模式不一致统一改成NAT或自定义Vmnet能PING通但端口扫不到主机防火墙拦截确认靶机系统自带防火墙规则扫描速度极慢并发过低且目标有速率限制提高--min-rate或改用-Pn跳过主机发现这些经验不只在DC4上有效玩任何VulnHub靶机都能用到。环境问题解决掉后面才谈得上真正的安全测试。4.2 爆破效率低字典与参数调整很多人在Hydra爆破这步会卡很久原因往往不是目标多难而是方法不对。比较常见的几个坑第一个问题是不管目标类型上来就挂全量rockyou字典。rockyou对大多数场景确实有效但它有1400万条密码跑完一轮SSH需要很长时间。更聪明的做法是先用一个小型高频密码字典比如top1000或darkweb2017-top1000快速过一遍常见口令如果没有收获再扩大字典规模。第二个问题是不做用户枚举。爆破用户名时如果目标存在不同的返回信息可以先尝试判断某个用户名是否存在再进入密码爆破阶段。在现实环境里批量爆破用户名通常需要谨慎但在合法授权的靶机练习环境中这是提高效率的常规手段。DC4这类靶机更简单用户名已经在网页信息或历史记录里泄露直接锁定目标就好。第三个问题是并发参数设置不当。SSH爆破并发太高会直接导致靶机断开连接太低又慢。-t 4是一个比较保守且稳定的值。另外如果确认目标是Linux系统使用的账号是常用英文名那字典里对应的密码库就不需要携带大量中文口令。4.3 提权环节的常见误区提权是整个打靶过程中最需要耐心的一环经验不足的人容易踩到下面几个误区。误区一一上来就尝试内核提权。内核提权确实见效快但风险也大公共Exploit有概率打崩系统一旦靶机被搞挂所有进度都清零。DC4这类设计良好的靶机提权路径通常藏在配置错误里比如sudo配置、可写计划任务、SUID文件逐个排查比盲目登录Exploit脚本要稳妥得多。误区二忽视.bash_history和备份文件。用户的历史命令往往记录了安装软件、修改配置、切换用户的痕迹有时候密码和路径就直接出现在里面。我在DC4的复现过程中就在历史记录里获得了关键线索这个习惯在后续所有打靶中一直保留。误区三只关注当前用户权限忽略横向移动。提权不一定非要从普通用户直接跳到root很多靶场的套路是先利用配置缺陷跳到另一个用户再借助那个用户具备的sudo权限完成最终提权。把眼光拉高把整个权限边界画出来思路会清晰很多。误区四不整理漏洞利用路径。每个交叉验证过的利用链都应该在笔记里画成清单从端口、服务、用户、凭据、漏洞点、提权命令一层层写清楚。这样遇到同类靶机不仅快而且稳。4.4 DC4知识点复盘DC4这台靶机设计的核心考点可以归纳成四块信息收集能力从有限的端口和服务里找到Web交互点和真实用户名的泄露弱口令爆破理解SSH爆破的节奏、并发和字典选择权限边界意识普通用户不止能用sudo还能借助sudo配置的松散性做横向移动取证记录习惯从拿到低权限shell到最后提权每一步都要留下可复现的记录所以DC4整体不算难度高的靶机但它特别适合用来检验一个人的基础操作是否扎实。如果你能不看任何WriteUp独立完成这台机器说明你对端口扫描、目录枚举、口令爆破、sudo权限利用这几个最核心的环节已经有了基本的肌肉记忆。结尾玩DC4给我的最大感受是它不像某些靶机那样有一个炫技式的漏洞利用点全程都在考察安全意识层面的配置问题弱口令、用户信息泄露、sudo权限过大、历史记录未清理。这些东西在真实系统里比0day要常见得多能打好DC4基本就能应对一大类现实中的Linux服务器配置缺陷。最后分享一个小技巧复现完任何靶机后别急着清空工具痕迹先把当时的命令历史导出备份把所有用到的字典、脚本、截图统一放进一个以靶机名命名的目录。这既是完整的证据链也是未来复习最好的素材。等你积累了十几台靶机的复盘记录回头看自己早期的命令会明显感觉到思路和手法的进步。