RDBMS의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어
웹 어플리케이션이 DBMS와 상호작용 할 때 사용
-> 자료의 검색과 관리
-> 데이터 베이스 스키마 생성과 수정
-> 데이터 객체 접근 조정 관리
사용 목적과 행위에 따라 다양한 구조가 존재한다.
언어 | 용도 | 명령어 |
---|---|---|
DDL (Data Definition Language) | 데이터 정의 | Create : 데이터 베이스 및 테이블 생성 Alter : 테이블의 특정 칼럼 속성 수정 Drop : 테이블, 데이터베이스, 컬럼 삭제 |
DMS (Data Manipulation Language) | 데이터 조작 | CRUD Insert : 새로운 데이터 생성 (Create) Select : 데이터 조회 (Read) Update : 데이터 수정 (Update) Delete : 데이터 삭제 (Delete) |
DCL (Data Control Language) | 데이터 베이스의 접근 권한 설정 | Grant : 권한 부여 Revoke : 권한 박탈 |
DML을 중심으로 (CRUD는 SQL 문법에서 가장 많이 쓰이며, SQL Injection과도 직접적인 연관이 있음)
Insert : 새로운 데이터를 생성
insert into [테이블명] values [data];
Select : 데이터 조회
select [조회할 대상] from [테이블명] where [조건];
Update : 데이터 수정
update [테이블] SET [변경할 Column] = [변경할 DATA] WHERE [조건];
Delete : 데이터 삭제
DELETE FROM [테이블명] WHERE [조건];
인젝션, 주입 공격 (Injection) : 이용자의 입력값이 애플리케이션의 처리 과정에서 구조나 문법적인 데이터로 핵서되어 발생하는 취약점
연산자 | 의미 | 우선순위 | 표현식 | 설명 |
---|---|---|---|---|
NOT | 부정 | 1 | NOT 피연산자 | 피연산자의 값이 T일 경우 F 반환 F일 경우 T 반환 |
AND | 그리고 (논리곱) | 2 | 피연산자1 AND 피연산자2 | 하나라도 F면 F 반환 |
OR | 또는 (논리합) | 3 | 피연산자1 OR 피연산자2 | 하나라도 T면 T 반환 |
※ 싱클쿼터(') : SQL에서 문자와 숫자 값은 싱글쿼터로 묶여서 입력되어야 함
‣ 데이터베이스 조회 후 결과를 이용자가 화면에서 직접 확인하지 못할 때 참/거짓 반환 결과로 데이터를 획득하는 공격 기법
‣ 스무고개 게임 처럼 질문을 하고 이에 대한 답을 얻어서 데이터베이스의 내용을 알아낼 수 있는 기법
-> 한 바이트 씩 비교하여 공격하는 방식 -> 다른 공격에 비해 많은 시간 소요
Boolean-based : 참과 거짓만을 출력하는 페이지를 공격하는 것
예시 : 웹사이트 검색기능
Case 1hello' AND 1=1
유효한 검색 단어와 항상 참이 되는 조건 부여 -> 게시판이 검색됨 -> 참(True)로 간주
Case 2hello' AND 1=2
유효한 검색단어와 항상 거짓이 되는 조건 부여 -> 게시판이 검색되지 않음 -> 거짓(False)으로 간주
동일한 검색어(hello)를 검색하지만 뒤에 붙는 조건에 따라 검색 결과가 달라짐
Time-based : 페이지가 참과 거짓 결과를 출력하지 않을 때, 참인 결과의 응답 시간을 지연시켜 참과 거짓을 구분