SQL Injection (Blind)

justugi·2024년 6월 15일
0

DVWA

목록 보기
8/16

주의사항 : 이 포스팅은 개인 학습 및 교육적 목적으로 작성되었으며, 제공하는 정보를 악용하여 불법적인 행위를 하는 것은 엄격히 금지되어 있습니다. 타인의 시스템에 대한 접근 권한을 얻기 위해 명시적인 동의를 받아야 하며, 이러한 기술을 사용하여 발생하는 모든 결과에 대한 책임은 사용자에게 있습니다.

0. 초기 화면

1. 서비스 실행

  • DB의 해당 데이터 유무(참 / 거짓)만 알 수 있다.

2. 데이터베이스 이름 조회 (Boolean-based)

  • 1' AND length(database()) = 4-- 입력 시 참이라고 출력되므로 데이터베이스 이름의 길이는 4임을 알 수 있다.
  • ' OR length(database()) = 4-- 와 같은 입력으로도 가능하다.

  • 1' AND mid(database(), 1,1) = 'd'-- 입력 시 참이라고 출력되므로 데이터베이스 이름의 첫 글자는 d 임을 알 수 있다.

MID(문자, 시작 위치, 가져올 갯수);
=subString(문자, 시작 위치, 가져올 갯수);

  • 이러한 요청을 SQL MAP 이나 burp suite, brute force 툴 등을 이용해서 값을 입력하여 참인 출력을 얻을 수 있다. 이렇게 얻은 참인 출력들을 요청하는 입력값을 조합하여 정보를 알아낼 수 있다.

※ 이진 탐색

  • 1' AND 데이터조회값 = 임의값-- 형태를 입력하기 전에 숫자 데이터는 >= 5, 알파벳 문자 데이터는 >= m 과 같은 이진 탐색을 먼저 시행하여 범위를 줄인 후 값을 대입하는 것이 더 빠르다.

3. 웹 페이지의 반응이 같은 경우 (Time-based)

  • 데이터 입력 시 출력문 자체가 없거나 출력문의 차이가 없는 경우, 1 이라는 데이터가 있다는걸 확인 후 1' AND mid(database(), 1,1) = 'd' AND sleep(3)-- 와 같은 입력으로 데이터베이스의 이름의 첫 글자가 d 이면 3초 대기 후 반응이 올 것이고, d 가 아니면 원래 속도대로 즉시 반응이 올 것이다.

출처
https://iamstudying.tistory.com/25
https://extbrain.tistory.com/62

profile
IT 보안, 관심 있는 것을 공부합니다.

0개의 댓글