<?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
'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 |