26번 문제를 접속하면 아래와 같이 index.phps를 통해 php의 소스를 확인 할 수 있다는 것을 알려준다.



php 소스코드를 확인해보면 상당히 간단하다.



GET 메소드를 통해서 id 파라미터를 받고 urldecode를 진행한 상태에서 id가 admin이면 문제가 풀린다.


하지만 admin이라는 단어를 정규식으로 검사하기 때문에 urldecode를 이용해야한다.


즉 admin이라는 단어를 urlencode 하여 id 파라미터의 값으로 보내주면 문제가 풀릴 것 같다.


urlencode는 16진수로 표현하여 %를 붙여주는 것과 같다.



admin은 61646d696e 이므로 urlencode 한 것은 %61%64%6d%69%6e가 될 것이다.


아래와 같이 id로 넘겨주면 문제가 풀리게 된다.


이상하다. 안풀린다!



분명 urlencode하여 정답을 보냈는데 요청하고 나면 아래와 같이 admin으로 요청한 것과 같아진다.



이유는 서버의 php로 전달하기전에 브라우저 단에서 미리 urldecode를 처리한 값을 보내기 때문이다.


그렇다면 어떻게 해야할까?



브라우저의 urldecode, 서버의 php에서 urldecode 총 2번 하기 때문에 우리도 2번 urlencode해서 보내주면 된다.


결론적으로는  %61%64%6d%69%6e에서 각각의 %만 urlencode 해서 보내주면 된다.

(영어는 브라우저단에서 어짜피 urldecode 해주니깐 하나마나 똑같다)


따라서 %2561%2564%256d%2569%256e 값을 보내주면 문제를 풀 수 있다.

(%는 hex값으로 0x25이다)



끝!



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

webhacking.kr 28번  (0) 2016.11.21
webhacking.kr 27번  (0) 2016.11.21
webhacking.kr 26번  (0) 2016.11.20
webhacking.kr 25번  (0) 2016.11.20
webhacking.kr 24번  (0) 2016.11.19
webhacking.kr 23번  (0) 2016.11.19

+ Recent posts