[LOS] Level3: goblin

두비니

·

2019. 12. 31. 21:08

 

Lord OSQLInjection: lv.3 goblin

 

 

 

 

 

goblin입니다.

 

 

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

 

cobolt처럼 id가 admin이여야하고, no에는 싱글쿼리(작은따옴표)를 쓰지 못하는게 추가되었네요.

또 다른점이라면 no를 입력받지만 id를 admin으로 바꿔야합니다.

 

따라서 db에 전해지는 query의 조건문은 where id='guest' and no=(입력한값)이 되는데 일단 id가 guest가 되는걸 막아야하므로 no의 값을 guest의 no가 되지 않도록 해야합니다.

 

 

근데 뭐 딱 보면 1일때 쿼리가 출력되는것으로 봐서 no에 1만 대입을 안하면 되겠죠??

 

 

이상태에서 뒤에 id='admin' 만 넣어주면 되는데 preg_match에서 싱글쿼리도 필터링하기때문에 admin을 hex값으로 바꿔넣어줍시다. python의 encode함수나 구글링해서 바꾸기!

 

 

 

얍얍얍얍얍얍

'War Games > Lord of SQLInjection' 카테고리의 다른 글

[LOS] Level6: orge  (0) 2020.01.04
[LOS] Level5: wolfman  (0) 2020.01.03
[LOS] Level4: orc  (0) 2020.01.01
[LOS] Level2: cobolt  (0) 2019.12.31
[LOS] Level1: gremlin  (0) 2019.12.30