일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 정보보안기사
- System
- webhacking.kr
- Shell code
- Spring Framework
- Pwnable.kr
- OS
- PWN
- LOB
- webhacking
- pwnable
- 웹해킹
- Spring MVC
- BOF
- Spring
- hacking
- stack overflow
- 해킹
- wargame
- Payload
- 정보보안기사 실기
- 워게임
- 운영체제
- system hacking
- Buffer Overflow
- Operating System
- 정보처리기사 실기
- SQL
- Lord of BOF
- 네트워크
- Today
- Total
DongDD's IT
SQL Injection - SQL, SQL Injection, SQL Injection 종류 본문
SQL Injection
SQL
- 데이터베이스의 Data를 관리하기 위한 특수한 목적의 프로그래밍 언어
SQL Injection
- 웹 어플리케이션이 Database에 접근하는 과정에 일반적이지 않은 query를 공격자가 악의적으로 임의의 query 구문을 실행하는 기법
- Code 인젝션 기법 중 입력 값을 조작하여 데이터베이스에 접근, 공격할 수 있는 기법
- 악의적인 SQL을 실행시키면서 데이터베이스를 조작할 수 있는 Code 인젝션
SQL Injection 종류
1) 논리적 에러를 이용하는 SQL Injection
- 논리적 에러를 발생시킬 수 있는 패턴을 이용한 인증 우회 기법
Example) SELECT * FROM user WHERE user_id='$id' AND user_pw = '$pw'
- 위와 같은 table이 있다고 생각한다.
- 다음과 같은 형태의 query로 Login을 처리한다고 할때 보호기법이 없다면 논리적 에러를 이용하여 SQL Injection을 시도할 수 있다.
- admin이라는 유저가 있다고 가정할 때, user_id=admin, user_pw= 1' or '1' = '1을 삽입하여 SELECT * FROM user WHERE user_id='admin' and user_pw = '1' or '1' = '1' 이라는 구문을 완성해 TRUE로 만들어 table을 가져오는 방법이다.
- 실제로 이러한 query가 완성되서 들어가게 되면 다음과 같이 table의 목록을 얻어낼 수 있다.
2) Union SQL Injection
Ref) Union : 두개 이상의 쿼리를 요청해 결과를 얻는 SQL 연산자
-> union의 query 결과와 기존 query의 결과의 row수가 같아야함
- 두개 이상의 쿼리를 사용한다는 점을 이용해 공격자가 원래의 요청에 한 개의 추가 쿼리를 삽입하여 정보를 획득하는 기법
Example) SELECT * FROM user WHERE user_id='$id' AND user_pw = '$pw'
- 위와 같은 query문으로 구성된 형태로 되어있다고 생각해보자.
- admin이라는 유저가 있다고 생각하고 union을 사용한 sql injection을 시도해볼 수 있다.
- user_id=admin' union select * from user--를 삽입하게 되면 SELECT * FROM user WHERE user_id='admin' union select * from user와 같은 쿼리가 완성된다. SQL의 주석기능을 이용하여 뒷부분을 지워주는 것이다.
-> 주석은 SQL의 버전, 종류에 따라 다를 수 있다. 여러 가지의 주석 사용 방법이 있음
위의 문자열을 넣어주면 다음과 같은 query가 완성되어 table의 목록을 얻어낼 수 있다.
3) Blind SQL Injection
- 임의의 SQL 쿼리를 이용해 정보를 얻어내는 것은 일반적인 SQL Injection과 비슷하나 쿼리 결과에 따른 서버의 반응을 통해 공격하는 기법
-> 참, 거짓에 따라 서버의 반응이 달라야 사용 가능
- SUBSTR함수나 ASCII 함수, Limit을 이용하는 방법이 있음
4) Stored Procedure SQL Injection
Ref) Stored Procedure
- DBMS에서 지원하는 저장 프로시져
- 운영 상 편이를 위해 만들어놓은 SQL 집합 형태
- 입력된 파라미터는 문자열로 처리되고 SQL 구문보다 성능이 좋음
- 취약한 프로시져를 이용해 쉘을 실행하거나 쿼리 결과를 얻어낼 수 있음
'IT 보안 > Web' 카테고리의 다른 글
HTTP Response Splitting (HTTP 응답분할, CRLF) (0) | 2017.09.26 |
---|---|
Cross Site Scripting (XSS) - XSS, XSS 종류 (0) | 2017.09.17 |