상세 컨텐츠

본문 제목

웹 보안 - SQL 인젝션

엔지니어일기/이것저것

by jaws99 2019. 8. 22. 00:13

본문

반응형

SQL 인젝션

 

"SQL"을 "Injection"한다.

SQL은 데이터를 관리하는 프로그래밍 언어이다.

Inject는 주사, 주입하다라는 뜻을 갖고 있다.

 

말 그대로 프로그래밍 언어를 주입해서 DB에 접근하고 변조할 수 있는 기법이다.

 

SQL 인젝션을 시작하기 전 문법에 대해서 조금 알아야 하는데,

SELECT ~ FROM ~ (WHERE) 구문이 많이 쓰인다.

이름 나이 학번
김** 20 20191234
이** 21 20185678

학생이라는 이름을 갖는 테이블이 있다고 가정하면,

 

SELECT 이름, 나이 FROM 학생인 경우는 이런 테이블을,                    

이름 나이
김** 20
이** 21

 

SELECT * FROM 학생 WHERE 학번='20191234'인 경우

이름 나이 학번
김** 20 20191234

이렇게 데이터를 다룰 수 있다.

 

SQL 인젝션 기법은

WHERE 뒤 내용을 우회하거나

UNION을 사용한다.

 

- WHERE

SELECT * FROM 학생 WHERE 학번='20191234'일 때 김**의 정보만 확인할 수 있었지만,

 

학번을 검색하는 창에다가

1' or 1='1 이라고 적어주면

 

SELECT * FROM 학생 WHERE 학번='1' or 1='1' 로 이해하고 WHERE뒤 내용은 TRUE가 돼서

모든 학생의 이름 나이 학번을 출력하게 될 것이다.

 

- UNION

UNION은 합집합의 개념으로

 

SELECT 이름, 나이 FROM 학생 WHERE 학번='1' UNION SELECT 학번, 비밀번호 FROM 학생#'

UNION을 사용할 때는 앞의 칼럼의 개수와 추가한 SELECT 구문의 칼럼의 개수를 맞춰줘야 한다.

 

#은 주석처리를 위해 사용하고 맨 뒤에 '의 짝이 맞지 않아 오류가 날 수 있으므로 추가한다.

비밀번호라는 칼럼이 앞 예제에는 없어서 에러가 날 수 있지만, 만약 있는 테이블이라면 비밀번호까지 보이게 될 것이다.(물론 비밀번호는 암호화를 하긴 한다.)

 

Blind SQL Injection이라는 기법이 있는데 SQL Injection과의 차이를 간단하게 정리한 PPT가 있다.

https://www.slideshare.net/PrashantPhatak/difference-between-sql-injection-and-blind-sql-injection

 

Difference Between SQL Injection and Blind SQL Injection

What is SQL Injection? What is Blind SQL Injection? Difference between SQL Injection And Blind SQL Injection Damages Mitigations This attack occur when an atta…

www.slideshare.net

 

큰 차이는 결과를 볼 수 있는지, 데이터 구조를 바꿀 수 있는지라고 나와있다.

 

Blind SQL Injection은 데이터를 직접적으로 볼 수 없어서 결과의 변화를 보고 데이터를 찾아낸다.

 

Error를 발생시켜서 찾아내는 Error Blind SQL Injection,

응답 시간을 조작시켜서 찾아내는 Time Blind SQL Injection이 있다.

 

Blind SQL Injection을 공부할만한 좋은 책이 있다.(부팀장님 보고 계시죠?)

https://ridibooks.com/v2/Detail?id=2773000024

 

실습으로 배우는 SQL injection

Web Application Server 에서 사용자가 입력한 값이 충분히 필터링 되지 않은 Query 를 Request 할 시에 보안 위협들을 이해할 수 있도록 설명하고 있습니다. 제공되는 실습사이트를 기반으로 Blind SQL injection, Time Based SQL injection, Error Based SQL injection 와 같은 다양...

ridibooks.com

PHP, SQL을 하나도 모른 상태로 시작하다 보니 문제를 푸는 시간이 좀 걸렸지만,

Blind SQL Injection이 뭔지, 어떤 기법이 있고, 어떻게 사용하는지 공부할 수 있었다.

 

책에서 다루는 16번 문제까지 해결하니 어느 정도 자신이 생겼다.

 

※책을 보면 11번 문제부터 직접 코딩하라는 어려운 과제(?)를 내주시는데 처음 하시는 분들을 위해 소스를 준비했다.

 

12번은 이렇게 푸는 문제가 아니지만 서버 IP, 포트를 모를 경우 이렇게 requests를 받으면 된다.

 

 

쿠키는 크롬 기준 F12-Application 메뉴 - Stroage - Cookies에서 확인할 수 있다.

Value 밑에 값을 복사 붙여 넣기 하면 된다.

반응형

'엔지니어일기 > 이것저것' 카테고리의 다른 글

WordPress Plugin 취약점 분석  (0) 2019.09.19
컴퓨터구조 - 해저드  (0) 2019.08.23
컴퓨터구조 - 파이프라이닝  (0) 2019.08.17
웹 보안 - 브루트 포스  (0) 2019.08.16
OP.GG 크롤링하기  (0) 2019.08.08

관련글 더보기