본문 바로가기

Security/Hacking & Security

[보안 해킹] 홈페이지 보안 취약점 - SQL Injection 취약점

[보안 해킹] 홈페이지 보안 취약점 - SQL Injection 취약점



■ 취약점 설명 및 사례

    ⑴ 취약점 설명

        - 데이터베이스(DB)와 연동된 웹 어플리케이션에서 공격자가 입력 폼 및 URL 입력란에 SQL문을 삽입하여 DB로부터 정보를 열람(또는 조작)할 수 있는 취약점




    ⑵ 사례

        ① OO대학의 URL에 거짓 코드(Query)를 삽입하면 아래와 같이 비정상적인 화면이 노출


           - DB 이름의 길이를 알아내는 SQL 코드(Query) 삽입



           - 위와 같은 방식으로 범위를 좁혀나가고 단어를 하나씩 찾아내면 DB 이름이 "korea"로 시작함을 할 수 있음



        ② OO대학의 매개변수 값에 오류를 발생시키는 코드('+||+''+||+")를 삽입하여 페이지를 요청하면 아래와 같이 카테고리 값이 변경되어 출력됨




■ 점검 방법

    ⑴ 로그인 페이지 점검

        ① 관리하고 있는 웹서버의 로그인 페이지로 이동

        ② 아이디와 패스워드 란에 아래 문자열을 입력하여 결과 확인


  점검 예)

  아이디 : ' or 1=1;ㅡ

  비밀번호 : ' or 1=1;ㅡ 



        ③ 인증 실패 메시지가 나타날 경우, 'SQL Injection 취약점은 존재하지 않는 것으로 추정 가능



        ④ 로그인이 될 경우 SQL Injection 취약점이 존재



        ⑤ 웹서버 오류 메시지가 나타날 경우, SQL Injection 가능성이 있으므로 정보시스템, 홈페이지 보안가이드을 참고하여 세부적인 점검이 필요함




    ※ 다음과 같은 문자열을 추가적으로 점검해 볼 것


필터링 대상

'or 1=1;--

or 1=1-- 

')or('a'='a

+ or 1=1- -

' ' or 1=1- - 

'or 'a'='a 

sql' or 1=1- - 

"or 1=1 --

" or "a"="a 

sql" or 1=1-- 

 ,


    ⑵ 페이지 입력 값 점검

        ① 관리하고 있는 웹서버의 게시판으로 이동

        ② 게시판 등의 게시물 링크를 복사하여 브라우저의 주소표시줄에 입력

        ③ 주소표시줄에 입력한 값 중 게시판 번호(또는 글 번호) 등의 입력 값에 아래 예와 같이 인용부호( ' 또는 " )를 입력하여 결과 확인


  점검 예)

   http://www.점검가이트.co.kr/bbs/view.asp?Name=Notice&bbs=09"

   http://www.점검가이트.co.kr/bbs/view.asp?bbs=01"&page=09



        ④ 다음 같이 내용에 DB오류 또는 웹서버의 디렉토리가 노출될 경우, 입력값 검증 부재로 인해 추가 SQL Injection 공격을 차단(특수문자 치환 등)하는 장치가 마련되어 있지 않아 취약한 것을 의미한다




■ 대응 방안

    ⑴ 웹 서버 내에서의 조치

        ① 웹 서버의 오류 정보가 사용자에게 노출되지 않도록 조치

        ② 웹 어플리케이션과 연동되는 데이터베이스의 접근 권한을 최소화

        ③ 사용자 입력 폼(로그인 폼, 검색 폼, URL 등)을 대상으로 특수문자, 특수구문 필터링 규칙 적용

필터링 대상

'

-- 

=

*/ 

/* 

user_tables

user_table_columns

table_name 

column_name 

syscolumns 

union

select 

insert 

drop 

update 

and 

declare

substr 

openrowset 

xp_ 

'sysobjects 


    ⑵ 홈페이지 개발 보안 조치

        ① 홈페이지 소스코드는 사용자로부터 입력되는『입력 값』에 대한 검증과 예외처리

            ㉠ ID, PASSWORD, 게시판 제목, 본문, 검색창, 주소검색창 등의 모든 입력란에 특수문자

                (등호, 부등호, 인용부호 등)를 직접 입력하지 못하도록 웹서버의 소스코드를 수정

            ㉡ 입력 값에 정의된 문자 길이를 검증하여 SQL문이 추가 삽입되지 않도록 예외처리

            ㉢ 파라미터가 숫자인 경우 isnumeric과 같은 함수를 이용하여 검증하며, 문자인 경우 정규표현식을 이용하여 특수문자를 치환

                특히 sql 문에서 활용되는 문자 (', ", ;, --, or 등)는 반드시 치환


※ 기재될 홈페이지 개발 보안 - SQL 인젝션을 참조, 소스코드를 수정하여 보안취약점을 조치하시길 바람




※ 문의 사항은 메일 : jyuhm@sntkor.com 이나 070-8611-4853


문의 사항 남기기