[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 |