상세 컨텐츠

본문 제목

SQL Blind Injection

Hacking/Web Hacking

by it thief 2020. 2. 25. 15:18

본문

SQL Blind Injection

쿼리의 결과를 참과 거짓만으로 만 출력하는 페이지에서 사용하는 인젝션이다.

출력 내용이 참과 거짓 밖에 없어서 추측하여 결과를 조회한다.

 

기초 구문

ascii(substr((select table_name from information_schema.tables table_type="테이블 타입" limit 0,1),1,1)) = 63

substr(string,시작위치,길이) : 시작위치에서 길이만큼 데이터를 가져온다.

substring(string,시작위치,길이) : 위와 동일

length(string) : 길이 

right(string,length)  : 오른쪽에서 길이만큼 문자를 가져온다.

left(string,length) : 왼쪽에서 길이만큼 문자를 가져온다.

 

Boolean-Based

Blind 방식은 일일이 손으로 작업하기에는 시간이 오래 걸려서 툴이나 직접 프로그램을 만들어서 시도하는 것이 현명한 방법이다. 우리는 데이터베이스 이름이 "bWAPP"인걸 아니 "bWAPP"에 대해서만 다루겠다. 

 

1' or 1=1#을 넣어보면 영화가 존재한다고 뜬다. iron man' and 1=1#을 해보면 존재하지 않는다 라고 뜬다. 

참일 때는 존재한다. 거짓일 때는 존재하지 않는다라고 구문이 뜨는 것을 확인할 수 있다. 

 

1' or length(database())=5#를 하면 존재한다라고 뜨니 데이터베이스 이름의 길이는 5이다.

1' or ascii(substr(database(),1,1))=98#를 대입하면 존재 한다라고 뜬다. 데이터베이스 이름의 첫 번째 글자는 'b'이다

이런 식으로 하나씩 대입해보면서 Injection을 하는 것이다

 

Time-Based

sleep()이란 함수를 이용하여 참일 때(or 거짓일 때) 돌아오는 시간에 따라 값을 추측하는 Injection이다. 

 

1' or length(database()) and sleep(5) #의 구문을 이용하면 데이터베이스 길이가 5이면 5초 뒤에 반응이 온다. 

다른 방법도 Boolean이랑 다를 것이 없다 sleep() 함수를 이용하여 결과만 다르게 볼 뿐 참과 거짓을 이용하여 판별하는 공격이다.

 

Web Service/SOAP

SOAP에서는 주석처리가 안된다. 주석처리가 안되면 ' or 1=1#방식은 안되고 ' or '1'='1 형식으로 인젝션을 삽입하여한다. 

대충 데이터 쿼리 구조가 select ticket from movie where title = ' + title + ' 형식으로 되어 있을텐데 우리는 title부분에 ' or '1'='1의 구조를 넣어서 select ticket from movie where title = ' + ' or '1'='1 + '과 같이 쿼리 구조문이 된다. 

 

Iron Man' and length(database()) = 5 and '1'='1 : 아이언 맨도 참이고 데이터 베이스의 길이도 'bWAPP'이므로 5이다.  따라서 참이 되므로 티켓수가 출력되는 것을 볼 수 있다.

 

 

'Hacking > Web Hacking' 카테고리의 다른 글

Broken Auth(Insecure Login Forms, Password Attack,Week Password)  (0) 2020.02.27
XML/Xpath Injection  (0) 2020.02.25
SQL Injection(Stored)  (0) 2020.02.24
SQL Injection(Login)  (0) 2020.02.22
SQL Injection(AJAX/JSON/jQuery/CAPTCHA)  (0) 2020.02.22

관련글 더보기

댓글 영역