-
SQL
-
SQL Injection
-
Blind SQL Injection
가상 머신 (Virtual Machine)
가상머신
물리적 컴퓨터가 아닌, 하나의 컴퓨터에서 가상의 다른 컴퓨터를 만들어주는 것
무료 가상머신: VMWare, VirtualBox
운영체제 (Operating System, OS)
운영체제: 컴퓨터 시스템의 하드웨어, 소프트웨어적인 자원들을 효율적으로 운영 및 관리함으로써 사용자가 컴퓨터를 편리하고, 효과적으로 사용할 수 있도록 하는 시스템 소프트웨어, 소프트웨어와 하드웨어 사이에서 중개자 역할을 하며 프로그램을 실행
종류:
- PC의 운영체제: 윈도우, 리눅스, MacOS
- 서버 운영체제: Unix, 리눅스, 윈도우
- 스마트폰 운영체제: 안드로이드, iOS
1. SQL
Database: 컴퓨터가 정보를 기록하는 데 사용하는 것
DBMS(Database Management System)
- 데이터베이스에 새로운 정보를 기록하거나, 기록된 내용을 수정 및 삭제하는 역할
- 다수의 사용자가 동시에 데이터베이스 접근 가능
- 웹서비스의 검색 기능과 같이 복잡한 요구사항을 만족하는 데이터 조회 기능
DBMS는 관계형과 비관계형을 기준으로 분류
- 관계형: 행과 열의 집합인 테이블 형식으로 데이터 저장 (MySQL, MariaDB, PostgreSQL, SQLite)
- 비관계형: 테이블 형식이 아닌 키-값 (Key-Value) 형태로 값 저장 (MongoDB, CouchDB, Redis)
RDBMS (Relational DataBase Management System)
관계형 DBMS
조건
1.행과 열의 집합으로 구성된 테이블의 묶음 형식으로 데이터를 관리
2.테이블 형식의 데이터를 조작할 수 있는 관계 연산자 제공
RDBMS에서 관계연산자는 Structured Query Language(SQL)이라는 쿼리 언어를 사용하고, 쿼리를 통해 테이블 형식의 데이터 조작
1-(1) SQL이란
SQL
RDBMS의 데이터를 관리(정의하고 질의, 수정 등)을 하기 위해 설계된 특수 목적의 프로그래밍 언어
웹 어플리케이션이 DBMS와 상호작용할 때 사용
1. 자료의 검색과 관리
2. 데이터 베이스 스키마 생성과 수정
3. 데이터 객체 접근 조정 관리
사용 목적과 행위에 따라 다양한 구조 존재
1-(2) SQL 구조

APM Setup
APM : Apache & PHP & MySQL
APM Setup : APM을 한 번에 설치하고 연동할 수 있도록 도와주는 프로그램 https://kldp.net/apmsetup/
1-(3) SQL 문법
SQL 문법 – DML을 중심으로
DML을 중심으로 보는 이유: CRUD는 SQL 문법에서 가장 많이 쓰이며, SQL Injection과도 직접적인 연관
Insert: 새로운 데이터 생성
insert into [테이블명] values [data];
(예시)
- 이름이 ‘고민지’인 2020년도에 입학한 학생, 이름이 ‘이슬’인 2022년도에 입학한 학생 추가 (테이블명은 "전교생")
INSERT INTO 전교생 VALUES (’2020’, ‘고민지’), (’2022’,’이슬’);
--
SELECT: 데이터 조회
select [조회할 대상] from [테이블명] where [조건];
(예시)
- 2020년도에 입학한 학생의 정보(전체) & 테이블명: 전교생
SELECT * FROM 전교생 WHERE 입학년도=2020
- 2020년도에 입학한 학생의 평균 학점
SELECT avg(grades) FROM 전교생 WHERE 입학년도=2020;
SELECT, FROM, WHERE 외에 또 다른 조건 설정문
- GROUP BY: 데이터 그룹화
- HAVING: GROUP BY에 조건을 추가할 때 사용
- ORDER BY: 정렬
--
Update: 데이터 수정
update [테이블] SET [변경할 Column]=[변경할 DATA] WHERE [조건];
예시
- 2020년도에 입학한 학생 중 이름이 ‘고민지’인 학생의 평균 학점을 4.3으로 변경
UPDATE 전교생 SET grades=4.3 WHERE 이름=’고민지’ AND 입학년도=2020
Delete: 데이터 삭제
DELETE FROM [테이블명] WHERE [조건];
2. SQL Injection
2-(1) SQL Injection
인젝션, 주입 공격(Injection): 이용자의 입력값이 애플리케이션의 처리 과정에서 구조나 문법적인 데이터로 해석되어 발생하는 취약점
SQL 인젝션
- 이용자의 입력값이 SQL 구문의 일부로 사용될 경우 해커에 의해 조작된 SQL 구문이 데이터베이스에 그대로 전달되어 비정상적인 DB 명령을 실행시키는 공격 기법
- 어플리케이션의 사용자 입력 값에 SQL 코드를 삽입 또는 추가하고, 해당 SQL 구문을 가장 마지막의 SQL 서버에서 전달하여 해석 및 실행하는 과정에서 발생하는 공격
SQL 인젝션 공격 발생 조건 : 1. 데이터베이스가 연동된 웹 애플리케이션 2. 외부의 입력값이 SQL 구문의 일부로 사용
SQL 인젝션 공격에서 자주 쓰이는 연산자 – 논리 연산자

싱글쿼터(‘)
SQL에서 문자와 숫자 값은 싱글쿼터로 묶여서 입력되어야 한다.
3. Blind SQL Injection
Blind SQL Injection
스무고개 게임이나 up-down 게임처럼 질문을 하고 이에 대한 답을 얻어서 데이터베이스의 내용을 알아낼 수 있는 기법
한 바이트 씩 비교하여 공격하는 방식 ⇒ 다른 공격에 비해 많은 시간 소요
(예시)
데이터베이스 조회 후 결과를 이용자가 화면에서 직접 확인하지 못할 때 참/거짓 반환 결과로 데이터를 획득하는 공격 기법
- Question #1. dreamhack 계정의 비밀번호 첫 번째 글자는 'x' 인가요?
Answer. 아닙니다
- Question #2. dreamhack 계정의 비밀번호 첫 번째 글자는 'p' 인가요?
Answer. 맞습니다 (첫 번째 글자 = p)
- Question #3. dreamhack 계정의 비밀번호 두 번째 글자는 'y' 인가요?
Answer. 아닙니다.
- Question #4. dreamhack 계정의 비밀번호 두 번째 글자는 'a'인가요?
Answer. 맞습니다. (두 번째 글자 = a)
Blind SQL Injection
Boolean Based 예시: 웹사이트 검색기능
Case 1
- [외부 입력값]
제목 검색: hello’ AND 1=1– (유효한 검색단어와 항상 참이 되는 조건 부여)
- [결과]
게시판이 검색됨 -> 참(true)로 간주
Case 2
- [외부 입력값]
제목 검색: hello’ AND 1=2– (유효한 검색단어와 항상 거짓이 되는 조건 부여)
- [결과]
게시판이 검색되지 않음 -> 거짓(false)로 간주
=> 동일한 검색어(hello)를 검색하지만 뒤에 붙는 조건의 참/거짓에 따라 검색 결과가 달라짐
--
알면 좋은 함수들: ascii(), substr()
ascii 함수: 전달된 문자를 아스키 형태로 반환하는 함수
예: ascii(’a’)를 실행하면 ‘a’ 문자의 아스키 값인 97 반환

알면 좋은 함수들: ascii(), substr()
substr 함수: 문자열에서 지정한 위치부터 길이까지의 값 반환
