[WARGAME][los] goblin

jckim22·2022년 11월 22일
0

[WEBHACKING] STUDY (WARGAME)

목록 보기
95/114

아래는 서버 코드이다.


<?php 
  include "./config.php"; 
  login_chk(); 
  $db = dbconnect(); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~"); 
  if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~"); 
  $query = "select id from prob_goblin where id='guest' and no={$_GET[no]}"; 
  echo "<hr>query : <strong>{$query}</strong><hr><br>"; 
  $result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if($result['id']) echo "<h2>Hello {$result[id]}</h2>"; 
  if($result['id'] == 'admin') solve("goblin");
  highlight_file(__FILE__); 
?>

코드를 보아 하니 쿼터를 필터링하는 것 같다.

아래에 문자들을 필터링 한다.



지금껏 쿼터들을 필터링 했던 문제들을 생각하면 전부 괄호로 쿼터를 우회했던 것 같다.
이번 문제에서는 친절하게도 no=에 ''가 없다.

일단 admin의 no는 안알려준다.
그래서 no = 1로 guest가 맞는지 확인한다.

아래처럼 맞았고 아마도 admin의 no는 2가 아닐까 추측한다.

코드에 직접 대입해보면서 익스플로잇을 짜면 아래와 같다.
guest이면서 no가 3인것은 결과가 없고 ||로 or연산을 하여 no가 2와 같은 것을 갖고 오는 쿼리로 인젝션한다.

아래처럼 get 파라미터로 입력하고 요청을 보내면

성공할 수 있다.

profile
개발/보안

0개의 댓글