본문 바로가기
Web/Hacking

SQL Injection

by 09337 2020. 7. 14.

SQL Injection 공격이란?

: 파라미터에 구문을 넣어 쿼리가 동작되는 공격기법

 

파라미터란?

: URL에서 동적으로 결과를 생성하는 어플리케이션에 전달하는 값

(위 URL에서 ' ? ' 뒤에 오는 구문을 나타낸다.)

 

웹 어플리케이션의 뒷단에 있는 DB에 질의(쿼리)하는 과정 사이에 일반적인 값 외에 내용을 변조하는 악의적인 의도를 갖는 구문을 함께 삽입하여 공격자가 원하는 SQL 쿼리문을 실행한다.

이런 과정을 통해 불법 로그인을 하거나, DB 데이터를 열람하거나, 시스템 명령을 하는 등등의 비정상적인 DB 접근을 시도하는 것이고,
이것이 대표적인 웹 해킹 기법인 SQL Injection이다.


SQL Injection 로그인 인증 우회

 

정상적인 로그인 인증 과정

  1. 클라이언트가 웹 서버에게 다음과 같은 로그인 정보를 제공한다.
  2. 서버는 해당 정보가 DB에 존재하는지 검색한다.
  3. 정보가 존재한다면 로그인을 허가
  4. 3-1. 존재하지 않는다면 로그인을 불가
  5. 로그인 성공
  6. 4-1. 로그인 실패

 

SQL Injection을 통한 비정상적인 로그인 인증 과정

  1. 클라이언트가 서버에게 변조된 파라미터가 포함하는 페이지를 요청한다.
  2. 서버가 DB에게 변조된 쿼리 동작을 요청한다.
  3. DB가 서버에게 변조된 쿼리 결과를 전송한다.
  4. 서버에서 클라이언트에게 변조된 페이지 내에 DB정보를 전송함으로써 로그인을 성공한다.

SQL Injection 사용 방법

위 쿼리문을 보면, '' 안에 아무런 값이 들어가있지 않는다.
해당 쿼리를 기본으로 제공한 쿼리문이라 지정하고, 따옴표 안에 구문을 삽입하여 SQL 쿼리문을 실행하는 방식으로 이뤄진다.

 

파라미터에 들어갈 값

  1. ?a='or 1=1--
  2. ?a='or 1=1#
  3. ?a=1'='1'or'1
  4. ?a=admin' --

쿼리에 적용되는 값

  1. a=''or 1=1--'
  2. a=''or 1=1#'
  3. a='1'='1'or'1'
  4. a='admin'--'

1, 2번은 각각 Mysql과 Oracle에서 쓰이는 주석 구문이다.

파라미터에 들어갈 값을 입력함으로써, 기본으로 제공된 쿼리의 비어있는 따옴표 안에 구문이 들어가 위와 같이 적용되어 SQL Injection이 실행된다.

여기서 or '둘 중 하나라도 참이면 참이다'라는 의미를 가진 연산자이기 때문에, or 1=1 이라는 값을 넣어 무조건 참이 되는 쿼리문을 만들어준다.

댓글