performing-thick-client-application-penetration-test
使用 dnSpy、Procmon 和 Burp Suite 对桌面应用程序执行厚客户端(胖客户端)渗透测试,识别不安全的本地存储、硬编码凭据、DLL 劫持、内存操控和不安全的 API 通信等漏洞。
Best use case
performing-thick-client-application-penetration-test is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
使用 dnSpy、Procmon 和 Burp Suite 对桌面应用程序执行厚客户端(胖客户端)渗透测试,识别不安全的本地存储、硬编码凭据、DLL 劫持、内存操控和不安全的 API 通信等漏洞。
Teams using performing-thick-client-application-penetration-test should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/performing-thick-client-application-penetration-test/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How performing-thick-client-application-penetration-test Compares
| Feature / Agent | performing-thick-client-application-penetration-test | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
使用 dnSpy、Procmon 和 Burp Suite 对桌面应用程序执行厚客户端(胖客户端)渗透测试,识别不安全的本地存储、硬编码凭据、DLL 劫持、内存操控和不安全的 API 通信等漏洞。
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 执行厚客户端应用程序渗透测试
## 概述
厚客户端(胖客户端)渗透测试评估在用户计算机本地运行并与后端服务器通信的桌面应用程序的安全性。与 Web 应用不同,厚客户端具有更广泛的攻击面,包括本地文件存储、二进制分析、内存操控、DLL 注入、进程拦截和客户端-服务器通信。常见测试目标包括银行应用、ERP 客户端(SAP GUI)、交易平台、医疗系统和传统企业软件。
## 前置条件
- 应用程序安装包和有效凭据
- Windows/Linux 测试机(隔离环境)
- 工具:dnSpy、Procmon、Process Hacker、Wireshark、Burp Suite、Echo Mirage、Fiddler、IDA Pro/Ghidra
- 测试机的管理员访问权限
## 阶段一:信息收集
### 静态分析
```powershell
# 识别应用程序技术
# 检查文件属性、签名、框架(.NET、Java、C++、Electron)
file application.exe
# .NET -> dnSpy, JetBrains dotPeek
# Java -> JD-GUI, JADX
# C/C++ -> Ghidra, IDA Pro
# Electron -> 提取 asar 归档
# 检查 .NET 框架
Get-ChildItem -Path "C:\Program Files\TargetApp" -Recurse -Filter "*.dll" |
ForEach-Object { [System.Reflection.AssemblyName]::GetAssemblyName($_.FullName).FullName }
# 字符串分析
strings application.exe | findstr -i "password\|secret\|api\|key\|token\|jdbc\|connection"
# 检查硬编码凭据
strings application.exe | findstr -i "username\|user=\|pass=\|pwd=\|admin"
# 检查配置文件
type "C:\Program Files\TargetApp\app.config"
type "C:\Program Files\TargetApp\settings.xml"
type "%APPDATA%\TargetApp\config.json"
# 检查证书锁定
strings application.exe | findstr -i "cert\|pin\|ssl\|tls"
```
### 使用 dnSpy 反编译 .NET 程序
```
# 在 dnSpy 中打开应用程序
1. 启动 dnSpy
2. 文件 > 打开 > 选择 application.exe 和相关 DLL
3. 搜索:
- "password"、"secret"、"connectionString"
- 认证方法
- 加密/解密函数
- API 端点和密钥
- 授权验证逻辑
# 关注:
- 源代码中的硬编码凭据
- 不安全的加密(DES、MD5、Base64"加密")
- SQL 查询(潜在注入)
- 禁用的证书验证
- 包含敏感数据的调试/详细日志
```
## 阶段二:动态分析
### 进程监控
```powershell
# 使用 Procmon 监控文件系统活动
# 过滤器:
# 进程名称 = application.exe
# 操作 = CreateFile, WriteFile, ReadFile, RegSetValue
# 关键观察点:
# - 应用在哪里存储数据?(AppData、临时目录、注册表)
# - 是否将凭据写入磁盘?
# - 是否创建包含敏感数据的临时文件?
# - 访问哪些注册表键?
# 使用 Process Hacker 监控
# 检查:已加载 DLL、网络连接、句柄、令牌
# 监控网络流量
# Wireshark 过滤器:ip.addr == <server_ip>
# 检查:未加密凭据、API 密钥、令牌
```
### 流量拦截
```bash
# 使用 Burp Suite 拦截 HTTP/HTTPS 流量
# 配置系统代理:127.0.0.1:8080
# 在 Windows 证书存储中安装 Burp CA 证书
# 对非 HTTP 协议,使用 Echo Mirage
# 注入进程并拦截 TCP/UDP 流量
# 对带证书锁定的 HTTPS:
# 方法 1:在 dnSpy 中修补证书验证
# 方法 2:使用 Frida 挂钩 SSL 验证
frida -l bypass_ssl_pinning.js -f application.exe
# 对 .NET 应用使用 Fiddler
# 启用 HTTPS 解密
# 监控 API 调用、请求/响应体
```
## 阶段三:漏洞测试
### 认证绕过
```
# 测试本地认证绕过
1. 打开 dnSpy,找到认证方法
2. 在凭据验证处设置断点
3. 修改返回值绕过(调试 > 设置下一语句)
4. 或:修补二进制文件使其始终返回 true
# 测试凭据存储
# 检查:注册表、配置文件、SQLite 数据库、Windows 凭据管理器
reg query "HKCU\Software\TargetApp" /s
type "%APPDATA%\TargetApp\user.db"
# SQLite: sqlite3 user.db ".dump"
```
### DLL 劫持
```powershell
# 识别 DLL 搜索顺序漏洞
# 使用 Procmon 查找从可写路径加载的 DLL
# 过滤器:结果 = NAME NOT FOUND,路径以 .dll 结尾
# 创建恶意 DLL
# msfvenom -p windows/exec CMD=calc.exe -f dll -o hijacked.dll
# 放置在应用目录或可写 PATH 目录中
# DLL 侧载(Sideloading)
# 若应用不使用完整路径加载 DLL:
# 1. 创建具有相同导出函数的 DLL
# 2. 放置在应用目录中
# 3. 恶意 DLL 先于合法版本加载
```
### 内存分析
```powershell
# 转储进程内存
# 使用 Process Hacker > 进程 > 属性 > 内存
# 搜索明文凭据、令牌、会话 ID
# 从内存转储提取字符串
strings process_dump.dmp | findstr -i "password\|token\|session\|bearer"
# 修改内存值(授权绕过、权限提升)
# 使用 Cheat Engine 或 x64dbg:
# 1. 找到授权变量的内存地址
# 2. 修改值(如:isAdmin = 0 -> isAdmin = 1)
```
### 输入验证
```
# 本地数据库中的 SQL 注入
# 测试输入字段:' OR 1=1--
# 若应用使用本地 SQLite/SQL Server Express
# 命令注入
# 测试与操作系统交互的字段:
# 文件路径:..\..\..\..\windows\system32\cmd.exe
# 打印/导出:| calc.exe
# 缓冲区溢出
# 向文本字段发送超长输入
# 使用 x64dbg 监控崩溃
# 检查基于 SEH 或基于栈的溢出
```
## 阶段四:API 安全测试
```bash
# 捕获厚客户端的 API 调用
# 在 Burp Suite 中分析:
# IDOR(不安全直接对象引用)
# 修改请求中的用户 ID 以访问其他用户数据
# GET /api/users/1001 -> GET /api/users/1002
# 授权绕过
# 删除或修改 JWT 令牌
# 测试角色提升:将角色声明从 "user" 修改为 "admin"
# 批量赋值(Mass Assignment)
# 向 API 请求添加额外参数
# POST /api/profile {"name": "test", "isAdmin": true}
# 速率限制
# 测试登录 API 的暴力破解保护
# 测试账户锁定绕过
```
## 发现模板
| 发现项 | 严重性 | CVSS | 修复建议 |
|---------|----------|------|-------------|
| 二进制文件中的硬编码数据库凭据 | 严重 | 9.1 | 使用安全凭据存储(DPAPI、密钥保管库) |
| 通过可写应用目录的 DLL 劫持 | 高危 | 7.8 | 使用完整 DLL 路径,验证 DLL 签名 |
| 内存中的明文凭据 | 高危 | 7.5 | 使用后清零内存,使用 SecureString |
| 无证书锁定 | 中危 | 6.5 | 实施证书锁定 |
| 本地 SQLite 数据库存储明文密码 | 严重 | 9.0 | 使用 bcrypt/Argon2 哈希 |
| 代码中禁用 SSL 验证 | 高危 | 8.1 | 启用正确的证书验证 |
## 参考资料
- dnSpy: https://github.com/dnSpy/dnSpy
- Procmon: https://learn.microsoft.com/en-us/sysinternals/downloads/procmon
- OWASP Thick Client Testing Guide: https://owasp.org/www-project-thick-client-top-10/
- Ghidra: https://ghidra-sre.org/
- Echo Mirage: https://sourceforge.net/projects/echomirage/Related Skills
testing-websocket-api-security
测试 WebSocket API 实现中的安全漏洞,包括 WebSocket 升级时缺少身份认证、跨站 WebSocket 劫持(Cross-Site WebSocket Hijacking,CSWSH)、通过 WebSocket 消息进行的注入攻击、输入校验不足、通过消息泛洪实施拒绝服务,以及通过 WebSocket 帧造成的信息泄露。测试人员使用 Burp Suite 拦截 WebSocket 握手和消息,构造恶意 payload,并测试 WebSocket 通道上的授权绕过。适用于 WebSocket 安全测试、WS 渗透测试、CSWSH 攻击或实时 API 安全评估相关请求。
testing-oauth2-implementation-flaws
测试 OAuth 2.0 和 OpenID Connect 实现中的安全缺陷,包括授权码拦截、重定向 URI 操控、OAuth 流程中的 CSRF、令牌泄露、权限范围(scope)提升以及 PKCE 绕过。测试人员对授权服务器、客户端应用及令牌处理进行评估,发现可导致账户接管或未授权访问的常见错误配置。适用于 OAuth 安全测试、OIDC 漏洞评估、OAuth2 重定向绕过或授权码流程测试相关请求。
testing-mobile-api-authentication
测试移动应用 API 的认证与授权机制,识别认证失效、不安全的令牌管理、会话固定、 权限提升和 IDOR 漏洞。适用于对移动应用后端进行 API 安全评估、测试 JWT 实现、 评估 OAuth 流程或评估会话管理的场景。适合涉及移动 API 认证测试、令牌安全评估、 OAuth 移动端流程测试或 API 授权绕过的相关请求。
testing-jwt-token-security
在安全测试活动中,评估 JSON Web Token(JWT)实现中的密码学弱点、算法混淆攻击和授权绕过漏洞。
testing-for-xxe-injection-vulnerabilities
在授权的渗透测试中发现和利用 XML 外部实体(XXE)注入漏洞,以读取服务器文件、执行 SSRF 并外泄数据。
testing-for-xss-vulnerabilities
通过向反射型、存储型和 DOM 型上下文注入 JavaScript 载荷,测试 Web 应用程序的跨站脚本(XSS)漏洞, 演示客户端代码执行、会话劫持和用户冒充。测试人员识别所有注入点和输出上下文,构造适合上下文的载荷, 并绕过净化和 CSP 保护。适用于 XSS 测试、跨站脚本评估、客户端注入测试或 JavaScript 注入漏洞测试等请求场景。
testing-for-xss-vulnerabilities-with-burpsuite
在授权的安全评估过程中,使用 Burp Suite 的扫描器、Intruder 和 Repeater 工具识别和验证跨站脚本(XSS)漏洞。适用于 Web 应用渗透测试中检测反射型、存储型和 DOM 型 XSS,验证自动化扫描器报告的 XSS 发现,以及评估 CSP 和 XSS 过滤器的有效性时使用。
testing-for-xml-injection-vulnerabilities
测试 Web 应用程序中的 XML 注入漏洞,包括 XXE(XML 外部实体注入)、XPath 注入和 XML 实体攻击,以识别数据泄露和服务器端请求伪造(SSRF)风险。
testing-for-sensitive-data-exposure
在安全评估中识别敏感数据暴露漏洞,包括 API 密钥泄露、响应中的 PII、不安全存储以及未受保护的数据传输。
testing-for-open-redirect-vulnerabilities
通过分析 URL 重定向参数、绕过技术和利用链,识别并测试 Web 应用程序中的开放重定向漏洞,用于网络钓鱼和 Token 窃取。
testing-for-json-web-token-vulnerabilities
测试 JWT 实现中的关键漏洞,包括算法混淆、none 算法绕过、kid 参数注入和弱密钥利用,以实现认证绕过和权限提升。
testing-for-host-header-injection
测试 Web 应用程序的 HTTP Host 头部注入漏洞,以识别密码重置中毒、Web 缓存投毒、SSRF 以及虚拟主机路由操控风险。