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 예시
- 위 사진은 웹 해킹을 위해 구축한 개인 웹서버이다.
- 오류를 일으키기 위해 '를 넣은 결과 다음과 같은 에러 메시지가 출력된다.
- 저런 오류 문구를 통해 SQL 공격이 가능하다.
- 그러나 요즘 웹 서버는 이러한 공격을 막기위해 에러 표출을 하지 않고있다.
- 따라서 에러가 발생하더라도 아무 메세지도 띄우지 않는 경우가 대다수이다.
2. Blind SQL Injection
- 이 공격 기법은 에러 메시지가 발생하지 않는경우 주로 사용하는 기법이다.
- Blind, 보이지 않는/가려진 이라는 의미로 사용하는 단어이며 특정 쿼리문으로 인한 결과가 참/거짓인 것 만 알 수 있을때 사용한다.
- 예를 들어 로그인에 성공하면 참/ 실패하면 거짓 인것 처럼 이런 결과를 알 수 있을때 사용한다.
Blind SQL Injection 예시
- 이처럼 참인 경우와 거짓인 경우가 비교하다면? blind sql 공격이 가능하다!
- 요즘은 에러 메시지를 출력하지 않게 웹서버를 구축하고 있어서 웬만한 SQL 공격은 Blind sql 공격으로 진행한다.
3. Union SQL Injection
- 이 공격 기법은 union 쿼리를 사용한 공격기법을 아우른다.
- 공격하는 쿼리와 다른 쿼리를 결합해 정보를 알아낼 때 사용하는 기법이다.
- 공격에 성공하기 위해선 쿼리 두개의 컬럼 수와 데이터 형이 같아야 한다는 조건이 있다.
- union 쿼리에 따라 중복 결과를 얻을수도 있고, 중복 결과를 제거하고 결과를 확인할 수 있다.
union SQL Injection 예시
- union과 select 절을 이용해 컬럼 갯수을 알아낸 예시이다.
- select는 검색을 하려던 테이블의 컬럼 명대신 컬럼 순서를 입력해 대신할 수 있는데, 그 점을 이용해 컬럼 수를 확인할 수 있다.
'Security > About Hacking' 카테고리의 다른 글
PHP로 제작한 웹쉘 : 사용한 윈도우 실행기 (0) | 2020.10.13 |
---|---|
[PHP 서버]디렉터리 리스팅 설정 (0) | 2020.09.20 |
XSS(Cross-Site-Script)란? (0) | 2020.09.06 |
CSRF란 무엇인가? 그리고 XSS와의 차이점은? (0) | 2020.08.15 |
관리자 페이지 노출 취약점 (0) | 2020.07.14 |