Oracle의 경우 일반적으로 Blind SQL Injection으로 데이터 추출 시 Substr()내장함수를 사용하기 위해 한 행만 추출해야 한다.


하지만 방화벽이나 기타 필터에 의해 “ROWNUM”이라는 문자열이 필터링 될 경우 이를 우회하기 위해 Row_Number()함수를 사용할 수 있다.


오라클의 시스템테이블의 테이블명, 컬럼명들은 이미 정해져 있다.


우선 모든 컬럼명을 조회하는 쿼리 및 결과는 다음과 같다.

[실행쿼리]

SELECT COLUMN_NAME

FROM ALL_TAB_COLUMNS;

[실행결과]

21091개의 행이 선택 [ ..... ]


다음은 RowNum을 사용하여 상위 1개의 결과만 조회하는 쿼리 및 결과는 다음과 같다.

[실행쿼리]

SELECT COLUMN_NAME

FROM  (

        SELECT ROWNUM R, COLUMN_NAME

        FROM ALL_TAB_COLUMNS

        

WHERE R = 1;

[실행결과]

1개의 행이 선택 [ DUMMY ]


이를 Rownum()이 아닌 Row_Number()를 사용하여 한 행만 추출해 보겠다.

[실행쿼리]

SELECT COLUMN_NAME

FROM  (

        SELECT COLUMN_NAME,

                 ROW_NUMBER() OVER (ORDER BY COLUMN_NAME) R

        FROM ALL_TAB_COLUMNS

        

WHERE R = 1;

[실행결과]

1개의 행이 선택 [ ABORT_STEP ]


단지 순서의 차이만 있을 뿐, 추출한 모든 데이터의 집합은 같다.


순위함수에는 ROW_NUMBER(), RANK(), DENSE_RANK()함수가 있다.


ROW_NUMBER()는 다른 순위함수와는 달리 정렬 후

“동일한 값에 동일한 순위를 부여하지 않고 유일한 순위를 부여“ 한다.



'Web Security > Web_Hacking' 카테고리의 다른 글

WebShell] CAIDAO  (0) 2017.01.05
[Web_Hacking] 프록시 툴(BurpSuite)  (0) 2014.09.24

다른 카테고리의 글 목록

Web Security/Web_Hacking 카테고리의 포스트를 톺아봅니다