[reference doc/site] 

http://www.9lessons.info/2008/12/sql-injection.html

http://www.w3resource.com/php/function-reference/addslashes.php

http://docs.moodle.org/dev/Slashes

http://kyumboy.tistory.com/40


1) 정의

- 폼 기반 사용자 인증을 하는 어플리케이션에서 사용자 인증을 위한 쿼리가 참이 되도록 하여 인증을 우회

   하는 SQL Injection 취약점중의 하나


2) 특징

- where 절 이하가 항상 참이 되도록 입력 폼에서 쿼리 조작을 한다.

- 입력한 id 에 의한 개별 사용자 인증이 아닌 Table 에서 반환되는 첫 번째 레코드가 있으면 사용자 인증이 

   되는 것으로 권한을 획득


3) 예



- Java

- Login Source


String userid = request.getParameter("userid");

String password = request.getParameter("password");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
connection = DriverManager.getConnection("jdbc:odbc:projectDB");

query = "SELECT * FROM Users WHERE user_id ='" + userid + "' AND password ='" + password +"'";

PreparedStatement ps = connection.prepareStatement(query);
ResultSet users = ps.executeQuery();

if(users.next()){

//some thing here
}
else{

}


- 실제 작동되는 쿼리


query = "SELECT * FROM Users WHERE user_id ='' OR 1=1; /* AND password ='*/--'";


- PHP

- Login Source


$myusername=$_POST['usr']; 

$mypassword=$_POST['pwd']; 

$sql="SELECT * FROM users WHERE user='$myusername' and password='$mypassword'";

$result=mysql_query($sql);
$count=mysql_num_rows($result);

if($count==1){

//some code
}
else {

}


- 실제 작동되는 쿼리


$sql="SELECT * FROM users WHERE user=''OR 1 = 1;//' and password='....'";


4) 조치

① addslashes(), stripslashes()

- java, php 소스는 post 로 넘어온 값에 addSlashes() 함수를 붙여 작은 따옴표, 큰 따옴표 문자열 

   앞에 백 슬래시를 추가시켜 저장한다.

- DB 에 저장된 값을 꺼내 비교할 때는 stripslashes() 함수로 백슬래시를 제거해서 비교한다


//Java Code

addSlashes(String userid);

// PHP Code
$myusername=addslashes($_POST['usr'];);



- 예



② 매개변수 활용

- 쿼리문내에서 ? 등의 매개변수를 사용해서 입력 변수를 매칭시킨다.



③ 입력 문자열 길이 제한

- ID, 비밀번호 자리에 맞게끔 입렵박스 length 를 제한하면 명령어 삽입이 어렵다.


'My Security Study > Skill' 카테고리의 다른 글

OpenSSL HeardBleed 취약점 정리  (1) 2014.04.20
TCPdump  (0) 2013.11.12
TCP Connection  (0) 2013.11.11
TCP Protocol  (0) 2013.11.11
다운로드 파일의 HASH 테스트 방법  (0) 2013.05.22
Posted by i kiss you
,