05. 기술 면접 - 데이터베이스 - SQL 인젝션
공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다
SQL Injection 과 종류
SQL 인젝션이란, 데이터베이스에 전송되는 SQL 쿼리문을 조작하여 데이트를 변조하거나, 허가 되지 않은 정보에
접근하는 공격이다. 주로 개인정보를 빼낼 때 많이 사용되는 기법이다
Error based SQL Injection
논리적 에러를 이용한 SQL Injection
password 부분을 주석처리하여 패스워드를 다르게 입력하더라도 해당 계정정보를 조회할 수 있게 된다
Union based SQL Injection
Union 명령어를 이용한 SQL Injection
SQL 에서 Union 키워드는 두 개의 쿼리문에 대한 결과를 통합해서 하나의 테이블로 보여주게 하는 키워드 입니다. 정상적인 쿼리문에 Union 키워드를 사용하여 인젝션에 성공하면, 원하는 쿼리문을 실행할 수 있게 됩니다. Union Injection을 성공하기 위해서는 두 가지의 조건이 있습니다. 하나는 Union 하는 두 테이블의 컬럼 수가 같아야 하고, 데이터 형이 같아야 합니다.
Blind SQL Injection(Boolean based SQL)
Blind SQL Injection은 데이터베이스로부터 특정한 값이나 데이터를 전달받지 않고, 단순히 참과 거짓의 정보만 알 수 있을 때 사용합니다. 로그인 폼에 SQL Injection이 가능하다고 가정 했을 때, 서버가 응답하는 로그인 성공과 로그인 실패 메시지를 이용하여, DB의 테이블 정보 등을 추출해 낼 수 있습니다.
Blind SQL Injection(Time based SQL)
Stored Procedure SQL Injection
저장된 프로시저 에서의 SQL Injection
저장 프로시저(Stored Procedure) 은 일련의 쿼리들을 모아 하나의 함수처럼 사용하기 위한 것입니다. 공격에 사용되는 대표적인 저장 프로시저는 MS-SQL 에 있는 xp_cmdshell로 윈도우 명령어를 사용할 수 있게 됩니다. 단, 공격자가 시스템 권한을 획득 해야 하므로 공격난이도가 높으나 공격에 성공한다면, 서버에 직접적인 피해를 입힐 수 있는 공격 입니다.
Mass SQL Injection
다량의 SQL Injection 공격
2008년에 처음 발견된 공격기법으로 기존 SQL Injection 과 달리 한번의 공격으로 다량의 데이터베이스가 조작되어 큰 피해를 입히는 것을 의미합니다. 보통 MS-SQL을 사용하는 ASP 기반 웹 애플리케이션에서 많이 사용되며, 쿼리문은 HEX 인코딩 방식으로 인코딩 하여 공격합니다. 보통 데이터베이스 값을 변조하여 데이터베이스에 악성스크립트를 삽입하고, 사용자들이 변조된 사이트에 접속 시 좀비PC로 감염되게 합니다. 이렇게 감염된 좀비 PC들은 DDoS 공격에 사용됩니다.
SQL Injection - Error based SQL Injection 와 Union based SQL Injection
- 정상적인 웹 요청 및 응답에서는, 사용자가 ID 를 입력하면 서버는 SQL 쿼리문을 통해 데이터베이스에 접근하여
해당 ID 가 있는 지 검색하고, 정보가 있으면 검색 결과를 사용자에게 전송한다. 이 때의 SQL 쿼리문은 아래와 같다
SELECT name, email FROM users WHERE id = {요청 id}
그러나 만약 ID 입력칸에 1' or '1'=1을 입력한다면, WHERE 조건이 id = '1' 또는 '1'='1' 이 되어 항상 True 인 구무이
되어버린다. 즉, where 구문이 우회된 채로 SQL 쿼리문이 실행되기 때문에 데이터베이스 내의 모든 사용자의 정보고 노출된다
SELECT name, email FROM users WHERE ID='1' or '1'='1';
만약 공격자가 ID 입력칸에 1 'UNION SELECT name, pw FROM user#' 을 입력한다면, 공격자가 입력한 SELECT 문이 그대로 실행되어 user 테이블의 pw 와 name 이 모두 출력된다
SELECT name, email FROM users WHERE id = '1' UNION SELECT name, pw FROM users#'
Spring 을 이용해 따로 정리한 글 링크 https://theheydaze.tistory.com/587
참고 블로그
https://noirstar.tistory.com/264
'∞. 기술 면접 > 4. 데이터베이스' 카테고리의 다른 글
06. 기술면접 - 데이터베이스 - 인덱스 (Index) (0) | 2021.10.17 |
---|---|
Spring Mybatis SQL Injection (0) | 2021.10.16 |
04. 기술 면접 - 데이터베이스 - 조인 (Join) (1) | 2021.10.15 |
03. 기술 면접 - 데이터베이스 - 트랜잭션 (Transaction) (0) | 2021.10.12 |
01. 기술면접 - 데이터베이스 - 데이터베이스 {커넥션} 풀 (DBCP, DataBase Connection Pool) (0) | 2021.10.07 |
댓글
이 글 공유하기
다른 글
-
06. 기술면접 - 데이터베이스 - 인덱스 (Index)
06. 기술면접 - 데이터베이스 - 인덱스 (Index)
2021.10.17 -
Spring Mybatis SQL Injection
Spring Mybatis SQL Injection
2021.10.16 -
04. 기술 면접 - 데이터베이스 - 조인 (Join)
04. 기술 면접 - 데이터베이스 - 조인 (Join)
2021.10.15 -
03. 기술 면접 - 데이터베이스 - 트랜잭션 (Transaction)
03. 기술 면접 - 데이터베이스 - 트랜잭션 (Transaction)
2021.10.12