반응형

 

admin이 default 값으로 지정되어 있고, 제출을 누르면 아래의 페이지로 이동한다.

 

id를 admin으로 제출했는데 admin이 아니라고 한다.

그리고는 화면이 다시 제출 페이지로 이동한다.

 

<html>
<head>
<title>Challenge 19</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }
input { background:silver; color:black; font-size:9pt; }
</style>
</head>
<body>
<form>
id : <input type=text name=id value='admin' maxlength=5 size=5>
<input type=submit>
</form>
</body>
</html>

소스코드는 별 볼게 없다.

 

그저 input 값을 받는 input 창 하나만 있다.

 

그리고 글자는 최대 5개 입력할 수 있다.


 

 

admin이 아닌 임의의 값으로 guest를 제출해보면

 

userid 쿠키에 값이 생긴다.

 

그리고 로그아웃을 누르면 로그아웃 되지 않고, userid 쿠키를 지워야 로그아웃 할 수 있다.

 

YjJmNWZmNDc0MzY2NzFiNmU1MzNkOGRjMzYxNDg0NWQ3Yjc3NGVmZmU0YTM0OWM2ZGQ4MmFkNGY0ZjIxZDM0Y2UxNjcxNzk3YzUyZTE1Zjc2MzM4MGI0NWU4NDFlYzMyMDNjN2MwYWNlMzk1ZDgwMTgyZGIwN2FlMmMzMGYwMzRlMzU4ZWZhNDg5ZjU4MDYyZjEwZGQ3MzE2YjY1NjQ5ZQ%3D%3D

 

userid 쿠키에 설정된 값을 보면 마지막에 %3D가 있다

 

%3D을 URL 디코딩 하면 '=' 기호이고,  %3D%3D이므로 '=='을 의미하고 이는 base64 인코딩 되었음을 의미한다.

 

b2f5ff47436671b6e533d8dc3614845d7b774effe4a349c6dd82ad4f4f21d34ce1671797c52e15f763380b45e841ec3203c7c0ace395d80182db07ae2c30f034e358efa489f58062f10dd7316b65649e

 

js의 atob()를 이용해서 base64로 인코딩된 문자열을 디코드하면 위의 값이 나온다.

아직은 무슨의미의 값인지 모르겠다.

 

YjJmNWZmNDc0MzY2NzFiNmU1MzNkOGRjMzYxNDg0NWQ%3D

 

guest의 첫 글자 'g' 단일 문자를 넣고 userid 쿠키를 확인하면 위의 값이 들어있다.

 

맨 뒤에 %3D는 '=' 기호이다.

 

b2f5ff47436671b6e533d8dc3614845d

 

마지막에 '=' 기호가 있는 걸로 봐서 base64로 인코딩 된 값인 것 같고

 

base64 디코딩을 하면 위의 값이 나온다.

 

그러면 이전에 atob() 결과의 앞에서부터 32글자를 비교하면 값이 같다.

 

즉, 개발자 도구 > console에서의 atob() 결과의 앞 32글자는 'g' 문자를 의미한다.

 

atob()의 결과를 32글자씩 나누면 아래의 값이다.

 

b2f5ff47436671b6e533d8dc3614845d (g)
7b774effe4a349c6dd82ad4f4f21d34c (u)
e1671797c52e15f763380b45e841ec32 (e)
03c7c0ace395d80182db07ae2c30f034 (s)
e358efa489f58062f10dd7316b65649e (t)

위의 값을 보면 각각 'g', 'u', 'e', 's', 't' 문자 하나하나를 MD5 해시 생성했을 때 값이다.

 

MD5는 평문의 길이에 상관없이 32글자의 암호 해시가 나오는게 특징이다.

 

 

그렇다면 아래와 같은 결론이 나온다.

 

어떠한 값을 제출하면 해당 값을 MD5로 암호화하고 암호화한 값을 base64로 인코딩한 값이 userid에 들어간다.

 

해당 값을 atob()로 base64 디코딩하면 MD5 암호 해시 값이 나오고, 해당 값을 32글자씩 나누면 단일 문자의 MD5 값이 된다.

'g' -> [MD5 해시 생성] -> "b2f5ff47436671b6e533d8dc3614845d" -> base64 encoding -> value == userid_value

 

이 문제는 admin으로 제출해야 한다.

 

그렇다면 'a', 'd', 'm', 'i', 'n' 각 문자를 MD5 암호 해시 생성 작업을 거치면 아래와 같이 나온다.

 

0cc175b9c0f1b6a831c399e269772661 a
8277e0910d750195b448797616e091ad d
6f8f57715090da2632453988d9a1501b m
865c0c0b4ab0e063e5caa3387c1a8741 i
7b8b965ad4bca0e41ab51de7b31363a1 n
0cc175b9c0f1b6a831c399e2697726618277e0910d750195b448797616e091ad6f8f57715090da2632453988d9a1501b865c0c0b4ab0e063e5caa3387c1a87417b8b965ad4bca0e41ab51de7b31363a1 n

 

위의 MD5 문자열들을 모두 합쳐 base64 인코딩 한 뒤 userid 쿠키에 값으로 설정한 뒤 새로고침 하면 문제가 풀린다.

 

MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE4Mjc3ZTA5MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFiODY1YzBjMGI0YWIwZTA2M2U1Y2FhMzM4N2MxYTg3NDE3YjhiOTY1YWQ0YmNhMGU0MWFiNTFkZTdiMzEzNjNhMSBuCg==
반응형

'전쟁 > Webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] old-26  (0) 2022.07.13
[webhacking.kr] old-4  (0) 2022.07.11
[webhacking.kr] old-6  (0) 2022.05.06
[webhacing.kr] old-12  (0) 2022.05.04
[webhacking.kr] old-11  (0) 2022.05.04

+ Recent posts