웹 해킹/SQL 기본

SQL Injection을 위한 데이터베이스 기초

Security Engineer 2024. 11. 16. 22:00

SQL 기본 문법을 알아야 하는 이유

취약점 진단 시 성공적인 SQL 인젝션 공격을 위해서는 SQL 기본 문법에 대한 이해는 필수다!

그림1 - SQL Injection 공격 개요

 

 

 

데이터베이스란 무엇인가?

데이터를 구조적으로 모아둔 데이터 집합소

 

관계형 데이터베이스(Relational Database: RDB)

- 데이터를 열과 행을 가진 테이블 형태로 표현하며, 구조적으로 데이터 관리를 한다.

그림2 - 관계형 데이터베이스

 

 

데이터베이스 용어

그림3 - 데이터베이스 용어

(A) = 데이터의 집합 → 테이블

(B) = 행 → 레코드

(C) = 열 → 컬럼

 

 

관계형 데이터베이스 관리 시스템(RDBMS)

관계형 데이터베이스를 관리하는 시스템을 RDBMS라고 부른다.

주요 기능은 데이터 추가, 수정, 삭제, 조회, 데이터 무결성 유지, 트랜잭션 관리, 백업 및 복원, 보안 등이 있다.

그림4 - 관계형 데이터베이스 관리시스템(RDBMS)

대표적인 관계형 데이터베이스는 Oracle, MySQL, MS-SQL, PostgreSQL 등이 있다.

NoSQL의 대표적인 제품에는 MongoDB가 있다.

 

DBMS를 사용하기 위해서는 어플리케이션이 사용되는데 크게 두 가지로 분류된다.

- SQL 클라이언트 프로그램

- JAVA, PHP, Python, C언어 등 프로그래밍 언어를 사용하여 접근

 

 

RDBMS의 절대강자 독보적인 1위 ORACLE

그림5 - 데이터베이스 순위

그림5의 출처는 https://db-engines.com/en/ranking 으로, 데이터베이스 순위를 확인할 수 있다.

MySQL ≒ MariaDB는 무료버전이라는 장점이 있다. 

Oracle과 MS-SQL은 공공기관 및 주요 기업에서 주로 사용하며, 유료이다.

대부분 기업에서 Oracle을 독보적으로 많이 사용하며 그 다음으로 MS-SQL과 IBM Db2가 사용된다.

 

 

 

SQL이란 무엇인가?

SQL(Structured Query Language)

- 구조화된 질의문

그림6 - SQL 정의

Application = SQL 클라이언트 프로그램, 프로그래밍 언어(JAVA, PHP, Python 등)

Application에서 DBMS로 SQL을 사용하여 요청을 한다.

데이터베이스는 DBMS로 부터 요청을 받고 해당 데이터를 가져오거나 수정한다.

 

 

 

SQL 문법 종류

그림7 - SQL 문법 종류(1)
그림8 - SQL 문법 종류(2)

 

DDL(데이터 정의 언어)

- 테이블과 같은 데이터의 구조를 정의하는 언어

- 데이터를 생성, 수정, 삭제 하는 등의 데이터의 전체 골격을 결정한다.

- 데이터베이스, 테이블 등을 생성하는 역할 → 데이터 구조와 관련된 명령어

종류 역할
CREATE 데이터베이스, 테이블 등을 생성
ALTER 테이블을 수정
DROP 데이터베이스, 테이블을 삭제
TRUNCATE 테이블 초기화
RENAME 데이터베이스의 객체 이름 변경

 

 

DML(데이터 조작 언어)

- 정의된 데이터베이스에 입력된 레코드를 조회, 수정, 삭제하는 등의 역할을 하는 언어

- SQL Injection 공격 시 자주 사용되는 언어이다.

종류 역할
SELECT 데이터 검색
INSERT 데이터 삽입
UPDATE 데이터 수정
DELETE 데이터 삭제

 

 

DCL(데이터 제어 언어)

종류 역할
GRANT 특정 데이터베이스 사용자들에게 특정 작업에 대한 수행 권한 부여
(특정 사용자만 특정 작업을 할 수 있도록 지정 가능)
REVOKE GRANT 명령으로 주어진 액세스 권한을 철회

 

 

TCL(트랜잭션 제어 언어)

- 데이터를 제어하는 언어

- 데이터의 보안, 무결성, 회복, 병행 수행제어 등을 정의하는데 사용

종류 역할
COMMIT 트랜잭션의 작업 결과를 저장 반영(트랜잭션 완료)
ROLLBACK 데이터베이스를 마지막으로 COMMIT된 시점의 상태로 복원
데이터에 대한 변경 내용은 논리적인 트랜잭션으로 그룹화 될 수 있다.
SAVEPOINT ROLLBACK시 트랜잭션에 포함된 전체 작업 복원이 아닌 SAVEPOINT까지 트랜잭션의 일부만 롤백 가능

 

 

 

 

 

 

데이터 처리를 위한, CRUD

대부분 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말이다. 사용자 인터페이스가 갖추어야 할 기능(정보의 참조/검색/갱신)을 가리키는 용어로서도 사용된다.

그림9 - CRUD 의미

 

 

 

 

 

 

 

 

 

 

 

참고

https://www.inflearn.com/course/SQL-%EC%9D%B8%EC%A0%9D%EC%85%98-%EA%B3%B5%EA%B2%A9-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95