본문 바로가기
CS

ep 08-2. SQL Injection

by L_SU 2023. 1. 8.

SQL Injection

- 악의적인 사용자가 보안상의 취약점을 이용해,
  임의의 SQL문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위

- 공격이 비교적 쉬운편, 성공시 큰 피해를 입힐 수 있는 공격

 

공격 종류 및 방법

Error based SQL Injection

- 논리적 에러를 이용한 SQL Injection
- SQL 공격기법 중 가장 많이 쓰임, 대중적

SELECT * FROM Users WHERE id = 'INPUT1' AND password = 'INPUT2'
// 해커 개입
SELECT * FROM Users WHERE id = ''OR 1=1 --' AND password = 'INPUT2' 
=> SELECT * FROM Users

Union based SQL Injection

- Union 명령어를 이용한 SQL Injection

- SQL에서 Union 키워드는 두 개의 쿼리문에 대한 결과를 통합해 하나의 테이블로 보여주게 하는 키워드

  =(쿼리문을 하나로 합쳐주는 것)

- 정상적인 쿼리문에 Union 키워드를 사용해 인젝션에 성공하면, 원하는 쿼리문을 실행할 수 있음

- Union Injection을 성공하기 위해 두 가지 조건이 있음

SELECT *FROM Board WHERE title LIKE '%INPUT%' OR contents '%INPUT%'
//해커 개입
SELECT *FROM Board WHERE title '% ' UNION SELECT null,id,passwd FROM Users -- %'AND contents '%UNION SELECT null, id, passwd FROM Users --'%'

Blind SQL Injection

  1. Boolean based SQL
    - 단순히 참과 거짓의 정보만 알 수 있을 때 사용
    - 로그인 성공/실패 등의 메시지를 이용해 DB 테이블 정보 등을 추출할 수 있음
SELECT * FROM Users WHERE id = 'INPUT1' AND password = 'INPUT2'
// 개입
SELECT * FROM Users WHERE id = 'abc123' and ASCII(SUBSTR(SELECT name FROM infomation_shema.tables WHERE table_type='base table' limit 0,1),1,1)) > 100 --'AND password = 'INPUT2'
// 로그인이 될 때까지 시도
  1. Time based SQL
    - 마찬가지로 참과 거짓의 응답을 통해 DB 정보를 유추하는 기법
    - MySQL 기준으로 SLEEP 과 BENCHMARK 함수를 사용함

SELECT * FROM Users WHERE id = 'INPUT1' AND password = 'INPUT2'
//개입
SELECT *FROM Users WHERE id = 'abc123' OR (LENGTH(DATABASE())=1 AND SLEEP(2)) --' AND password = 'INPUT2'
// SLEEP할 때까지 시도

 

Stored Procedure SQL Injection

- 저장된 프로시저에서의 SQL Injection

저장 프로시저

- 일련의 쿼리들을 모아 하나의 함수처럼 사용하기 위한 것

공격에 사용되는 대표적인 프로시저

- MS-SQL의 xp_cmdshell로 윈도우 명령어를 사용할 수 있게 됨

 

- 공격자가 시스템 권한을 획득해야 해서 난이도⬆️

- 성공시 서버에 직접적인 피해를 입힐 수 있음

 

Mass SQL Injection

- 다량의 SQL Injection 공격

- 2008년에 처음 발견됨

- 기존 SQL Inject과 달리 한번의 공격으로 다량의 DB가 조작돼 큰 피해를 입힘

- 보통 MS-SQL을 사용하는 ASP 기반 웹 앱에서 많이 사요욈

- 쿼리문은 HEX 인코딩 방식을 사용해 공격함

- 보통 DB값을 변조해 DB에 악성스크립트를 삽입, 사용자들이 변조된 사이트에 접속 시 좀비 PC로 감염됨

- 이렇게 감염된 좀비 PC들은 DDOS 공격에 사용됨

 

대응 방안

- 입력 값에 대한 검증

- Prepared Statement 구문 사용

- Error Message 노출 금지

- 웹 방화벽 사용

'CS' 카테고리의 다른 글

ep 08-3.SQL vs. NoSQL  (0) 2023.01.09
ep 08-1.교착상태  (0) 2023.01.08
ep 07-2. 트랜잭션  (0) 2023.01.01
ep 07-1. 정규화  (0) 2023.01.01
ep 06-1.Hash  (0) 2022.12.18