본문 바로가기

WarGame/webhacking.kr

[webhacking.kr] Challenge 19 :: Base64, MD5


▼ Challenge 19는 다음과 같습니다.




소스코드에도 특별한 것이 없어, 


"test"라고 입력하고 Paros를 이용해 패킷을 살펴 보니 


▼ 전송 과정에서 SetCookie를 통해 서버에서 쿠키를 받아와서 인증을 한다는 것을 알 수 있습니다.




"test"라고 입력하고 쿼리를 보냈을 때, Cookie의 userid의 값은 


ZTM1OGVmYTQ4OWY1ODA2MmYxMGRkNzMxNmI2NTY0OWVlMTY3MTc5N2M1MmUxNWY3NjMzOD

BiNDVlODQxZWMzMjAzYzdjMGFjZTM5NWQ4MDE4MmRiMDdhZTJjMzBmMDM0ZTM1OGVmYTQ4OW

Y1ODA2MmYxMGRkNzMxNmI2NTY0OWU%3D


입니다.




문제에 어느 정도 익숙해지신 분들이라면 한눈에 보고 Base64로 인코딩 된 값이라는 것을 알수 있겠죠?


Base64로 디코딩을 해보니 끝자리 값이 깨지더군요.


자세히 보니 "%3D"로 URL 인코딩 되어 있었습니다. %3D는 "="입니다.


다시 "%3D"를 "="으로 고치고, Base64 디코딩을 해 보니 


e358efa489f58062f10dd7316b65649ee1671797c52e15f763380b45e841ec3203c7c0ace395d

80182db07ae2c30f034e358efa489f58062f10dd7316b65649e


위와 같은 값이 나왔습니다.




▼ 자리 수를 알아볼까요?



128자리라면... 4로 나누었을 때, 4개씩 끊을 수 있습니다.


4개씩 끊으면 32자리.... 


32자리라면... MD5로 암호화된 값이라는 것을 알아 릴 수 있습니다.


자리 수에 관해서는 저번 문제에서 다루었으므로 04번 문제를 참고해주시기 바랍니다.



▼ 32자리씩 4개로 끊어서 MD5로 복호화 해보니, 원래 값인 "test"라는 값이 나왔습니다.


 e358efa489f58062f10dd7316b65649e

t

 e1671797c52e15f763380b45e841ec32

e

 03c7c0ace395d80182db07ae2c30f034

s

 e358efa489f58062f10dd7316b65649e 

t



즉, 암호화 과정은


1. 32바이트씩 MD5 암호화


2. Base64 인코딩


입니다.



이제 암호화 과정을 알았으니, "admin"이라는 단어를 위 과정 처럼 암호화하여


Cookie에 입력하여 인증하면 문제가 풀릴 것 같습니다.


▼ 우선 a, d, m, i, n을 각각 MD5로 암호화 합니다.


 a

0cc175b9c0f1b6a831c399e269772661 

 d

8277e0910d750195b448797616e091ad

 m

6f8f57715090da2632453988d9a1501b 

 i

865c0c0b4ab0e063e5caa3387c1a8741 

 n

7b8b965ad4bca0e41ab51de7b31363a1



▼ 이것을 합쳐서 Base64로 인코딩 합니다.


MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE4Mjc3ZTA5MTBkNzUwMTk1YjQ0ODc5NzYx

NmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFiODY1YzBjMGI0YWIwZTA2

M2U1Y2FhMzM4N2MxYTg3NDE3YjhiOTY1YWQ0YmNhMGU0MWFiNTFkZTdiMzEzNjNhMQ==;



이 값을 Cookie의 userid에 입력하면 Success!


( 마지막 == 는 %3D%3D로 바꾸어줘야 하는 것 잊으시면 안됩니다. )