-
SQL Injection [5주차]모의해킹스터디5기(feat.Normaltic) 2023. 12. 7. 16:28
해킹을 접하면서 가장 많이 들었던 공격기법이 아닐까 싶다.
이번 주는 SQL Injection에 대해 정리한다.
SQL Injection이란?
웹 페이지를 보면 입력을 받는 부분들이 있다.
예를 들면 로그인 페이지의 ID와 비밀번호를 입력하는 곳, 게시판의 키워드를 검색하는 곳, 유튜브의 검색도 마찬가지다.
서버의 입장에서 보면 이러한 부분들로 문자열을 받아 DB에 관련 자료들을 조회하여 보여준다.
이러한 입력란에 일반적인 문자열이 아닌 악의적인 SQL 구문을 넣어 DB로 하여금 비정상적인 동작을 하도록 하는 것,
이것이 SQL Injection이다.
원리
기본적으로 SQL 구문 사이에 들어가야 하기 때문에 내가 입력하는 SQL 문이 어떻게 이루어져 있는지를 어느정도 알고 있어야 한다.
로그인 페이지를 예를 들면
SELECT * FROM user WHERE id = '{$userName}' AND password = '{$password}'
이런 식으로 구성되어 있다.
만약 userName에 doldol, password에 1234를 입력하면
SELECT * FROM user WHERE id = 'doldol' AND password = '1234'
라는 SQL문으로 DB에 정보를 추출할 수 있게 된다.
1. 주석처리 #
먼저 활용할 수 있는 것이 SQL문에서 주석 처리를 의미하는 # 이다.
만약 userName에 doldol' # 을 입력하면
SELECT * FROM user WHERE id = 'doldol' #' AND password = ''
비밀번호에 어떤 걸 넣든간에 # 뒤에 있으니 주석처리가 된다.
결국 id가 doldol이기만 하면 비밀번호와 상관없이 데이터가 추출되게 된다.
SELECT * FROM user WHERE id = 'doldol'
2. OR '1'='1'
다음으로 SQL 구문에서 사용되는 논리연산자를 사용하는 방법이다.
AND 와 OR 모두 활용하는 방법이 있지만 OR를 먼저 소개하겠다.
만약 userName에 doldol' OR '1'='1' # 을 입력하면 (앞에서 배운 #도 활용)
SELECT * FROM user WHERE id = 'doldol' OR '1'='1' #' AND password = ''
OR를 기준으로 앞의 조건을 만족하거나 뒤의 조건을 만족하면 되는데,
id가 doldol 이거나 '1'='1' 이면 되는데, '1'='1'은 무조건 참이기 때문에 결국 모든 데이터가 추출되게 된다.
기본적인 절차
SQL Injection을 어느정도 배웠으니 이걸 사용하는 메뉴얼(?)을 알아보자.
- 먼저 사이트를 이용해보자.
- 사이트가 어떤식으로 구성되어 있는지 아는 것이 우선이다. 입력란이 어떤 종류인지에 따라 구성하는 SQL문이 다르기 때문에 대표적인 SQL문 구조를 파악해놓고, 웹사이트를 직접 만들어 보는 것도 좋다.
- 무슨 데이터가 오가는지 확인하라.
- 이전에 Burp Suite라는 프로그램을 배웠다. HTTP history를 통해 페이지에 대한 정보를 얻을 수 있으니 사이트를 둘러보면서 활용할 수 있을만한 데이터를 먼저 확인해야 한다.
- SQL Injection이 삽입되는지 확인하라.
- 여기서 활용할 수 있는 게 ' AND '1' = '1 구문이다. AND는 앞의 조건과 뒤의 조건이 무조건 참이어야 참인 연산자인데, 아이디나 비밀번호 입력란에 이 구문을 사용한다고 해도 별 다를 것이 없다. 어차피 '1'='1'은 항상 참이기 때문에. (이걸 항등원이라고 표현하기도 하던데) 그래서 이 구문을 넣고 정상적으로 로그인이 된다면 SQL Injection을 사용할 수 있는 환경이라는 뜻이다.
결론
SQL Injection에 대해 기본적인 정보에 대해 알아봤는데 이번에 알아본 것은 겉핡기 수준이다. 앞으로 배울 UNION이나 Error based, Blind처럼 더 심화된 SQL Injection도 있다. SQL 언어를 사용하는 공격 기법이기 때문에 SQL 언어를 얼마나 알고 있고 어떻게 사용하느냐에 따라 앞으로 관련된 새로운 기법도 나오지 않을까 생각한다.
웹 페이지는 앞으로도 계속 사용될 것이기 때문에 해킹에 있어서 SQL Injection은 해커들이 알아야 하는 가장 기본적인 기법이 아닐까 싶다. 지금 잘 배워놓자.
'모의해킹스터디5기(feat.Normaltic)' 카테고리의 다른 글
Error Based SQLi / Blind SQLi [7주차] (0) 2023.12.08 UNION SQL Injection [6주차] (0) 2023.12.08 Burp Suite [4주차] (0) 2023.11.27 로그인 로직 [3주차] (0) 2023.11.21 데이터베이스[2주차] (0) 2023.11.14 - 먼저 사이트를 이용해보자.