<01. SQL Injection : SQL 주입>


발생 원인 : 외부 입력값이 DB Query 작성에 이용되는 환경에서 입력값을 검증하지 않는 경우에 발생

영향 : 조작된 Query 통해 DB 내용이 노출되거나 변조될 있음

Bad Code : Table Name name 대해 검증하지 않은 코드

Connection con = null;

PreparedStatement stmt = null;


try {

   String tableName = pros.getProperty("jdbc.tableName");

   String name = pros.getProperty("jdbc.name");

   String query = "SELECT * FROM " + tableName + " WHERE Name = " + name;

   stmt = con.prepareStatement(query);

   rs = stmt.executeQuery();

   ........


} catch (SQLException slqe) {}

finally {

   rs.close();

   stmt.close();

   con.close();

}


Good Code : Query문의 구조가 변경되지 않는 PreparedStatement 클래스를 이용하여 쿼리를 수행

Connection con = null;

PreparedStatement stmt = null;


try {

   String tableName = pros.getProperty("jdbc.tableName");

   String name = pros.getProperty("jdbc.name");

   String query = "SELECT * FROM ? WHERE Name = ? ";

   stmt = con.prepareStatement(query);

   stmt.setString(1, tableName);

   stmt.setString(2, name);

   rs = stmt.executeQuery();

   ........


} catch (SQLException slqe) {}

finally {

   rs.close();

   stmt.close();

   con.close();

}


<대표적인 취약점>

Case 1 : 서버에서 다음과 같은 쿼리 실행 코드가 있는 경우 취약점 존재

SELECT * FROM " + tableName + " WHERE name = '" + name + "'"


Case 2 (Blind SQL Injection) : 아래 Normal Query Abnormal Query 실행 결과가 같은 경우 취약점 존재

<Server Query> strSQL = "select user_id, name, user_pwd from member where user_id='"&id&'" and user_pwd='"&password&"'

<Normal Query>http://test.com/member/member_login_check.jsp?user_id=hacker&user_pwd=1234

<Abnormal Query>http://test.com/member/member_login_check.jsp?user_id=hacker&user_pwd=1234' and 1=1--

substr(), ascii() 함수 등을 이용하여 서버의 response , 거짓임을 이용하여 데이터 추출하는 방식


Case 3 : Mass SQL Injection

SQL Injetion 탐지 패턴을 우회하기 위해 CAST 함수 이용하여 쿼리문 인코딩하여 공격


Case 4 : Cookie 이용한 공격

 Query String 대한 길이를 제한하거나 서버에서 PreparedStatement 사용하여 해결

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/879

트랙백 주소 :: http://www.yongbi.net/trackback/879

트랙백 RSS :: http://www.yongbi.net/rss/trackback/879

댓글을 달아 주세요

댓글 RSS 주소 : http://www.yongbi.net/rss/comment/879
[로그인][오픈아이디란?]
오픈아이디로만 댓글을 남길 수 있습니다