Oh! JUN
그룹핑을 활용한 데이터 조회 공격 본문
지금까지 다중 레코드를 한번에 출력할 수 없기 때문에 순차적 레코드를 사용해서 하나씩 출력했는데 이번에 그룹핑을 활용해 한번에 출력시킬것이다.
DBMS | FUCTION |
MYSQL | GROUP_CONCAT() |
MSSQL | FOR XML PATH(), STRING_AGG() |
ORACLE | LISTAGG() |
MSSQL 예시 |
1) FOR XML PATH 함수 사용 예시 select '###' + name from sysobjects where xtype='u' FOR XML PATH('') - STUFF 활용 예시(앞의 ### 제거) select stuff((select '###' + name from sysobjects where xtype='u' FOR XML PATH('')),1,3,'') 2) STRING_AGG 함수 사용 예시 select string_agg(name, '###') as name from sysobjects where xtype='u' |
MYSQL 예시 |
select group_concat(schema_name, '###') from information_schema.schemata; |
ORACLE 예시 |
select listagg(table_name, '###') |
union을 활용해서 특정 컬럼에 찾고자 하는 값을 그룹핑해서 한번에 출력시킬것이다.
먼저, 컬럼의 개수를 파악하기 위해 order by 사용해봤다.
idx=1 order by 7--에서는 정상적으로 출력되고, idx=1 order by 8--에서는 오류가 발생하는걸로 확인된다.
해당 페이지의 컬럼은 7개이다.
컬럼 위치를 알아보기 위해 null에 'a'를 넣어보았다.
두번째 컬럼에 'a'를 넣어보니까 Title란에 'a'가 출력되는걸 확인했다.
여기에 이제 우리가 원하는 쿼리를 집어넣어서 값을 확인할 수 있다.
URL 인코딩해야되서 burp로 시도했다.
한번에 C##CREHACKTIVE 사용자의 Table이 TB_BOARD, MEMBERS, TEST가 있음을 확인했다.
이번에는 컬럼을 구해보자
사용자 'C##CREHACKTIVE'의 테이블 'MEMBERS'의 column은 IDX, ID, PASSWORD, JUMIN이다.
마지막으로 데이터 값도 구해보자
사용자 'C##CREHACKTIVE'의 테이블 'MEMBERS'의 DATA가 한번에 출력된걸 확인할 수 있다.
+ Error-Based 공격에서도 그룹핑 가능!!
blind-SQL Injection으로 노가다 하다가 UNION하고 그룹핑 쓰니까 너무 좋다!!
'웹 해킹 > SQL Injection' 카테고리의 다른 글
SQL Injection을 통한 파일 다운로드 취약점 공격 실습 (0) | 2022.10.02 |
---|---|
INSERT, UPDATE, DELETE 구문에 대한 데이터 조회 공격 기법 (0) | 2022.10.01 |
Primarykey-Based Technique 공격 실습(feat.Burp Suite 자동화 도구 사용법) (0) | 2022.09.25 |
Multiple Search Technique-3 공격 실습(Content-Based SQL Injection + Response-Based SQL Injection) (0) | 2022.09.24 |
Multiple Search Technique - 1 공격 실습 (0) | 2022.09.24 |