web_security/Lord Of SQL

[LOS : Lord Of SQL Injection] 8번 Troll 문제 풀이

HawordFREAKEK 2022. 6. 4. 15:48

네 안녕하세요. Godhaword 입니다.

8번까지 글을 쓰면서 가장 많이 한 이야기가 기본기 인데요. 4번 문제를 제외하곤 기본기만 있으면 넘어갈 수 있는 문제들 입니다.

기본기가 필요한 문제와 기술이 필요한 문제의 차이점은
기본기가 필요한 문제는 재미가 있고,
기술이 필요한 문제는 재미가 없다는 것 입니다.

"? 난 기술 들어가는 문제도 재밌던데?"

그런 분은 기술에 대한 이해와 기본기가 충실하신 분입니다. 축하드려요~

 

<?php  
  include "./config.php"; 
  login_chk(); 
  $db = dbconnect(); 
  if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~");
  if(preg_match("/admin/", $_GET[id])) exit("HeHe");
  $query = "select id from prob_troll 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("troll");
  highlight_file(__FILE__);
?>

id만 입력하면 되는 문제라 id에 admin을 넣고 싶은데 admin이 필터링 되어 있습니다.

"어? 이거 그냥 0x~~쓰면 되는거 아닌가"

라고 잠깐 생각하였으나, 구분자 안에서만 입력이 가능하여 해당 방법은 불가능 합니다. 그리고 싱글쿼터도 막혀있네요

 

어... 어렵게 생각하지 않으시고 글자중 하나만 대문자로 바꿔쓰면 됩니다.
PHP는 대소문자를 구별하지 않아 하나만 대문자로 넘겨줘도 다른 문자로 인식을 하는데 동일한 글자로 작동합니다.

대소문자를 따로 구별하지 않는 비슷한 함수로 str_replace와 str_ireplace, ereg와 iereg 등이 있습니다.
(i 가 붙은게 대소문자 모두 필터링 하는 함수입니다.)

 

  • 이번 문제로 알 수 있는 것
    - 대소문자를 구별 못하는 함수는 꽤 많다.
  • Key Point

str_replace와 str_ireplace 
ereg와 iereg