[보안 해킹] 홈페이지 보안 취약점 - 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
'Security > Hacking & Security' 카테고리의 다른 글
[보안 해킹] 홈페이지 보안 취약점 - 권한 인증 취약점(세션 탈취) (0) | 2016.10.18 |
---|---|
[보안 해킹] 홈페이지 보안 취약점 - 권한 인증 취약점(파라미터/URL 변조) (0) | 2016.10.17 |
[보안 해킹] 홈페이지 보안 취약점 - 크로스 사이트 스크립트(XSS) 취약점 (0) | 2016.10.14 |
[보안 해킹] 홈페이지 보안 취약점 - 공개용 웹 게시판 취약점 (0) | 2016.10.13 |
[보안 해킹] 홈페이지 보안 취약점 - 소스코드 내 중요정보 노출 취약점 (0) | 2016.10.13 |