Database & Hacker의 관점
※ 절대 허용되지 않은 사이트나 서버에 해킹 및 공격은 범죄이므로 이점 명심해야 한다.
DB(Database)란?
- 체계적으로 모아둔 데이터의 집합. 여러 사람이나 애플리케이션이 공유하고 사용할 목적으로 통합, 관리되는 정보의 저장소이다. 해커에게는 가장 가치 있는 정보(개인정보, Credential 등)가 잠들어 있는 최종 타겟이다.
1. DBMS 및 유형 (NoSQL vs RDBMS)
Database Architecture (DB Types)
Relational DBMS (관계형 데이터베이스)
SELECT * FROM users WHERE id='admin'; """ 데이터를 2차원 테이블(행과 열)로 구조화 """
NoSQL DBMS (비 관계형 데이터베이스)
db.users.find({ id: "admin" }); """ Document, Key-Value 등 유연한 구조로 데이터 저장 """
- DBMS (Database Management System): 사용자와 데이터베이스 사이에서 데이터를 CRUD할 수 있도록 관리해주는 소프트웨어 시스템.
- RDBMS 프로그램들: MySQL, Oracle, PostgreSQL, MSSQL Server, MariaDB 등.
- NoSQL 프로그램들: MongoDB, Redis 등.
2. How hackers think… (DB & SQL Query)
Hacker’s View
- 데이터베이스를 바라보는 관점: 해커는 DB를 단순한 저장소로 보지 않는다. DB는 서버 운영체제(OS)의 파일 시스템을 읽고 쓰거나, 원격 명령을 실행(RCE)할 수 있는 “가장 강력한 백도어(Backdoor)” 로 바라본다.
- SQL Query를 바라보는 관점: 개발자가 작성한 정상적인 쿼리의 흐름(Syntax)을 의도적으로 끊고, 악의적인 페이로드(Payload)를 이어 붙여 DB 엔진이 그것을 합법적인 명령으로 착각하게 만든다.
3. 정상 사용자와 해커의 관점 비교
Input Validation
# Normal User Input ID = "user123" PW = "password123!" """ 목적: 자신의 계정으로 정상적인 서비스 이용 """ # Hacker Input ID = "admin' --" PW = "admin" """ 목적: 쿼리의 논리 구조를 파괴하여 인증 로직을 무력화 (인증 우회) """
- 정상 사용자: 제공된 UI(로그인 창, 검색 창 등)를 통해 시스템이 요구하는 형태의 정상적인 데이터를 입력한다.
- 해커: 모든 입력 폼, URL 파라미터, HTTP 헤더(User-Agent, Cookie 등)까지도 “DB와 직접 대화할 수 있는 통신 채널” 로 취급한다. 시스템의 필터링을 우회하고 설계 의도를 벗어난 동작을 유도한다.
4. 실제 동작 과정 생각해보며 이해
Execution Flow
1. User Input -> 2. Web Server -> 3. Backend (Query Generation) -> 4. DBMS Parsing & Execution -> 5. Return Result
- 해킹의 핵심은 보이지 않는 백엔드의 동작을 머릿속으로 렌더링하는 것이다.
SELECT * FROM members WHERE userid = '$input'이라는 서버의 로직이 있다고 가정할 때,$input자리에 자신이 넣은 특수문자(',",\,#등)가 들어갔을 때 최종적으로 완성되는 전체 SQL 문자열을 예측하는 것이 해커의 사고방식이다.