본문 바로가기

1. Web hacking (웹 해킹)/1) Write UP

[2022/09/17] SQL Injection

SQL Inhection = 구조화된 질의 언어를 주입하는 공격

 

SQL은 관계형 데이터베이스를 생성, 수정을 하기 위한 관리 시스템인 RDBMS( Relational Database Management System)의 언어이다.

 

보통 웹사이트들은 "사용자의 입력값" + "미완성된 SQL 구문" 으로 이루어져있어 사용자가 입력값을 입력하고 완성된 SQL 구문이 되어서 DB에 질의요청을 하는데 이때 입력값에 SQL 쿼리문이 주입되면 변조된 SQL 질의가 DB에 접근하는 것이다. 

 

취약점 분석

1) 사용자 입력(파라미터) - 숫자형

 

→ 산술연산자를 통해 식별가능

ex) www.abcdefg.com/wiew&  idx=1  와 www.abcdefg.com/view&idx=4-3  이 같은 값을 출력하면 취약점이다.

이때 웹사이트의 코드는 

$query = "select*FROM board WHERE idx = {$idx}"; 로 유추 할 수 있다.

그러므로  {$idx} 에 4-3이 들어가면 그대로 연산해버리는 것이다.

 

→ case when 조건 then 값1 else 값2 end 삽입

조건이 참이면 값1을 반환하고 거짓일 경우 값2를 반환하는 것이다.

이것이 가능하다면 SQL 인젝션이 취약하다고 확정이 가능하다.

 

2) 사용자 입력(파라미터) - 문자형

 

연결연산자를 통해 식별가능

ex) 검색창에 test를 te' 'st 라고 검색했는데 검색이 되었다면 SQL 취약점이 있다. 

why? 'te'와 'st'로 검색되었기 때문

 

공격종류

1) 인증우회공격    인증기능에 SQL 삽입

출처 : 융보공귀요미이유정

--이후로 다 주석처리 되어 참이기 때문에 공격자가 data를 탈취 가능하다.

 

2) 데이터 조회 공격 → 가장 많이 일어나는 공격으로 SQL 취약점이 발생되는 곳에 SQL 인젝션 삽입을 통해 DB 내의 데이터를 조회

 

3) 시스템 명령어 실행 공격 → SQL 서버의 시스템 명령어 실행 공격 ★제일 취약, BUT 조건이 까다로움

 

4) 데이터 조작 ★공격 어렵고 까다로움

 

 

실습

① 인증우회 

                ⅰ) 무단로그인 [로그인 Query : SELECT * FROM member WHERE id = ''and pw='']

                        * id를 알고 있을때

                                  In-line Quary : id' or '1'='1(주석사용 X 그대로 이어지게)

                                  Terminating Query : id' # / id'-- (주석사용 O / 불가능 할 수 있음) 

                        * id를 모르고 있을때

                                  In-line Quary : ' or  1=1 or'1'='(최상위 id로 로그인)

                                  Terminating Query : 'or 1=1 #

 

                ⅱ) 비밀글 무단 열람  [Query : SELECT * FROM board WHERE idx = 2 and password='']

                        * 비밀글 Password에 SQL삽입

                                  In-line Quary : ' or  '1'='1 (최상위 글 열람)

                                                          ' or idx = value and '1'='1 (value에 해당하는 글을 볼 수 있음)

                                  Terminating Query : 'or '1'='1' # (최상위 글 열람)

                                                                    ' or idx = value # (value에 해당하는 글을 볼 수 있음)

                          최상위 글만 보일 경우 idx를 파악해야함

                ⅲ) 게시글 무단 삭제 ( 파라미터 변조 취약점 )

                        * 로직분석

                                  ex) 1차 : Password 검증 logic 파악

                                                    → SELECT * FROM board WHERE idx = value and password = ''or 1=1 #'

                                        2차 : 삭제 logic

                                        위 경우엔 검증할 때 참만 만들면 됨 (value 중요)★

                                        BUT !! 한번에 삭제하는 쿼리의 경우 모든 게시글 삭제 가능

 

                ⅳ) idx 파라미터가 취약할 경우

                        * 인증을 할 때 value 뒤를 주석처리 (열람 삭제 모두 가능)

                                   → SELECT * FROM board WHERE idx = value # and password = ''

'1. Web hacking (웹 해킹) > 1) Write UP' 카테고리의 다른 글

[2022.10.08] CSRF  (0) 2022.10.09
[2022.10.01] XSS  (0) 2022.10.08
[2021.09.18] OS Command Injection과 XXE Injection  (0) 2021.09.19
[2020.11.28] XSS 게임실습 5  (0) 2020.11.28
[2020.11.21] XSS 게임실습 5  (0) 2020.11.21