Web/Wargame
[Dreamhack] SQL Injection
와븨
2022. 9. 24. 17:31
Background: Relational DBMS
- 데이터베이스(Database) : 컴퓨터가 정보를 기록하기 위해 사용
- DBMS(DataBase Management System) : 데이터베이스를 관리하는 애플리케이션
DBMS
- 데이터베이스에 새로운 정볼르 기록하거나, 기록된 내용을 수정, 삭제하는 역할
- 다수의 사람이 동시에 데이터베이스에 접근 가능
- 복잡한 요구사항(ex. 웹 서비스의 검색 기능)을 만족하는 데이터를 조회 가능
- 관계형 데이터베이스와 비관계형 데이터베이스가 있음
종류 | 특징 |
Relational (관계형) | 행과 열의 집합인 테이블 형식으로 데이터를 저장 ex)MySQL, MariaDB, PostgreSQL, SQLite |
Non-Relational (비관계형) | 키-값(Key-Value) 형태로 값을 저장 ex)MongoDB, CouchDB, Redis |
Relational DBMS
- 행과 열의 집합으로 구성된 테이블의 묶음 형식으로 데이터를 관리하고, 테이블 형식의 데이털르 조작할 수 있는 관계 연산자를 제공
- Structured Query Language (SQL) 라는 쿼리 언어를 사용하고, 쿼리를 통해 테이블 형식의 데이터를 조작
- SQL : DBMS에 데이터를 질의하는 언어로 구조화된 형태를 가지고, 웹 어플리케이션이 DBMS와 상호작용할 때 사용됨
언어 | 설명 |
DDL (Data Definition Language) |
데이터를 정의하기 위한 언어. 데이터를 저장하기 위한 스키마, 데이터베이스의 생성/수정/삭제 등의 행위를 수행함 |
DML (Data Manipulation Language) |
데이터를 조작하기 위한 언어. 실제 데이터베이스 내에 존재하는 데이터에 대해 조회/저장/수정/삭제 등의 행위를 수행함 |
DCL (Data Control Language) |
데이터베이스의 접근 권한 등의 설정을 하기 위한 언어. 데이터베이스 내에 이용자의 권한을 부여하기 위한 GRANT와 권한을 박탈한느 REVOKE가 대표적임 |
ServerSide: SQL Injection
- SQL Injection : DBMS에서 사용하는 쿼리를 임의로 조작해 데이터베이스의 정보를 획득하는 기법
- 인젝션(Injection) 공격 : 이용자의 입력값이 애플리케이션의 처리 과정에서 구조나 문법적인 데이터로 해석되어 발생하는 취약점
- Blind SQL Injection : 질의 결과를 이용자가 화면에서 직접 확인하지 못할 때 참/거짓 반환 결과로 데이터를 획득하는 공격 기법
Blind SQL Injection
- 데이터베이스 조회 후 결과를 직접적으로 확인할 수 없는 경우 사용할 수 있는 SQL Injection 공격 기법
- 한 비트씩 비교하여 공격하는 방식으로 다른 공격에 비해 많은 시간을 들여야함 => 공격을 자동화하는 스크립트를 작성하여 해결
함수 | 특징 |
ascii | 전달된 문자를 아스키 형태로 반환하는 함수 |
substr | 문자열에서 지정한 위치부터 길이까지의 값을 가져옴 |