억대 연봉을 위한 인간수업
article thumbnail
Published 2020. 9. 6. 23:16
SQL Injection 이란? Security/About Hacking
반응형

SQL injection은 보안이나 IT 공부하거나, 그렇지 않더라도 뉴스나 다른 매체를 통해 들어본 적이 있을 법한 용어이다.

그만큼 웹 취약점에 있어서 SQL Injection은 흔하게 발생하며, 가장 크리티컬한 공격을 할 수 있는 기법이기 때문이다.

웹 취약점을 발표하는 OWSAP(Open Web Application Security Project)에서도 매년 언급할 정도로 파급력 있는 공격기법이 SQL Injection이다. 그렇다면 이 용어는 어떤것을 의미할까?

 

 

 

 

SQL Injection 이란?

 - SQL은 DB에서 사용하는 프로그래밍 언어이다. 

 - Injection은 무언가를 주입/주사 할때 사용하는 단어이다

 - 따라서 SQL Injection은 프로그래밍 언어를 주입한다는 의미로 해석 할 수 있다.

 - 보안에서 말하는 SQL Injection은 SQL문을 이용해 웹 서버에 공격문을 주입하는 기법이다.

 - 가장 많이, 빈번하게 일어나는 공격이며 그만큼 효과적인 공격이다.

 - DB를 공격하는 기법으로 SQL Injection 관련 취약점이 존재하면 웹서버의 정보가 모두 털릴 수 있을정도로 치명적이다.

 - 일반적으로 로그인 창, 검색창 등 입력이 가능한 곳에 SQL문을 넣어 입력값을 조작하는 공격으로 이루어진다.

 - 입력값에 따른 결과로 로그인 우회/ DB 데이터 추출 / 시스템 명령 수행 등의 작업이 가능하다.

 - 문법이나 특징에 따라 여러 종류의 공격 기법이 존재한다.

 

 

 

 

 

 

SQL Injection 공격기법

1. Error based SQL Injection

 - 단어를 직역하면 에러 기반 SQL Injection 이다.

 - 말 그대로 에러를 이용한 공격 기법으로, 고의로 SQL 문에 에러를 발생시키는 기법이다.

 - 에러 메세지를 통해 쿼리문의 구성을 추측할 수 있다.

 - 또한 DB의 테이블명, 컬럼명, 데이터 내용까지도 알아낼 수 있다.

 

Error based SQL Injection 예시

error based sql injection 예시

 - 위 사진은 웹 해킹을 위해 구축한 개인 웹서버이다.

 - 오류를 일으키기 위해 '를 넣은 결과 다음과 같은 에러 메시지가 출력된다.

 - 저런 오류 문구를 통해 SQL 공격이 가능하다.

 - 그러나 요즘 웹 서버는 이러한 공격을 막기위해 에러 표출을 하지 않고있다.

 - 따라서 에러가 발생하더라도 아무 메세지도 띄우지 않는 경우가 대다수이다.

 

 

 

 

 

2. Blind SQL Injection

 - 이 공격 기법은 에러 메시지가 발생하지 않는경우 주로 사용하는 기법이다.

 - Blind, 보이지 않는/가려진 이라는 의미로 사용하는 단어이며 특정 쿼리문으로 인한 결과가 참/거짓인 것 만 알 수 있을때 사용한다.

 - 예를 들어 로그인에 성공하면 참/ 실패하면 거짓 인것 처럼 이런 결과를 알 수 있을때 사용한다.

 

Blind SQL Injection 예시

 

SQL 문을 통한 결과가 참인 경우
SQL 문을 통한 결과가 거짓인 경우

 - 이처럼 참인 경우와 거짓인 경우가 비교하다면? blind sql 공격이 가능하다!

 - 요즘은 에러 메시지를 출력하지 않게 웹서버를 구축하고 있어서 웬만한 SQL 공격은 Blind sql 공격으로 진행한다.

 

 

 

 

 

 

3. Union SQL Injection

 - 이 공격 기법은 union 쿼리를 사용한 공격기법을 아우른다.

 - 공격하는 쿼리와 다른 쿼리를 결합해 정보를 알아낼 때 사용하는 기법이다.

 - 공격에 성공하기 위해선 쿼리 두개의 컬럼 수와 데이터 형이 같아야 한다는 조건이 있다.

 - union 쿼리에 따라 중복 결과를 얻을수도 있고, 중복 결과를 제거하고 결과를 확인할 수 있다.

 

union SQL Injection 예시

union쿼리와 select 절을 사용해 컬럼 갯수 알아내는 예시

 - union과 select 절을 이용해 컬럼 갯수을 알아낸 예시이다.

 - select는 검색을 하려던 테이블의 컬럼 명대신 컬럼 순서를 입력해 대신할 수 있는데, 그 점을 이용해 컬럼 수를 확인할 수 있다.

반응형
profile

억대 연봉을 위한 인간수업

@회뜨는참치

이 글이 당신에게 조금이라도 도움이 된다면 좋겠습니다.