본문 바로가기
wargame/los.rubiya.kr

5번 wolfman

by NTART 2019. 11. 16.
<?php 
  include "./config.php"; 
  login_chk(); 
  $db = dbconnect(); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
  if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~"); 
  $query = "select id from prob_wolfman where id='guest' and pw='{$_GET[pw]}'"; 
  echo "<hr>query : <strong>{$query}</strong><hr><br>"; 
  $result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if($result['id']) echo "<h2>Hello {$result[id]}</h2>"; 
  if($result['id'] == 'admin') solve("wolfman"); 
  highlight_file(__FILE__); 
?>

5번의 wolfman 코드이다.

쿼리는 guest로 날리지만, 문제를 해결하려면 admin으로 로그인하여야 한다.

그리고 preg_match 정규식함수에 띄어쓰기를 못하도록 필터링 하였다.

 

white space filtering으로 구글링하면,

%20%0a %0b %0c %0d %09 등으로 우회하여 sql injection을 하는 것을 알 수 있다.

 

아스키 표에서 %0A를 보면 linefeed로 되어있다. 이는 \n과 같은 개행의 기호인데 

html에서는 줄 넘김도 띄어쓰기 한칸으로 인식하기 때문에 띄어쓰기와 같은 용도로 사용이 가능하여 우회가 가능하다.

 

띄어쓰기(%20)대신 %0a를 넣어 sql injection을 하면 쉽게 성공할 수 있다! 

'wargame > los.rubiya.kr' 카테고리의 다른 글

7번 orge  (0) 2020.08.31
6번 darkelf  (0) 2019.11.16
4번 orc  (0) 2019.11.15
3번 goblin  (0) 2019.11.05
2번 cobolt  (0) 2019.11.04