안녕하세요. 오늘은 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를 눌러줍시다.
네 이것으로 문제풀이를 마치겠습니다.
'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 |