문제 페이지는 해당 페이지와 같다.
해당 페이지에는 admin이 입력되어 있는 입력창이 존재한다.
제출 버튼을 클릭하면 you are not admin 이라는 문구가 뜨는 것을 확인 할 수 있다.
메인 페이지로 이동하여 입력창에 임의로 test 라고 입력하여 제출한다.
hello test라는 문구와 logout 버튼이 있는 페이지로 이동하는데 logout 버튼을 눌러도 페이지에는 변화가 없으며, 메인페이지로 이동하려고 뒤로 가기를 눌러도 계속 해당페이지가 유지된다.
그래서 먼저 이 페이지를 분석하였다.
해당 페이지의 소스코드를 보아도 뚜렷한 단서는 보이지 않아서 쿠키값을 확인해 보았다.
userid 라는 쿠키가 존재했는데 해당 쿠키값은 입력한 id 값과 관계가 있어보인다.
해당 쿠키값을 확인해 보니 맨 뒤에 %3D 가 있는 걸로 보아 URL 인코딩이 된 값이라는 것을 알 수 있다.
해당 쿠키값을 URL 디코딩 사이트를 이용하여 디코딩한다.
https://www.convertstring.com/ko/EncodeDecode/UrlDecode
URL 디코딩 한 결과 |
ZTM1OGVmYTQ4OWY1ODA2MmYxMGRkNzMxNmI2NTY0OWVlMTY3MTc5N2M1MmUxNWY3NjMzODBiNDVlODQxZWMzMjAzYzdjMGFjZTM5NWQ4MDE4MmRiMDdhZTJjMzBmMDM0ZTM1OGVmYTQ4OWY1ODA2MmYxMGRkNzMxNmI2NTY0OWU= |
이 값의 맨 뒷 부분에 = 가 있는 걸로 보아 해당 값은 base64로 인코딩된 값이다.
해당 값을 base64 디코딩 사이트를 이용하여 디코딩한다.
https://www.convertstring.com/ko/EncodeDecode/Base64Decode
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
해당 쿠키값의 최종 디코딩 값이 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 쿠키의 값을 수정해주면 해당 문제가 풀린다.
'프로젝트 > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Challenge(old) 24번 문제 (0) | 2021.07.08 |
---|---|
[Webhacking.kr] Challenge(old) 20번 문제 (0) | 2021.07.07 |
[Webhacking.kr] Challenge(old) 18번 문제 (0) | 2021.07.06 |
[Webhacking.kr] Challenge(old) 17번 문제 (0) | 2021.07.06 |
[Webhacking.kr] Challenge(old) 12번 문제 (0) | 2021.07.06 |