Jamm2 2023. 5. 20. 21:27

나의 답 : ?id=' or '1'=1 # (#는 url 인코딩이 안돼서 인코딩 표 보고 바꿔서 씀 23%로)

<?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]}'";
  echo "<hr>query : <strong>{$query}</strong><hr><br>";
  $result = @mysqli_fetch_array(mysqli_query($db,$query));
  if($result['id']) solve("gremlin");
  highlight_file(__FILE__);
?>

 

새로 알게된 점> preg_match : php에서 사용한느 정규표현식을 사용한 패턴매칭 함수! 맞으면 true 틀리면 false를 반

구조 : preg_match($pattern, $input, $matches, $flags, $offset)

  • $pattern : 문자열을 검사할 정규표현식 패턴
  • $input : 검사할 문자열
  • $matches : (선택 사항) 패턴에 일치하는 결과를 배열로 반환. 첫 번째 요소는 전체 문자열 중 일치하는 부분을 반환하고, 이후의 요소는 패턴에서 캡처한 그룹을 반환.
  • $flags : (선택 사항) 일치하는 방법을 제어하는 플래그. (대부분의 경우 기본값을 사용).
  • $offset : (선택 사항) 문자열에서 검색을 시작할 위치.