'webhacking.kr 19번'에 해당되는 글 1건

  1. 2015.10.15 webhacking 19번 문제

안녕하세요. 오늘은 webhacking 19번 문제를 풀어보겠습니다.

홈페이지로 들어가 webhacking 19번을 눌러주세요..

흠 소스를 한 번 봅시다.

??? 소스가 없습니다. 아니 정확하게는 공개가 되있지 않네요. 일단 소스창을 닫읍시다.

문제를 보시면 제출칸에 admin이라고 미리 적혀있는 것을 볼 수 있습니다.

한번 제출 해 봅시다.

당신은 admin이 아니라는군요. 이번엔 다른 값을 넣어 봅시다.

1이란 값을 넣으니 hello 1이라는 값이 나오는군요. logout이란 버튼이 있는걸로 보아 1로 로그인이 된 것 같습니다. 다른 값을 넣어봅시다.

b도 되는군요. 아무래도 admin을 제외한 모든 값은 다 로그인이 되는 것 같습니다.

그런데 말입니다. 위의 사진을 보시면 1로 로그인이 되었음에도 불구하고 주소값은 바뀌지 않았습니다. 주소값이 바뀌지 않았는데 창이 바뀌었다?? 있을 수 없는 일이죠.

즉 주소값 외의 다른값이 바뀌어서 로그인 페이지로 이동되었다. 라는 사실이 나옵니다.

주소값 외의 다른 값이라고 하면 일단 쿠키값을 생각할 수 있겠네요. 쿠키값을 확인해 봅시다.

PHP에서 세션아이디를 발급하는 키값인 PHPSESSID와 userid쿠키가 있네요.

PHPSESSID는 기본으로 있으니 상관없습니다만 userid는 기본으로 있는 것이 아닌 함수나 소스에 의해 생성된 임의의 쿠키입니다.

값이 뭐라뭐라 나와있네요. 그런데 이 값의 끝부분을 보시면 %3D라고 되어 있습니다.

%3D는 =를 URL인코딩한 값이지요. 결국 이 값은 맨 마지막에 =가 있으므로 base64로 인코딩한 값이라고 볼 수 있습니다. 한번 확인해 봅시다.

YzRjYTQyMzhhMGI5MjM4MjBkY2M1MDlhNmY3NTg0OWI=를 base64로 디코딩을 하시면

c4ca4238a0b923820dcc509a6f75849b 라는 값이 나옵니다. 

더이상 base64로 디코딩이 되지 않는군요. 우리가 로그인한 값은 1인데 너무 다른 값이 나왔습니다. 아무래도 다른 프로그램으로 인코딩을 더 한 것 같군요.

그러면 어떤 프로그램을 써서 인코딩을 했을까요? 

base64로 디코딩한 값을 보시면 총 32글자가 나옵니다. sha1은 40글자이므로 sha1은 아닙니다. 그러면 무슨 프로그램을 써야 32글자가 나올까요? 바로 md5입니다. 

이 값은 md5로 인코딩한 값이라고 볼 수 있습니다. md5로 디코딩을 해 봅시다.

1이란 값을 찾았다는 군요. 호오. 소스는 파악했습니다. 그럼 정리해봅시다.

1. 우리는 admin으로 로그인을 해야 한다.

2. id에 admin이란 값이 들어오면 not admin으로 이동된다.

3. id에 넣은 값은  md5인코딩 - base64인코딩 후 userid라는 쿠키값에 저장된다.

즉 우리는 userid라는 쿠키값에 admin - md5인코딩 - base64인코딩 한 값을 넣어 굳이 id칸에 입력하지 않아도 admin의 로그인화면으로 이동할 수 있다는 것을 알 수 있습니다.

admin을 md5인코딩 합니다.

21232f297a57a5a743894a0e4a801fc3 

md5인코딩한 값을 base64로 인코딩 합니다.

MjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzM=

쿠키값에 넣어줍시다.

확인 후 F5를 누르면~

error가 뜨네요................

흠... 왜 error가 뜰까요. 혹시 단일문자가 아닌 문자열로 인코딩을 하는 과정에서 잘못 인코딩이 된 것일까요? 확인을 위해 12를 넣어보겠습니다.

뭐가 많이 뜨네요. %3D를 =로 바꾼 후 base64인코딩 해봅시다.

c4ca4238a0b923820dcc509a6f75849bc81e728d9d4c2f636f067f89cc14862c 가 뜨네요.

이중 c4ca4238a0b923820dcc509a6f75849b는 1의 md5인코딩 값이네요. 나누어 봅시다.

c4ca4238a0b923820dcc509a6f75849b

c81e728d9d4c2f636f067f89cc14862c    

둘다 32글자인것으로 보아 뒤쪽의 문구는 2의 인코딩 값이라는 것을 짐작하실 수 있습니다.

즉 1을 인코딩한 값과 2를 인코딩한 값을 합친 것을 base64로 인코딩 했네요.

그렇다면 우리는 a d m i n 각각 인코딩을 하여 합쳐야 합니다. 그런데.. 솔직히 이렇게 하면 귀찮잖아요. 꼼수를 써봅시다.

id에 admi를 쳐주고 제출을 합시다. admin이 아니므로 아마 로그인이 될 것입니다.

예상대로 로그인이 되었고 쿠키값을 확인할 수 있습니다.

여기에 n값만 추가로 넣어주면 되겠군요.

일단 이 값을 base64디코딩 합니다.

0cc175b9c0f1b6a831c399e2697726618277e0910d750195b448797616e091ad6f8f57715090da2632453988d9a1501b865c0c0b4ab0e063e5caa3387c1a8741 가 나오네요.

여기에 n을 md5인코딩한 값을 더해줍시다.

7b8b965ad4bca0e41ab51de7b31363a1 이네요. 더해줍시다.

0cc175b9c0f1b6a831c399e2697726618277e0910d750195b448797616e091ad6f8f57715090da2632453988d9a1501b865c0c0b4ab0e063e5caa3387c1a87417b8b965ad4bca0e41ab51de7b31363a1 

자 이제 이것을 base64인코딩을 합시다.

MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE4Mjc3ZTA5MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFiODY1YzBjMGI0YWIwZTA2M2U1Y2FhMzM4N2MxYTg3NDE3YjhiOTY1YWQ0YmNhMGU0MWFiNTFkZTdiMzEzNjNhMSA=

이값을 쿠기값에 넣어줍시다.

설정 후 확인을 위해 F5를 눌러줍시다.

네 이것으로 문제풀이를 마치겠습니다.




[출처] PHPSESSID|작성자 scBrain


'Webhacking' 카테고리의 다른 글

webhacking 25번 문제  (0) 2015.10.15
webhacking 19번 문제  (0) 2015.10.15
webhacking 16번 문제  (0) 2015.10.13
webhacking 14번 문제  (0) 2015.10.13
webhacking 4번 문제  (0) 2015.10.13
webhacking 6번 문제  (0) 2015.10.12
Posted by englishmath