1. 고블린 문제 풀이

 

<고블린>

 

자, 이제 3번째 고블린이다.

 

 

 

고블린의 문제는 위와 같다.

 

if(preg_match('/prob|_|\.|\(\)/i'$_GET[no])) exit("No Hack ~_~"); 
if(
preg_match('/\'|\"|\`/i'$_GET[no])) exit("No Quotes ~_~"); 

이전문제들와 같이 [prob|_|.|\] 를 사용하는 쿼리문에 대해 필터링을하고,(문제 이외의 데이터베이스에 대한 접근을 막기 위해)

이번에 새롭게 나온 필터링이 있다. [ ' | " | ` ] 이러한 Quotes(따옴표) 문자들을 필터링한다.

그리고 쿼리문은

 

$query "select id from prob_goblin where id='guest' and no={$_GET[no]}";

 

위와 같이 id는 'guest'로 잡혀있고, 우리가 입력할 수 있는 변수는 no이다.

그리고 이 문제의 해결 조건은 id가 admin이 되어야 한다.

 

자, 일단 우리가 입력해야하는 id는 guest가 아니라 admin이므로 이전에 이용했던 방법들을 이용하여 id='guest' 부분을 무력화시키자.

 

no 변수에 1을 넣은 결과이다.

Hello guest라는 문장이 뜬것으로 봐서 guest의 no는 1이라는 것을 알 수 있다.

이렇게 되면 id='guest'를 무력화 시킨다는 의도는 실패한 것이다.

그럼 no에 1이 아닌 다른 값을 넣어야한다.

지금은 운이 좋아서 guest의 no가 1이라는 걸 알아서 1이 아닌 값을 집어넣으면 id='guest' and no={$_GET[no]} 부분을 무력화 시킬 수 있겠지만,

guest의 no가 1이라는걸 모르는 상태에서 쿼리문을 확실히 무력화시키기 위해서는 의미없는 값을 집어넣는게 좋다.

예를들어 no에 32948239라는 값을 집어넣으면, 그 데이터베이스에 no가 32948239라는 번호를 가지고 있을 확률이 얼마나 될까.. 거의 없을 것이다.

 

no에 임의의 값을 집어넣으니 Hello guest라는 말이 사라졌다.

id='guest' and no={$_GET[no]}"의 조건이 올바르지 않다는 것을 알 수 있다.

 

자, 이제 id에 admin을 넣어 문제를 해결해 보자.

 

id = admin을 입력해보았다.

참고로 이 문제에서는 따옴표에 필터링이 걸려있기 때문에 'admin'이 아니라 그냥 admin을 써보았다.

그랬더니 해결이 되지 않는다.

아마 'admin'은 문자열 스트링으로 받아들이는데 그냥 admin으로 쓰게되면 문자열이 아닌 변수명으로 인식해서 그러는 것 같다.

만약 따옴표를 사용한다면?


문제의 6번째 줄(따옴표 필터링)에 의해 위와 같은 글이 나오게된다.


이제 따옴표 필터링을 우회해보자.

일반적으로 어떠한 문자가 막혔을때 URL인코딩을 사용하여 우회한다.

예를들어 2번문제에서 사용한 #(주석처리)를 우회하기 위해서 %23이라는 URL 인코딩 값을 사용하였다.

이와같이 '를 URL 인코딩을하면 %27이다.

%27을 사용해서 입력해보자.



이렇게 입력을 하게되면?


결과는 같다... %27도 내부적으로 필터링이 되어있는 듯 하다.


다음방법은 admin이라는 문자를 hex(16진수) 값으로 입력하는 것이다.

이 방법은 스트링 우회법인데 내가 원하는 문자열이 필터링되었을 경우 사용하는 법이다.

데이터베이스마다 다를 수 있겠지만 0xXXXXXX 라는 값(헥사값)이 입력이 되면 '스트링'으로 인식을 하게 된다.

자 admin을 16진수 값으로 바꾸게되면 "0x61646d696e"이다. 이를 이용하여 입력해보자.




해결이 된 것을 볼 수 있다.

우리가 0x61646d696e에 따옴표를 붙이지 않았지만, 이 헥사값 자체를 변수로 인정하지 않고 문자열로 받아들이기 때문에 문제가 해결 된 것이다.


문제 하나하나 풀면서 필터링들을 어떻게 우회해야하는지 점점 알아가는 기분이다.


--------------------------------------------------------------------------------------------------------------------------------------------------

본 게시물은 공부한 내용을 바탕으로 작성한 글로써, 점차 수정 및 추가를 통해 내용을 발전시킬 계획입니다.

따라서 오타 및 내용상의 오류, 추가할 내용 등이 있을 경우 주저 없이 알려주시면 감사하겠습니다.

궁금한점을 물어보시면 제가 아는 선에서 최대한으로 알려드리겠습니다.



'Wargame & CTF. > LOS(The Lord Of the SQL)' 카테고리의 다른 글

[LOS] 4. Orc 문제 풀이  (3) 2017.01.06
[LOS] 2. Cobolt 문제 풀이  (0) 2016.11.09
[LOS] 1. Gremlin 문제 풀이  (2) 2016.11.03

+ Recent posts