반응형
﹥ SQL Injection
SQL Injection이란 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위입니다.
﹥ SQL Injection의 종류
인증 우회 (Auth Bypass)
아이디와 패스워드를 입력하는 로그인 페이지를 타겟으로 행해지는 공격입니다. SQL 쿼리문의 TRUE / FALSE의 논리적 연산 오류를 이용하여 로그인 인증 쿼리문이 무조건 TRUE의 결괏값이 나오게 하여 인증을 무력화시킵니다.
1. SQL injection - 논리적 에러
- 기본적인 인젝션 방법으로 기호를 통해 에러를 확인하고 논리적인 에러를 통해 시스템 권한 체크를 우회하는 기법입니다.
SELECT * FROM member WHERE ID = 'admin' AND PW = '' or 1=1--'
2. Blind SQL Injection - 쿼리 결과 여부
- 악의적인 문자열 삽입 대신 쿼리의 결과 (True or False)에 따라 정보를 취득합니다.
http://www.xxxx.com/page.php?id=2 and 1=1
3. Union SQL Injection - 이중 쿼리
- 두 개 이상의 쿼리를 요청하여 결과를 얻는 점을 악용하여 원래의 요청에 한 개의 추가 쿼리를 삽입하여 정보를 얻어내는 방식입니다.
'union%20select%20table_name,column_name,@@version,null,null--
4. Stored Procedure SQL Injection - 저장 프로시저
- 일련의 쿼리들을 모아 하나의 함수처럼 사용하기 위한 것입니다. 공격에 사용되는 대표적인 저장 프로시저는 MS-SQL에 있는 cp_cmdshell 로 윈도우 명령어를 사용할 수 있게 됩니다.
데이터 노출 (Data Disclosure)
타겟 시스템의 주요 데이터 절취를 목적으로 하는 방식입니다. 웹 사이트에서 데이터베이스의 에러 정보를 확인할 수 있는지, 없는지에 따라 공격 방식이 결정됩니다.
원격 명령 실행 (Remote Command Execution)
저장 프로시저를 이용하여 파라미터를 조작하여 쉘 수행, 쿼리 결과를 HTML로 제공, 서비스 시작∙중지, 시스템 정보 획득 등 시스템 상에 공격하는 방식입니다.
﹥SQL Injection 대응 방안
1. 입력 값에 대한 검증
- 검증 로직을 추가하여 미리 설정한 특수문자가 들어왔을 때 요청을 막아내기
2. 에러 메시지 노출 금지
- 오류 발생 시 사용자에게 보여줄 수 있는 페이지나 알람 띄우기
3. Prepared Statement 구문 사용
- 서버의 php 파일에 sql 쿼리문이 아래와 같이 고정되어 있고 외부의 입력으로는 이 템플릿을 변경할 수 없다면, ?에 들어가는 데이터는 단순히 문자열로 취급하기 때문에 SQL 인젝션은 발생할 수 없습니다.
INSERT INTO users VALUES(?, ?, ?)
References
반응형
'🗂 Study > DB' 카테고리의 다른 글
[DB] 키(key) 🗝 (0) | 2021.08.25 |
---|
댓글