Gae Ko's Blog

los : goblin 본문

웹해킹 /[los] Lord of SQL

los : goblin

Gae Ko 2017. 8. 10. 00:50


힌트를 보지 않도록 노력해보기로 하였다.



[코드분석]


<?php 
  
include "./config.php"
  
login_chk(); 
  
dbconnect(); 

↑DB를 연결하기위한 코드


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

↑preg_match를 통해 입력값에 대해 싱글쿼터(') 더블쿼터(") 백쿼터(`)를 필터링


 $query "select id from prob_goblin where id='guest' and no={$_GET[no]}"
  echo 
"<hr>query : <strong>{$query}</strong><hr><br>"

↑실행쿼리 


$result = @mysql_fetch_array(mysql_query($query)); 
  if(
$result['id']) echo "<h2>Hello {$result[id]}</h2>"
  if(
$result['id'] == 'admin'solve("goblin");

↑문제의 포인트 



[내풀이]

포인트를 보면 id가 admin이면 문제가 풀린다고 한다.

하지만 $query "select id from prob_goblin where id='guest' and no={$_GET[no]}를 보면 id값의 guest는 변경할 수 없으므로 id='guest'라는 조건이 무조건 거짓이 되고 새로운 조건을 완성시켜줘야한다.


where id='guest' and no=2 


여기에 or id='admin' 을 덧붙여주면 id='guest' and no=2 이 거짓이 되고 id='admin'은 참이 되므로 solve될 수 있다.

(논리연산자의 연산순서에 따라 맨처음에 and가 나왔으므로 and기준 앞뒤 조건이 하나라도 거짓이면 통째로 거짓이 되어서, 뒤에 이어지는 조건을 보거나 뒤에 이어지는 논리 연산자가 없다면 결과가 거짓이 됨. 그런데 id='guest' 인데 guest의 no는 1이므로 and로 묶인 조건의 결과는 거짓이 된다.)


그런데 preg_match로 싱글쿼터를 필터링하므로 앞의 문제처럼 대놓고 싱글쿼터를 사용해 id값을 넣어줄 수 없다.

 싱글쿼터없이 문자열을 입력하는 법은 구글링해서 찾아보니 

싱글쿼터가 막혀서 문자열을 집어 넣을 수 없을 때는 0x, 0b를 사용해서 2진법, 16진법을 치환함으로써 대신할 수 있다고한다. 


만약 id='ad' 를 싱글쿼터없이 나타내기 위해서는 id=0x6164 처럼 나타낼 수 있다.

(a의 아스키코드는 0x61 그리고 d의 아스키코드는 0x64)


위 방법을 이용해서 id='admin'을 표현하면 id=0x61646d696e 이다.



URL에서는 

 


SUCCESS!!! 




[p.s]

처음부터 바로 성공한건 아니고 민지언니의 도움을 받아 논리연산자의 and 와 or 의 논리 연산 순서를 배우고 

처음엔 

이것처럼 no값에 아무거나 들어가면 되는 줄 알았는데 

guset의 no값이 1이라서 저러면 and로 묶인 조건이 참이 되서 or 뒤에 있는 조건을 무시해버린다. 

그래서 결과는 당연히 fail 되었다. ㅠㅠ 

 

그래서 no 값은 1이 아닌 숫자를 넣으면 된다 !


그리고 이 방법이 맞을 꺼라고는 예상을 못하고 틀려도 그냥 해보겠다는 마인드로 시도해본건데 

GOBLIN Clear! 라고 떠서 너무 신났다 !!! ㅎ.ㅎ 헤헤 



'웹해킹 > [los] Lord of SQL' 카테고리의 다른 글

los : darkelf  (0) 2017.08.12
los : wolfman  (0) 2017.08.12
los : orc  (0) 2017.08.12
los : cobolt  (0) 2017.08.09
los : gremlin  (0) 2017.08.09