본문 바로가기
war game/웹 워게임(los)

load of sql injection zombie assassin

by 강깅꽁 2016. 9. 15.
반응형

<?php 
  
include "../config.php"
  
login_chk(); 
  
dbconnect(); 
  if(
preg_match('/\\\|prob|_|\.|\(\)/i'$_GET[id])) exit("No Hack ~_~"); 
  if(
preg_match('/\\\|prob|_|\.|\(\)/i'$_GET[pw])) exit("No Hack ~_~"); 
  if(@
ereg("'",$_GET[id])) exit("HeHe"); 
  if(@
ereg("'",$_GET[pw])) exit("HeHe"); 
  
$query "select id from prob_zombie_assassin where id='{$_GET[id]}' and pw='{$_GET[pw]}'"
  echo 
"<hr>query : <strong>{$query}</strong><hr><br>"
  
$result = @mysql_fetch_array(mysql_query($query)); 
  if(
$result['id']) solve("zombie_assassin"); 
  
highlight_file(__FILE__); 
?>


소스코드 분석

ereg함수를 통해 싱글 쿼터를 필터링 하고 있다.

이미 앞에서 troll에서 ereg함수에 대한 취약점에 대해 알아보았다.


풀이

ereg함수는 null이전의 문자열을 검사한다는 것과 대소문자를 구분하지 않는 다는 것이다.

즉 페이로드를 %00 ' 를 주게 되면 싱글쿼터가 정상적으로 들어가게 된다.

페이로드는

id=%00' or id='admin' %23과 같이 짜게 되면 된다.