반응형
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
반응형