LOS #09 vampire
2020. 10. 28. 22:55
728x90
728x90
728x90
Lord of SQLInjection
los.rubiya.kr
Source code
<?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__);
?>
Query
select id from prob_vampire where id=''
Write-up

위 사진에서 확인할 수 있는 정보는 다음과 같다.
-
파라미터는 id 1개가 사용될 수 있다.
-
id 값에 single quote 필터링을 하고 있다.
-
"admin" id 값을 요구하고 있다.
-
strtolower() 함수를 통해 id 값을 소문자로 변환하고, str_replace() 함수로 입력 id 값이 "admin" 일 경우에 문자열을 지워버린다.
간단하게 str_replace() 함수를 우회할 수 있도록 id 값을 전달하면 된다.
* 함수 참고 링크
PHP: strtolower - Manual
the strtolower version to support most amount of languages including russian, french and so on:
PHP: str_replace - Manual
Parameter
id=aadmindadminmadminiadminn
중간의 "admin" 문자열은 str_repleace() 함수로 인해 지워지고, 쿼리문은 다음과 같다.
select id prob_vampire where id="admin"
Success

728x90
728x90
'Wargame > LOS' 카테고리의 다른 글
| LOS #11 golem (0) | 2020.10.28 |
|---|---|
| LOS #10 skeleton (0) | 2020.10.28 |
| LOS #08 troll (0) | 2020.10.28 |
| LOS #07 orge (0) | 2020.10.28 |
| LOS #06 darkelf (0) | 2020.10.28 |