본문 바로가기
3. 웹 애플리케이션 취약점 진단/비박스를 활용한 웹 애플리케이션 취약점 진단

[비박스를 활용한 웹 취약점 진단] 3-2.Blind SQL 인젝션 [Time-Based]

by Robert8478 2023. 12. 13.

이번 페이지는 검색 결과를 이메일로 보내는 기능을 한다. 즉, 참과 거짓에 대한 메시지 내용을 화면에 출력하지 않고 동일한 메시지를 출력한다.
따라서 참과 거짓을 구별하기 위해 sleep() 함수를 사용한다.

[난이도 하]
검색 결과가 동일하기 때문에 ' 를 넣어도 오류메시지는 보이지 않는다. 그래서 이번엔 sleep() 함수를 써볼 것이다.
sleep() 함수는 인자로 정수형 값을 받는데 입력한 숫자의 초 단위로 응답이 지연된다. 이를 이용해보자.

' or 1=1 and sleep(4)# 구문을 넣었더니 로딩이 4초간 멈췄다가 검색이 되는 것을 볼 수 있다. 이는 참이기 때문에 4초간 멈춘거라고 보면 된다. 전과 같은 문제와 같은 쿼리를 사용하되 뒤에 and sleep() 함수만 붙여주면 된다.

' or 1=1 and length(database())=5 and sleep(4)# 를 넣었더니 4초간 지연 시간이 생겼다. 즉, database명 길이는 5자 라는 것이다. 그 다음엔 substr도 사용해 보자.

' or 1=1 and substr(database(),1,1)='a' and sleep(4)# 마찬가지로 'a' 에서는 바로 로딩이 되나 'b' 에서는 4초간 지연이 생겼다. 이와 같은 방식으로 boolean based와 똑같이 풀면 된다.

계속 인젝션을 진행하면서 ' or 1=1 and substr((select password from heroes where login='neo'),1,7)='trinity' and sleep(4)#   쿼리를 주어서 neo 사용자의 비밀번호 까지 알아낼 수가 있었다.


[난이도 중,상]
난이도 중 - addslashes 함수
난이도 상 - mysql_real_escape_string 함수