웹/LOS

LOS # vampire

묘나 2021. 3. 13. 06:00
728x90
반응형
SMALL

쿼리문은 이렇다.

query : select id from prob_vampire where id=''

 

코드를 분석해보자.

 

<?php 
  
include "./config.php"
  
login_chk(); 
  
$db dbconnect(); 
  if(
preg_match('/\'/i'$_GET[id])) exit("No Hack ~_~");

// 역시나 싱글쿼터가 필터링되고 있다.


  
$_GET[id] = strtolower($_GET[id]);
  
$_GET[id] = str_replace("admin","",$_GET[id]); 

// id를 입력받은 뒤에, 이를 replace 하고 있다.

 

 

<str_replace()>

 

: 보통 단순히 문자열을 다른 문자열로 치환할 때 사용하는 함수

 

사용 형식

: str_reaplce("문자열", "치환 문자열", 치환 시작 index)

 

치환 시작 index부터 규칙에 따라 치환이 이루어진다.

 


  
$query "select id from prob_vampire where id='{$_GET[id]}'"
  echo 
"<hr>query : <strong>{$query}</strong><hr><br>"
  
$result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if(
$result['id'] == 'admin'solve("vampire"); 

// replace한 이후의 값이 'admin'이면 문제가 해결될 것으로 보인다.


  
highlight_file(__FILE__); 
?>

 

치환된 이후의 값이 'admin'이 되어야 하는 문제이므로,

역방향으로 문제를 풀어나가면 될 것 같다!

 

admin이 " " 공백으로 치환되므로,

 

adadminmin

-> ad" "min

->admin

 

이 될 것이다.

 

그러므로 adadminmin을 입력해주면 된다.

 

(str_replace()함수 우회의 너무나 대표적인 예시이다..!)

 

문제를 쉽게 해결했다!

728x90
LIST