프로젝트/Webhacking.kr

[Webhacking.kr] Challenge(old) 19번 문제

Uggjjini 2021. 7. 6. 18:45

문제 페이지는 해당 페이지와 같다.

 

 

해당 페이지에는 admin이 입력되어 있는 입력창이 존재한다.

 

제출 버튼을 클릭하면 you are not admin 이라는 문구가 뜨는 것을 확인 할 수 있다.

 

 

메인 페이지로 이동하여 입력창에 임의로 test 라고 입력하여 제출한다.

 

 

hello test라는 문구와 logout 버튼이 있는 페이지로 이동하는데 logout 버튼을 눌러도 페이지에는 변화가 없으며, 메인페이지로 이동하려고 뒤로 가기를 눌러도 계속 해당페이지가 유지된다.

 

그래서 먼저 이 페이지를 분석하였다.

 

해당 페이지의 소스코드를 보아도 뚜렷한 단서는 보이지 않아서 쿠키값을 확인해 보았다.

 

 

userid 라는 쿠키가 존재했는데 해당 쿠키값은 입력한 id 값과 관계가 있어보인다.

 

해당 쿠키값을 확인해 보니 맨 뒤에 %3D 가 있는 걸로 보아 URL 인코딩이 된 값이라는 것을 알 수 있다.

 

해당 쿠키값을 URL 디코딩 사이트를 이용하여 디코딩한다.

 

https://www.convertstring.com/ko/EncodeDecode/UrlDecode

 

URL 디코드 - 온라인 URL 디코더

 

www.convertstring.com

 

URL 디코딩 한 결과
ZTM1OGVmYTQ4OWY1ODA2MmYxMGRkNzMxNmI2NTY0OWVlMTY3MTc5N2M1MmUxNWY3NjMzODBiNDVlODQxZWMzMjAzYzdjMGFjZTM5NWQ4MDE4MmRiMDdhZTJjMzBmMDM0ZTM1OGVmYTQ4OWY1ODA2MmYxMGRkNzMxNmI2NTY0OWU=

 

이 값의 맨 뒷 부분에 = 가 있는 걸로 보아 해당 값은 base64로 인코딩된 값이다.

 

해당 값을 base64 디코딩 사이트를 이용하여 디코딩한다.

 

https://www.convertstring.com/ko/EncodeDecode/Base64Decode

 

Base64로 디코딩 - 온라인 Base64로 디코더

당신의 Base64로 여기에 텍스트를 디코딩 복사 파일로 디코딩 Base64로 다운로드 :

www.convertstring.com

 

base64 디코딩 한 결과
e358efa489f58062f10dd7316b65649ee1671797c52e15f763380b45e841ec3203c7c0ace395d80182db07ae2c30f034e358efa489f58062f10dd7316b65649e

 

디코딩한 결과 해시값이라는 것을 알 수 있다. 해당 해시값이 너무 길어 무슨 해시기법을 사용하는지 파악이 불가능해 디코딩 또한 불가능하다. 그래서 다른 짧은 문자의 id로 접근해 보았다.

 

쿠키값을 0으로 변경하여 새로고침을 눌러주면 처음 페이지로 이동하는 것을 확인할 수 있다.

 

 

입력창에 1을 입력하여 제출한다.

 

 

 

해당 페이지의 쿠키값은 처음 test 값을 입력했을 때 보다 훨씬 짧은 값임을 알 수 있다.

 

 

해당 쿠키값을 아까와 같은 순서로 디코딩을 해준다. (url -> base64)

 

userid 쿠키값 YzRjYTQyMzhhMGI5MjM4MjBkY2M1MDlhNmY3NTg0OWI%3D
url 디코딩 YzRjYTQyMzhhMGI5MjM4MjBkY2M1MDlhNmY3NTg0OWI=
base64 디코딩 c4ca4238a0b923820dcc509a6f75849b

 

base64 디코딩한 값이 32자리 문자열로 이루어진 것으로 보아 md5 해시 기법을 사용했다는 것을 알 수 있다.

(주로 32문자열은 md5 해시 기법을 사용한다.)

 

md5 디코딩 사이트를 이용하여 해당 값을 디코딩한다.

 

https://md5.web-max.ca/index.php#enter

 

MD5 hash decrypter / decoder: Reverse lookup MD5 hashes online with this tool

Tools to decode / decrypt / reverse lookup MD5 hashes This tool searches multiple MD5 rainbow tables for matches to a large number of MD5 hashes. MD5 is a hashing algorithm and therefore is technically not encryption, but hashes can be resolved and reverse

md5.web-max.ca

 

 

해당 쿠키값의 최종 디코딩 값이 1이 나오는 것이 확인되었다.

 

이 문제는 쿠키값에 "admin" 을 md5 -> base64 -> url 순으로 인코딩 한 값을 넣어주면 풀린다는 것을 알 수 있다.

 

"admin"을 총 3번에 걸쳐 인코딩하기 위해서 python 을 이용해 프로그램을 제작하였다.

 

import hashlib
import base64
from urllib import parse

id = 'admin'
hash = ''

for i in range(0, 5):
    plain = id[i]
    md5_encode = hashlib.md5(plain.encode()).hexdigest()
    hash += md5_encode

base64_encode = base64.b64encode(hash.encode()).decode()
url_encode = parse.quote(base64_encode)

print("최종 암호화된 쿠키값 : %s" % url_encode)

 

 

최종 암호화된 쿠키값
: MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE4Mjc3ZTA5MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFiODY1YzBjMGI0YWIwZTA2M2U1Y2FhMzM4N2MxYTg3NDE3YjhiOTY1YWQ0YmNhMGU0MWFiNTFkZTdiMzEzNjNhMQ%3D%3D

 

 

해당 코드를 통해 admin의 최종 암호화된 값을 구하여 userid 쿠키의 값을 수정해주면 해당 문제가 풀린다.