본문 바로가기
webhacking.kr

[webhacking.kr] old - 26 풀이

by jwcs 2023. 6. 27.
728x90

https://webhacking.kr/challenge/web-11/

 

Challenge 26

 

webhacking.kr

초기 화면이다. 소스를 보러 가자

 

전체 코드다. 잡다한 것들을 거르고 필요한 부분만 잘라서 다시 보겠다.

 

해석해보겠다.

preg_match()는 php 함수이다. 

https://www.php.net/manual/en/function.preg-match.php

 

PHP: preg_match - Manual

This is a function that uses regular expressions to match against the various VAT formats required across the EU. <!--?php function checkVatNumber( $country, $vat_number ) {     switch($country) {         case 'Austria':             $regex = '/

www.php.net

이에 관한 사용법이다.

간략히 소개하자면

첫 번째 인수 = 매치할 정규표현식

두 번째 인수 = 매치 대상 문자열

매치가 되면 1을 반환, 매치가 안되면 0을 반환한다.

이렇게만 정리하고 넘어가겠다.

 

위의 코드에서 get메소드로 받은 id의 값에 admin이 들어있으면 no!를 반환하고 종료한다.

확인해보자.

 

확인 완료. 계속 읽어보자.

 

만약 id의 값이 매치되지 않았다면 id의 값을 url decode시킨다.

디코딩한 값이 admin일 경우 문제가 풀린다.

 

그렇다면 url 인코딩된 값이 id로 전달된다면 admin에 필터링되지도 않으면서 문제를 풀 수 있을것 같다.

 

url인코딩된 값을 넣어보자

 

기대와는 다르게 no!가 출력된다. 왜 그럴까?

 

웹서버와 브라우저 사이에서 데이터를 교환할때 브라우저는 form에서 입력받은 데이터를 자동으로 인코딩한 값으로 보내고 php 는 자동으로 디코딩 하기 때문이다

 

따라서 한번 더 인코딩된 값을 넣어주자. %61에서 %를 인코딩하면 %25가 된다.a를 2번 인코딩한 값은 %2561이다.admin = %2561%2564%256d%2569%256e

 

참고로 대문자 admin으로 하면 제대로된 값이 안나오니 꼭 소문자 아스키코드로 해줘야한다.

 

짜자잔

 

요약)

-웹서버와 브라우저 사이에서 데이터를 교환할때 브라우저는 form에서 입력받은 데이터를 자동으로 인코딩한 값으로 보내고 php는 자동으로 디코딩한다. 해당 문제에서는 form이 아닌 url을 이용해서 값을 넣었기 때문에 직접 인코딩을 한번 더 해서 풀어야했다.

728x90
반응형

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

[Webhacking.kr] old - 24 풀이  (0) 2023.08.03
[webhacking.kr] old - 61 풀이  (0) 2023.07.20
[Webhacking.kr] old - 39 풀이  (0) 2023.07.14
[webhacking.kr] Challenge 16 풀이  (0) 2023.07.14
[webhacking.kr] old-15 풀이  (0) 2023.06.27