[los] gremlin

HW·2024년 9월 25일

<문제>

<?php
  include "./config.php";
  login_chk();
  $db = dbconnect();
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); // do not try to attack another table, database!
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
  $query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'"; // 입력한 id와 pw로 SQL쿼리(입력한 id와 pw가 prob_gremlin 테이블에 존재하는지 확인) 생성
  echo "<hr>query : <strong>{$query}</strong><hr><br>"; // 생성된 쿼리 출력
  $result = @mysqli_fetch_array(mysqli_query($db,$query)); // 쿼리를 실행하고 $result 변수에 쿼리 실행 결과를 배열 형태로 저장
  if($result['id']) solve("gremlin"); // $result에 id가 존재한다면(입력한 id와 pw가 데이터베이스에 존재하고 일치하면) 문제 해결한 것
  highlight_file(__FILE__);
?>

종합해본 결과 URL의 쿼리 문자열에 SQLi 기본 페이로드인 id=1&' OR '1'='1 입력해보자.


Clear!

0개의 댓글