Web

[SQL Injection] 종류 및 Prepared Statement

대장흰둥 2022. 11. 1. 16:41

1. 개요

Web Application에서 DB로 전달하는 정산적인 SQL Query를 변조하여 비 정상적인 쿼리문을 전달해 DB 접근을 시도, 보통 사용자의 입력 데이터가 적절하게 검증되지 못하고 SQL쿼리로 바로 입력되기 때문에 발생

 

DB와 연동되는 스크립트의 모든 파라미터들을 점검하여 사용자들의 입력값이 SQL Injection을 발생시키지 않도록 수정하고, 허용되지 않는 문자열이나 문자가 포함된 경우에는 에러로 처리하여 에러 내용을 사용자에게 보여주지 않고 별도 페이지로 설정한다

✅ Stored procedure(저장 프로시저), Prepared Statement

일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이다.
Prepared Statement 구문을 사용하게 되면 사용자의 입력 값이 DB의 파라미터로 들어가기 전에에 DBMS가 미리 컴파일 하여 실행하지 않고 대기한 뒤 사용자의 입력 값을 문자열로 인식하게 하여서 공격 쿼리가 들어간다고 하더라고 사용자의 입력 값은 쿼리문이 아닌 문자열로 인식되기 때문에 공격자의 의도대로 작동하지 않는다

2. 종류

•  Error Based Injection

싱글쿼터 혹은 세미콜론 삽입 시 SQL 관련 에러를 그대로 출력 해 데이터 베이스 정보를 획득할 수 있는 기술이다.

•  Union Based Injection

2개 이상의 쿼리를 요청하여 결과를 얻을 수 있는 Union의 특징을 이용하여 원래의 요청에 추가 쿼리를 삽입하여 정보를 얻어내는 방식이다

•  Blind Based Injection

에러가 발생되지 않는 사이트에서 참인 쿼리 수행 시 나오는 이벤트를 통해 정보를 알아내는 방식이다.

•  Time Based Injection

쿼리 결과가 참인 경우의 응답 시간과 거짓인 경우의 응답 시간의 차이를 이용하여 공격을 시도하는 방법이다.

'Web' 카테고리의 다른 글

[SQL Injection] Pentesterlab 문제 풀이1  (0) 2022.11.02
[HTTPS 프로토콜] HSTS 헤더  (0) 2022.10.31