[LOS] cobolt

덩덩..·2024년 9월 19일

Lord of SQL Injection

목록 보기
2/6
post-thumbnail

첫화면

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

이전 문제와 비슷한 구성을 보인다.
preg_match로 필터링을 한다.
db에서 입력값이 같은지 확인해 쿼리문에 저장한다.

쿼리문과 db를 인자로 받아 배열로 result에 저장하고 이 result의 id 값이 'admin'일 때 해당 문제를 해결할 수 있다.

아까와 다르게 id가 꼭 admin이어야 한다. 따라서 id가 admin이고 나머지는 다 주석처리를 하면된다.

?id=admin'%23
으로 공격할 수 있다.

0개의 댓글