소스코드 sqlInjection.php

<? $id = "디비 아이디"; $pwd = "디비 비밀번호"; $db_name = "디비 명";     $connect = mysql_connect('localhost', $id, $pwd) or die( "Unable to connect to SQL server");     mysql_select_db($db_name,$connect) or die( "Unable to select database");     mysql_query('set names utf8',$connect);  	$username = $_GET['username']; 	$password = $_GET['password'];  	$sql = "SELECT count(*) FROM Users WHERE Username = '$username' AND Password = '$password'"; // 	$sql = "SELECT count(*) FROM Users WHERE Username = '1' or '1' = '1' AND Password = '1' or '1' = '1'"; 		 	$result = mysql_query($sql); 	$count = mysql_result($result, 0, 0); 		echo "$sql<br/><br/>";	 		echo "결과는 = ".$count; ?>

테이블 SQL

CREATE TABLE IF NOT EXISTS `Users` (   `Username` varchar(255) NOT NULL,   `Password` varchar(255) NOT NULL );

PHP 에서 SQLInjection 성공시키기위해선 싱글 쿼터에 주의 하여야한다. 최종적으로 아래와 같은 SQL 니 나와야 한다. 위 소스코드 상에서 보듯이 &username 과 $password 은 싱글쿼터로 되어있으므로 GET 요청시 아래와 같이 적어준다.

 

sqlInjection.php?username=1' OR '1' = '1&password=1' OR '1' = '1

OR 연산자를 통해 '1' = '1' 이 라면 언제나 참 값을 반환한다. Jsp 의 prepared sql 을 쓴다면 괜찮다.

http://www.w3schools.com/sql/sql_injection.asp