Level 13 → Level 14
Web/Natas

Level 13 → Level 14

반응형


Username과 Password를 입력하도록 되어있습니다.

소스를 보도록 하죠.

<?
if(array_key_exists("username", $_REQUEST)) {
    $link = mysql_connect('localhost', 'natas14', '<censored>');
    mysql_select_db('natas14', $link);
    
    $query = "SELECT * from users where username=\"".$_REQUEST["username"]."\" and password=\"".$_REQUEST["password"]."\"";
    if(array_key_exists("debug", $_GET)) {
        echo "Executing query: $query<br>";
    }

    if(mysql_num_rows(mysql_query($query, $link)) > 0) {
            echo "Successful login! The password for natas15 is <censored><br>";
    } else {
            echo "Access denied!<br>";
    }
    mysql_close($link);
} else {
?>

<form action="index.php" method="POST">
Username: <input name="username"><br>
Password: <input name="password"><br>
<input type="submit" value="Login" />
</form>
<? } ?>

 

만약 이렇게 입력하게 된다면 query는 다음과 같이 구성될 것입니다.

SELECT * from users where username="karatus" and password="karatus"

 

그렇다면 저희는 생각나는 기법이 딱 하나밖에 없죠.

바로 SQL Injection입니다.

그렇다면 우리는 이 query를 조작해야만 합니다.

 

주석을 이용할 건데 DB의 종류가 무엇인지 모르므로

일단 MySQL이라고 가정하고 Username에 작성해보겠습니다.

더블 쿼트(")로 닫아준 뒤, or 구문으로 뒤가 무조건 true인 구문을 넣어줍니다.

그리고 뒤를 인식하지 못하도록 -- (뒤에 공백 하나) 를 넣어줍니다.

결과는

맞았군요.

MySQL이 DB 종류라는 가정이 맞았습니다.

아무튼 다음으로 가보죠. ㅎㅎ

 

AwWj0w5cvxrZiONgZ9J5stNVkmxdk39J

반응형