write-up/LOS write-up

LOS (Lord of SQL injection) 문제 8번 troll write-up

정보보호학과 새내기 2021. 7. 6. 17:45
반응형

문제 8번 - troll

 

query : select id from prob_troll where id=''

<?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__);
?>

 

이번에도 마찬가지로 php코드가 주어져있다.

 

먼저 필터링 함수를 확인해보면 pw를 받는 변수에 '와 admin을 필터링하고 i를 통해 대소문자를 구별하지 않는 것을 확인할 수 있다.

<?php
  if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~");
  if(preg_match("/admin/", $_GET[id])) exit("HeHe");
?>

 

또 clear 조건을 확인하기 위해 조건문 코드를 확인해보면 result에 참인 값이 들어가면 되는 것이 아니라 result에 id가 admin이어야한다는 것을 알 수 있다.

<?php
  $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__);
?>

 

필터링 함수와 조건문을 확인해보니 admin을 입력하지 않고 id를 admin으로 설정해줘야한다는 것을 알 수 있다. 이럴 때는 드디어 필터링함수에 추가로 붙어있는 i를 이용하는 것인데 i는 대소문자를 구별하지 않으므로 admin을 ADMIN 또는 몇 개를 대문자로 바꿔주면 된다. ex) adMin, ADmin 등

 

따라서 해당 주소 php 뒤에 id=ADMIN을 입력한다.

 

solve

https://los.rubiya.kr/chall/troll_05b5eb65d94daf81c42dd44136cb0063.php?id=ADMIN

반응형