LOS #08 troll
2020. 10. 28. 22:53
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 ~_~");
if(preg_match("/admin/", $_GET[id])) exit("HeHe");
$query = "select id from prob_troll 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("troll");
highlight_file(__FILE__);
?>
Query
select id from prob_troll where id=''
Write-up
위 사진에서 확인할 수 있는 정보는 다음과 같다.
-
파라미터는 id 1개가 사용될 수 있다.
-
id 값에 single quote 필터링을 하고 있다.
-
"admin" id 값을 요구하고 있다.
-
쿼리문에 single quote가 고정되어 있고 입력한 id 값이 그 안에 전달된다.
single quote 필터링을 하고 있고, 쿼리문에서 id 값을 single quote로 감싸고 있기 때문에 single quote를 우회하기 어렵다. 그런데, 두 버째 preg_match() 함수를 보면 "/i" 옵션이 없다. "/i" 옵션은 대소문자를 구분하는 옵션인데, 소문자 "admin" 값만 필터링하고 있다. mysql에서는 대소문자 구문을 하지 않기 때문에 "ADMIN" 대문자 값을 전달하면 된다.
Parameter
id=ADMIN
쿼리문은 다음과 같다.
select id from prob_troll where id='ADMIN'
Success
728x90
728x90
'Wargame > LOS' 카테고리의 다른 글
LOS #10 skeleton (0) | 2020.10.28 |
---|---|
LOS #09 vampire (0) | 2020.10.28 |
LOS #07 orge (0) | 2020.10.28 |
LOS #06 darkelf (0) | 2020.10.28 |
LOS #05 wolfman (0) | 2020.10.28 |