본문 바로가기
Wargame/webhacking.kr

webhacking.kr 5번

by morae23 2019. 1. 29.

5번 문제를 열면 아래와 같이 Login과 Join 버튼을 볼 수 있다.

 

 



 

 

그런데 Join 버튼을 누르면 Access_Denied라는 메시지가 나온다.

 

 



 

 

Login을 누를 경우,

http://webhacking.kr/challenge/web/web-05/mem/login.php

로 이동되는 것을 볼 수 있는데, 기존 index.php에서 mem이라는 디렉토리가 경로에 추가된 것을 볼 수 있다.

 


 




 

 

이에 mem/index.php에 접근해보니 아래와 같이 /hint를 통해 join.php에 접근할 수 있게 되었다.

 

 





 

 

join.php의 코드를 보면 아래와 같이 난독화가 적용되어 있다.

 

 



 

 

그리 복잡하지 않아서 손으로도 풀 수는 있지만, 크롬 개발자 도구의 콘솔을 이용하여 몇몇 문자열을 복호화해 보니 oldzombie라는 문자열과 document.cookie라는 문자열을 볼 수 있었다.

 

 





 

 

쿠키 값 등 일정한 조건을 만족하여야 join 페이지를 볼 수 있다는 것을 알게 된다.

 

물론 이 조건들을 맞추어 줄 수도 있지만, 코드의 아래 부분을 보면 if 문을 기준으로 access_denied라는 메시지를 띄우거나, 페이지에 input 창 등을 띄워주는 것으로 나뉘는 것이 보인다.

 

따라서 해당 조건을 맞추지 않고, 다시 콘솔을 이용하여 else 문 안에 있는 코드를 실행해 주면 아래와 같은 join 창을 볼 수 있다.

 

 



 

 

id에 admin을 입력하여 join 하면, 이미 admin이 존재한다는 메시지가 나온다.

 

 



 

 

그런데 이 때, id의 maxlength가 5인 것을 이용하면 admin으로 새로 가입할 수 있을 듯하다. Join에서 입력할 때에 5자 이상 입력하여 id 중복 검사를 피하기만 하면, 실제 db에는 5자만 입력되어 login 시에는 admin으로 로그인 가능하게 하려는 것이다.

 


 



 

 

따라서 위에서 join 화면을 보이게 하기 위해 실행했던 코드에서 id의 maxlength 부분을 6으로 수정하여 실행한다.

 

 



 

그 뒤, id에 admin과 마지막에 공백을 더하여 join 한다.

Join과 login 모두 성공적으로 되어 clear할 수 있다.

 

 



 

 

 



 

 

 



'Wargame > webhacking.kr' 카테고리의 다른 글

webhacking.kr 34번  (0) 2019.01.29
webhacking.kr 22번  (0) 2019.01.29
webhacking.kr 46번  (0) 2019.01.29
webhacking.kr 21번  (0) 2019.01.29
webhacking.kr 10번  (0) 2019.01.29

댓글