BUU刷题

[GYCTF2020]Ezsqli

知识点

布尔盲注、字符串比较爆破、无列名比较

解题

参考了Y1ng师傅的WP

在这里插入图片描述

进行了一下fuzz:

没有单独过滤 union和select 但过滤了这个整体 union xx select 就很坑。

然后过滤了information_schema,导致不能来爆表,爆字段,但是可以用 sys.x$schema_flattened_keys和sys.schema_table_statistics_with_buffer 来爆表

没有过滤^ || substr , ascii 等等,这题显然可以用盲注

2 || 1 回显 Nu1L

2 || 0 回显 V&N (这个就是条件)

爆库的盲注脚本:(这里用到了二分法跑盲注,效率更高)

在这里插入图片描述

爆表的盲注脚本:这里用到:

data[‘id’]=“2 || (ascii(substr((select/**/group_concat(table_name)from(sys.x$schema_flattened_keys)where table_schema=database()),%d,1)) > %d)”%(i,mid)

这题的关键在最后,在拿到表之后,这个时候我们无法直接爆字段名,然后进一步爆值。

但是这里有一种新姿势,利用字符串比较特性,同时还利用到了无列名比较

脚本如下:
在这里插入图片描述

稍微解释一下:

在这里插入图片描述
在这里插入图片描述
这个用到了无列名比较,实质上是两张表对应字段的值进行比较,这里‘mrkang’和 test表 ‘mrkang’ 进行了比较,然后’11’ 和’111’进行了比较,返回的0,要保证比较的两张表列数是一样的,然后这里用的limit 1 是为了取test表的第一行数据。

然后脚本里面用到的思路就是,我们猜测flag_1s_hr33表有两列,第一列字段名可能是id把,然后第二列可能存的就是flag,然后第一列字段名 id 的第一个数据应该是 1 ,所以我们构造表的时候,第一个控制为 1 ,然后第二个是我们要爆破的字符。

然后这里爆破的时候,字典是从小到大的,比如要爆破的数据是(“dphe”)第一个值是 d, a,b,c,d都会返回0 到e的时候才会返回1,所以这里打印出来的时候 用了往前移了一位。(减去了1),然后再是 fa ,fb,fc,fd,fe,ff,…fp,返回0 fq返回1,但是会减去一,所以实际上打印出来的是 fp,然后依次比较下去。同理爆破直到爆破完毕。

本地测试:

在这里插入图片描述

最后一个点,用了一下16进制,mysql是可以默认将16进制转换成字符串的。

也可以不用16进制转换,改一下函数:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值