이번 페이지는 검색 결과를 이메일로 보내는 기능을 한다. 즉, 참과 거짓에 대한 메시지 내용을 화면에 출력하지 않고 동일한 메시지를 출력한다.
따라서 참과 거짓을 구별하기 위해 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 함수
'3. 웹 애플리케이션 취약점 진단 > 비박스를 활용한 웹 애플리케이션 취약점 진단' 카테고리의 다른 글
[비박스를 활용한 웹 취약점 진단] 4.XML/Xpath 인젝션 [Login Form] (0) | 2023.12.13 |
---|---|
[비박스를 활용한 웹 취약점 진단] 3-3.Blind SQL 인젝션 [WS/SOAP] (0) | 2023.12.13 |
[비박스를 활용한 웹 취약점 진단] 3-1.Blind SQL 인젝션 [Boolean-Based] (0) | 2023.12.12 |
[비박스를 활용한 웹 취약점 진단] 2-7.SQL 인젝션 [Stored (Blog)] (0) | 2023.12.12 |
[비박스를 활용한 웹 취약점 진단] 2-6.SQL 인젝션 [Login Form/Hero] (0) | 2023.12.12 |