SQL

Lee·2022년 9월 22일
post-thumbnail
  1. SQL

  2. SQL Injection

  3. 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
  • Time-based

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 함수: 문자열에서 지정한 위치부터 길이까지의 값 반환

profile
Cybersecurity

0개의 댓글