boolean-based는 참과 거짓만을 가지고 공격을 한다. 공격 플로우를 보면 일단 원하는 데이터의 길이를 확인한다. 그리고 substr함수를 이용해서 원하는 값만 추출을 하고 그것이 참인지 아닌지 식별을 한다.
원하는 데이터의 길이 확인 select length((select table_name from tables limit 0,1));
참 거짓 확인 select length((select table_name from tables limit 0,1)) = 14; or select length((select table_name from tables limit 0,1)) = 5;(false value) 여기서 1은 참이고 0은 거짓이다
이제는 substr함수를 사용해보자. substr함수는 문자열을 자르는 함수로 자신이 원하는 문자열만 출력하게 할 수 있다.
-문자열을 잘라서 원하는 문자열만 출력 select substr((select table_name from tables limit 0,1), 1,1); 이 코드는 substr이라는 함수를 사용하고 자신이 자르고 싶은 문자열이 무엇인지 파라미터로 정의를 한다. 그리고 어디서부터 어디까지 자를 것인지 입력을 하면 된다. 위 코드는 tables라는 테이블에 있는 table_name 이라는 행에 있는 문자열의 0번째(컴퓨터 기준)에 있는 문자열을 정의한 것이고, 이 문자열을 1번째 부터 1번째 알파벳까지 자른다고 정의하는 것이다.
이 다음엔 ascii 함수를 이용해서 아스키 코드를 조회 하는 것이다.
이제는 본격적으로 대입을 해보자.
'or id=1 and substr(title, 1,1) = "G" # 이라는 구문을 산입을 하면 존재한다고 뜬다. id가 1이고 title 1,1 위치에 있는 알파벳이 G인 영화가 데이터 베이스에 존재한다는 것을 알 수 있다. 그리고 계속 'or id=1 and substr(title, 2,1) = "." # 을 입력하면 데이터 베이스에 존재한다고 나온다. 이렇게 하나 하나씩 수동으로 대입을 해서 데이터를 조회 하는 것은 굉장히 힘들고 비효율적이다. 그러니 boolean-based 공격을 할 땐 자동화 프로그램을 코딩하여 하면 된다.