728x90
반응형

문제소스 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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__); 
?>
cs

 

 

 

  $_GET['id'] = strrev(addslashes($_GET['id']));
  $_GET['pw'] = strrev(addslashes($_GET['pw']));

 

idpwaddslashes로 아래 문자에 \을 붙여준다. https://www.w3schools.com/php/func_string_addslashes.asp

  • single quote (')
  • double quote (")
  • backslash (\)
  • NULL (%00)

그리고 strrev으로 문자열을 뒤집는다.

 

 

 

 

이전 문제처럼 쿼리에서 id = ' 부터 pw =' 까지를 문자열 취급하게 만들면 될 것 같다.

https://mandu-mandu.tistory.com/315

 

 

 

 

 

id='' and pw=''

두번째 싱글쿼트 앞에 \가 붙게 하여 문자열 취급하도록 해야 한다.

 

 

 

 

id에 \와 '을 제외한 나머지 " 또는 NULL (%00)을 넣어보자

 

" -> \" -> "\

id='"\' and pw = ''

 

\가 뒤로 오면서 '가 문자열 취급되고, " ' 안에 있기 때문에 문자열 취급된다.

 

 

 

 

 

이제 pw=' or 1#' 로 만들어주면 된다. strrev함수로 인해 뒤집어서 입력해주면 된다.

728x90
반응형

+ Recent posts