'웹해킹 19'에 해당되는 글 1건

  1. 2015.10.15 webhacking 19번 문제

webhacking 19번 문제

Webhacking 2015. 10. 15. 16:36

안녕하세요. 오늘은 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 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
,