[WARGAME][los] succubus

jckim22·2022년 11월 26일
0

[WEBHACKING] STUDY (WARGAME)

목록 보기
108/114
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 ~_~");
  if(preg_match('/\'/',$_GET[id])) exit("HeHe");
  if(preg_match('/\'/',$_GET[pw])) exit("HeHe");
  $query = "select id from prob_succubus 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("succubus"); 
  highlight_file(__FILE__); 
?>

이번 문제는 쿼터가 필터링 되어 있고 쿼리에 쿼터가 있어서 쿼터를 우회해야하는 문제이다.
예전에 봤던 유형이라 보자마자 해답을 알 수 있었다.

획기적인 방법이라 기억에 더 남았던 것 같다.

select id from prob_succubus where id='\' and pw=' or 1=1 -- '

백슬래시를 사용하여 두번째 쿼터를 일반 문자로 인식하게하고 ' and pw가 pw의 첫번째 쿼에 의해서 id의 value의 문자열이 되게 하는 방식에 우회인 것이다.

이 방법은 전에 했던 삽질 중 하나였다.
하지만 이번 문제에서는 해답처럼 보였다.

그러게 되면 뒤에는 쿼타가 풀린 자유로운 sql 쿼리를 작성할 수 있는 환경이 되고 or 1=1 -- 를 해주게 되면 참으로 인식이 되어 result의 결과값이 나올 것이고 주석으로 뒤는 무효화 된다.

이번 문제는 result의 결과값만 존재 한다면 풀리는 문제이기 때문에 위처럼 넣어 주겠다.



profile
개발/보안

0개의 댓글