[LOS] vampire

Yennytime·2023년 1월 13일
0

Lord of SQL Injection

목록 보기
6/20
post-thumbnail

<?php 
  include "./config.php"; 
  login_chk(); 
  $db = dbconnect(); 
  if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~");
  $_GET[id] = strtolower($_GET[id]);
  $_GET[id] = str_replace("admin","",$_GET[id]); 
  $query = "select id from prob_vampire where id='{$_GET[id]}'"; 
  echo "<hr>query : <strong>{$query}</strong><hr><br>"; 
  $result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if($result['id'] == 'admin') solve("vampire"); 
  highlight_file(__FILE__); 
?>

🔺 코드 분석

  1. if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~");
    GET방식으로 pw를 받으며, pw에 특수문자 작은 따옴표 (')/i 대소문자가 구분 되지 않으면 필터링되서 No Hack ~_~ 이 출력된다.

  2. $_GET[id] = strtolower($_GET[id]);
    대문자를 소문자로 바꾸어 준다.

  3. $_GET[id] = str_replace("admin","",$_GET[id]);
    str_replace(찾을 문자, 변경하려는 문자, replace할 대상)
    str_replace("admin","공백",$_GET[id])
    -> $_GET[id]에서 admin 문자를 찾은 후 공백으로 replace

  4. $query = "select id from prob_vampire where id='{$_GET[id]}'";
    id=$_GET[id]이며

  5. if($result['id'] == 'admin') solve("vampire");
    만약 id=admin이면 성공적으로 출력


🔺 풀이 과정

  1. id=adadminmin

str_replace에서 admin을 공백으로 바꾸기 때문에 adadminmin을 입력해주었다.

profile
It's Yennytime💙

0개의 댓글