본문 바로가기

Computer Security/Web

Time-based Blind Injection

이번에도 문법은 MySQL 기준으로 설명하겠습니다.


Blind SQL injection을 할때, True or False에 따라 결과값이 달라진다면, 간단히 해낼수있지만.

True or False에 따른 화면 결과값이 달라지지 않을때가 있습니다.


그럴땐 if함수와 sleep함수를 이용하면 됩니다.

그리고, 시간을 재야하기 때문에 파이썬등의 스크립트를 이용한 공격이 필수라고 생각됩니다..


Sleep은 대부분 아실텐데, sleep(x) 라면, x초간 멈추는겁니다.


그리고 if함수의 구성을 보자면,

if(조건,참일때 결과값,거짓일때 결과값)

입니다.


그래서 참일때, sleep(x)을 걸고, 요청을 보내서 response가 x초 이후에 도착했다면, True라고 판단하면 됩니다.

물론, 평소의 response가 오기까지 얼마나 걸리는지 알아두고, 적당한 x값을 넣어야겠죠. 


그리고 이 방법은 Insert문에서도 사용이 가능합니다.


insert into ~~ (c1, c2, c3) values (~,~,if(substr((select key from key_table),1,1) = 'a', SLEEP(4), 1));

대충 이런식으로, 인젝션이 가능합니다.