WriteUp/LOS_rubiya

LOS-rubiya : Zombie_assassin

vared 2020. 8. 3. 10:48
<?php 
  include "./config.php"; 
  login_chk(); 
  $db = dbconnect();
  $_GET['id'] = strrev(addslashes($_GET['id']));
  $_GET['pw'] = strrev(addslashes($_GET['pw']));
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
  $query = "select id from prob_zombie_assassin where id='{$_GET[id]}' and pw='{$_GET[pw]}'"; 
  echo "<hr>query : <strong>{$query}</strong><hr><br>"; 
  $result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if($result['id']) solve("zombie_assassin"); 
  highlight_file(__FILE__); 
?>

id값을 가져오기만 하면 문제는 풀린다.

문제 자체에 strrev 함수와 addslashes 함수가 관건일거같은데 한번 알아보자

 

strrev 함수의 경우 문자열을 거꾸로 뒤집는 함수라고 한다.

nimda 주면 admin으로 읽는 것이지.

 

 

이점을 이용해서 ' \'에서 '\ 바꿀수 있다.

 

pw 쿼리에 들어가길 원하는 것은.

pw=''or 1=1%23

 

'or 1=1%23 입력값으로 주게되는데, 이것은

\'or 1=1%23 되고,

32%1=1 ro'\ 된다.

 

?pw=%2032%1=1%20ro%20%27

?pw=%231=1 ro '\ 이렇게 입력을 주면

 

pw=''\ or 1=1%23 된다.

활용해야 될듯하다.

 

 

?id="&pw=%231%20ro%20 이렇게 ' 하나를 문자로 만들어주는 방법을 써서 해야되는 것같다.