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
Spring Mybatis SQL Injection
MyBatis 바인딩 기법 MyBatis 에서는 #{} 바인딩과 ${} 바인딩이 있다 #{} 바인딩은 바인딩 값을 "" 로 감싸주어 바인딩을 해준다 [GET] http://localhost:8080/members?name=root@gmail.com [SQL] select * from..
theheydaze.tistory.com
참고 블로그
https://noirstar.tistory.com/264
SQL Injection 이란? (SQL 삽입 공격)
1. SQL Injection 1.1 개요 SQL Injection SQL Injection 이란 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작
noirstar.tistory.com
'∞. 기술 면접 > 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