[E-COPS] 정규세션 2주차 - SQL

흑흑코더·2022년 9월 20일
0

E-COPS

목록 보기
2/17

SQL

SQL 이란?

RDBMS의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어
웹 어플리케이션이 DBMS와 상호작용 할 때 사용
-> 자료의 검색과 관리
-> 데이터 베이스 스키마 생성과 수정
-> 데이터 객체 접근 조정 관리
사용 목적과 행위에 따라 다양한 구조가 존재한다.


  • DBMS (Database Management System)
    ㄴ 데이터 베이스에 새로운 정보를 기록하거나, 기록된 내용을 수정 및 삭제하는 역할
    ㄴ 다수의 사용자가 동시에 데이터베이스 접근 가능
    ㄴ 웹서비스의 검색 기능과 같이 복잡한 요구사항을 만족하는 데이터 조회기능
  • DBMS의 분류
    ㄴ 관계형 : 행과 열의 집합인 테이블 형시긍로 데이터 저장 (MySQL, MariaDB 등)
    ㄴ 비관계형 : 테이블 형식이 아닌 키-값 (Key-Value) 형태로 값 저장 (MongoDB, CouchDB 등)

  • REBMS (Relational DataBase Management System)
    ㄴ 관계형 DBMS
    ㄴ 행과 열의 집합으로 구성된 테이블의 묶음 형식으로 데이터를 관리
    ㄴ 테이블 형식의 데이터를 조작할 수 있는 관계 연산자 제공
    ㄴ 관계 연산자는 Structured Query Language (SQL)이라는 쿼리 언어를 통해 테이블 형식의 데이터 조작

SQL 구조

언어용도명령어
DDL
(Data Definition Language)
데이터 정의Create : 데이터 베이스 및 테이블 생성
Alter : 테이블의 특정 칼럼 속성 수정
Drop : 테이블, 데이터베이스, 컬럼 삭제
DMS
(Data Manipulation Language)
데이터 조작CRUD
Insert : 새로운 데이터 생성 (Create)
Select : 데이터 조회 (Read)
Update : 데이터 수정 (Update)
Delete : 데이터 삭제 (Delete)
DCL
(Data Control Language)
데이터 베이스의 접근 권한 설정Grant : 권한 부여
Revoke : 권한 박탈

SQL 문법

DML을 중심으로 (CRUD는 SQL 문법에서 가장 많이 쓰이며, SQL Injection과도 직접적인 연관이 있음)

Insert : 새로운 데이터를 생성

insert into [테이블명] values [data];

Select : 데이터 조회

select [조회할 대상] from [테이블명] where [조건];

Update : 데이터 수정

update [테이블] SET [변경할 Column] = [변경할 DATA] WHERE [조건];

Delete : 데이터 삭제

DELETE FROM [테이블명] WHERE [조건];

SQL Injection

인젝션, 주입 공격 (Injection) : 이용자의 입력값이 애플리케이션의 처리 과정에서 구조나 문법적인 데이터로 핵서되어 발생하는 취약점

SQL Injection

  • 이용자의 입력값이 SQL 구문의 일부로 사용되어 조작된 SQL 구문이 데이터베이스에 전달되어 비정상적인 DB 명령을 실행시키는 공격 기법
  • 어플리케이션의 사용자 입력 값에 SQL 코드를 삽입 또는 추가하고, 해당 SQL구문을 가장 마지막의 SQL 서버에서 전달하여 해석 및 실행하는 과정에서 발생하는 공격

SQL Injection 공격 발생 조건

  1. 데이터베이스가 연동된 웹 애플리케이션
  2. 외부의 입력값이 SQL 구문의 일부로 사용

SQL Injection 공격에서 자주 쓰이는 논리 연산자

연산자의미우선순위표현식설명
NOT부정1NOT 피연산자피연산자의 값이 T일 경우 F 반환
F일 경우 T 반환
AND그리고 (논리곱)2피연산자1 AND 피연산자2하나라도 F면 F 반환
OR또는 (논리합)3피연산자1 OR 피연산자2하나라도 T면 T 반환

싱클쿼터(') : SQL에서 문자와 숫자 값은 싱글쿼터로 묶여서 입력되어야 함


Blind SQL Injection

‣ 데이터베이스 조회 후 결과를 이용자가 화면에서 직접 확인하지 못할 때 참/거짓 반환 결과로 데이터를 획득하는 공격 기법
‣ 스무고개 게임 처럼 질문을 하고 이에 대한 답을 얻어서 데이터베이스의 내용을 알아낼 수 있는 기법
-> 한 바이트 씩 비교하여 공격하는 방식 -> 다른 공격에 비해 많은 시간 소요

Blind SQL Injection 종류

Boolean-based : 참과 거짓만을 출력하는 페이지를 공격하는 것

예시 : 웹사이트 검색기능
Case 1

hello' AND 1=1

유효한 검색 단어와 항상 참이 되는 조건 부여 -> 게시판이 검색됨 -> 참(True)로 간주
Case 2

hello' AND 1=2

유효한 검색단어와 항상 거짓이 되는 조건 부여 -> 게시판이 검색되지 않음 -> 거짓(False)으로 간주


동일한 검색어(hello)를 검색하지만 뒤에 붙는 조건에 따라 검색 결과가 달라짐

Time-based : 페이지가 참과 거짓 결과를 출력하지 않을 때, 참인 결과의 응답 시간을 지연시켜 참과 거짓을 구분


알면 좋은 함수

  • ascii() : 전달된 문자를 아스키 형태로 반환하는 함수
  • subst(string, position, length) : 문자열에서 지정한 위치부터 길이까지의 값 반환
    -> substr함수와 ascii함수를 이용, 유저의 비밀번호 구하기
profile
공부합시다

0개의 댓글