WEB1

SQL injection(6) - time based

앞에서 우리는 blind sql injection에 대해 다루어 보았습니다.

blind sql injection 공격을 할 때 우리는 웹 페이지가 우리에게 반환해 주는 결과를 보고 비밀번호를 한 글자 한 글자 유추할 수 있었습니다. 

그러나 우리가 blind sql injection을 할 때 에러나 결과값을 반환하지 않는 경우가 있습니다. 

그럴 경우 우리는 time based sql injection을 수행해야 합니다. 

time based sql injection는 일반적으로  sleep()함수를 사용하여 수행합니다.

 

우리가 blind sql injection을 할 때는 밑의 쿼리문을 사용하여 

www.[공격할 사이트의 주소].php?pw=100' || id='admin' and substr(pw,1,1)=0-- -

반복문을 사용하여 id가 admin인 계정의 비밀번호를 가져오려고 노력할 것입니다. 

위의 쿼리문을 사용한다면 우리는 웹 사이트에서 우리에게 반환하는 값을 사용하여 id가 admin인 계정의 비밀번호를 찾을 것입니다. 

 

그러나 위에서 언급을 했던 것 처럼 웹 사이트에서 우리에게 어떠한 반환값을 주지 않는 경우가 있습니다. 이때 우리는 time based sql injection을 사용할 수 있습니다.

blind sql injection의 기본 원리는 위에서 우리가 사용한 blind sql injection의 쿼리에 and sleep(정지시킬 초)구문을 합쳐 쿼리의 결과값이 참이되면 sleep 문이 작동하여 몇 초간 딜레이가 생기고, 쿼리문의 결과값이 참이 아니라면 sleep문이 작동하지 않는 원리를 사용한 것입니다.

python을 사용하여 우리가 sql injection공격을 수행한다고 했을 때 우리는 time 모듈의 time()함수를 사용하여 time based sql injection공격을 수행할 수 있습니다.

sleep()함수가 필터링 당했을 경우 benchmark 함수를 사용하여 time based sql injection을 수행할 수 있습니다.

댓글

댓글 본문
버전 관리
2019STEALTH
현재 버전
선택 버전
graphittie 자세히 보기