A ship in harbor is safe, but that is not what ships are built for.

STUDY/WEB_Hacking

Webhacking.kr 18번 문제(old)

플리피나리 2019. 12. 3. 10:32
반응형

문제를 확인해보자.

 

그냥 대놓고 sql injection 문제라고 적혀있다. 소스코드를 확인해봤다.

 

흠... 다 필요없고 이 부분만 확인해보면 될 것 같다.

 

<?php
if($_GET['no']){         //no 값을 get방식으로 받았을 떄 
  
$db dbconnect();      //db를 연결시켜
  if(
preg_match("/ |\/|\(|\)|\||&|select|from|0x/i",$_GET['no'])) exit("no hack");

  //$_GET['no'] 값을 필터링한다. 해당 문자들이 존재하면 'no hack'과 함께 코드종료
  
$result mysqli_fetch_array(mysqli_query($db,"select id from chall18 where id='guest' and no=$_GET[no]")); // admin's no = 2
  //chall18 테이블에서 id가 'guest'이고 no가 입력받은 값인 id를 선택해 배열 추출 후 result에 저장
  
if($result['id']=="guest") echo "hi guest"; //id가 'guest'이면 "hi guest" 출력
  if(
$result['id']=="admin"){ //id가 'admin'이면 
    
solve(18);
    echo 
"hi admin!"//"hi admin" 문자열과 함께 문제 해결
  }
}
?>

 

  • get 방식 : 폼으로 부터 넘어오는 값을 저장하는 방식으로 입력데이터를 url 정보에 붙여서 전송한다. 여러모로 보안이 취약하며 데이터 길이는 256바이트를 넘을 수 없다. 전송속도가 빠르다.
  • <form method=get action=index.php>  --> 폼이 get 방식이며 폼의 값이 넘어가면 index.php이 실행된다.
  • preg_match( ) : 패턴과 매치되는 문자열을 찾았을 때 1반환, 찾시 못했을 때는 0반환
  • mysql_fetch_array( resource $result [, int $result_type] ) : 인출된 행을 배열로 반환하고, 앞으로 내부 데이터 포인터를 이동한다.
  • mysql_query( string $query [, resource $link_identifier]) : link_identifier로 지정한 데이터베이스 서버에 하나의 쿼리를 전송한다.

 

문제에서 admin의 no가 2라고 알려줬다ㅋㅋㅋㅋㅋㅋ 결국 우리는 id가 admin이고 no가 2인 result를 추출하면 되는 것!

하지만 이미 where 조건에 id가 guest라는 조건이 있기 때문에 아무리 admin의 no값을 입력해도 우리는 admin을 추출할 수 없다. 따라서 우리는 다음 방법으로 접근하려 한다.

 

TRUE and TRUE => TRUE

TRUE and FALSE => FALSE

FALSE or TRUE => TRUE

(TRUE and FALSE) or TRUE => TRUE

 

앞의 있는 조건을 거짓고 or 조건으로 뒤에 내가 원하는 조건을 달아 앞의 조건고 상관없이 내가 원하는 조건이 성립되게 하는 것이다.

 

where id='guest' and no=-1 or no=2

 

위와 같은 조건은 앞의 and 조건이 거짓으로 뒤에 있는 or 조건 참으로 no=2의 값을 검색하도록 한다.

좋아라 하고 입력하니

 

두둥! 안된다.... 위에 있던 문자 필터링을 확인하지 않은 것이다. 그렇다면 필터링을 우회하도록 입력해보자.

코드에서 해당 입력은 get방식으로 받아온다고 적혀있다. 따라서 우리는 이 입력을 url창에 입력해도 상관이 없을 것이므로 url 코드를 이용해 스페이스를 표현해보자.

 

스페이스는 url코드로 %09이다. 따라서 url창에 다음과 같이 입력했다.

결과는 

 

문제가 해결되었음을 확인할 수 있다.

반응형

'STUDY > WEB_Hacking' 카테고리의 다른 글

Webhacking.kr 26번 문제(old)  (0) 2019.12.18
Webhacking.kr 24번 문제(old)  (1) 2019.12.17
Webhacking.kr 17번 문제(old)  (0) 2019.11.30
Webhacking.kr 14번 문제(old)  (0) 2019.11.29
Webhacking.kr 6번 문제(old)  (0) 2019.11.27