LoSi

9_LoSi_vampire

duduranran 2022. 11. 26. 14:39
<?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]); 
  $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"); 
  highlight_file(__FILE__); 
?>

1. SQL쿼리문을 보면 ID만 식별하고 있다.

2. 싱글쿼트가 preg_match로 필터링 되어 있고

3. 중간쯤 보면 GET방식으로 들어온 id값을 모두 소문자로 바꿔주는 strtolower()함수가 사용됐다.

4. 그리고 그 아래 str_replace()함수가 사용 됐는데, 쉬운 내용이다. 

  str_replace("admin","",$_GET[id]);  // GET방식으로 들어온 id값에 admin값이 있다면 지워버리라는 뜻

 

처음엔 ?id=admin 이라고 입력해보면 아무것도 입력되지 않은 것으로 출력된다.

우회법은 간단하다. XSS할 때 script라는 단어가 필터링 돼 있을 떄 <scscriptript></scscriptript> 처럼 입력하는 것과 같다.

'admin'을 입력하고 싶다면 'adadminmin' 이렇게 입력하면 된다. 밑줄친 admin이 지워지면서 'admin'이 입력되게 된다.

정답은 ?id=adadminmin

 

Clear!!

'LoSi' 카테고리의 다른 글

10_LoSi_skeleton  (0) 2022.11.26
8_LoSi_Troll with preg_match()  (0) 2022.11.25
7_LoSi_orge  (1) 2022.11.24
6_LoSi_darkelf  (0) 2022.11.23
5_LoSi_wolfman with whitespace 우회  (0) 2022.11.23