web_security/Lord Of SQL

[LOS : Lord Of SQL Injection] 7번 orge 문제 풀이

HawordFREAKEK 2022. 6. 4. 15:36

네 안녕하세요. Godhaword 입니다.

기본기 문제가 여러개 있어서 링크 걸어두고 날먹하네요. 하지만 그 만큼 기본기가 중요하다는 것이기에 아직 안 보신 분들은 다시 읽어보고 오시기 바랍니다.

<?php 
  include "./config.php"; 
  login_chk(); 
  $db = dbconnect(); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
  if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 
  $query = "select id from prob_orge where id='guest' and pw='{$_GET[pw]}'"; 
  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>"; 
   
  $_GET[pw] = addslashes($_GET[pw]); 
  $query = "select pw from prob_orge where id='admin' and pw='{$_GET[pw]}'"; 
  $result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orge"); 
  highlight_file(__FILE__); 
?>

복잡해보이는 코드가 있네요.

if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orge");

를 보면 Blind SQL Injection으로 문제를 푸는 것 같네요. 전에 4번 orc문제를 풀면서 만들어놨던 코드가 있기에 재활용 할 예정입니다.

하지만 4번 문제와는 다르게

if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe");

or 과 and가 필터링 되어 있는 것을 보실 수 있습니다.

 

진짜 orc문제에서 or, and만 ||, &&로 바꿔주었는데 flag가 나온 모습을 볼 수 있습니다.

 

 

 

  • 이 문제로 알 수 있는 점
    - 기본기만 좋아도 CTF나 Wargame의 상당부분은 풀 수 있다.
  • Key Point
    - or = || , and = &&