yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆

SQL injection 실습2 (ORDER BY & UNION) 본문

웹/웹 해킹

SQL injection 실습2 (ORDER BY & UNION)

yehey 2020. 9. 30. 18:18
실습 환경: DVWA-SQL injection, kali 리눅스

UNION 구문을 이용한 공격 실습

UNION을 이용하려면 원래 쿼리문이 조회하는 SELECT 문의 칼럼 개수와 UNION 뒤의 SELECT 문에서 요청하는 칼럼의 개수가 같아야한다. (같지 않으면 syntax error 발생)

따라서 원래 쿼리문이 몇 개의 칼럼을 조회하고 반환하는지 알아야한다.

 

그래서 사용하는 것이 ORDER BY!

 

ORDER BY?
지정된 칼럼을 기준으로 결과를 정렬할 때 사용하는 키워드
ex. ORDER BY 2 = 두번째 칼럼을 기준으로 정렬
ORDER BY 숫자를 증가시키다가 에러가 발생하면 그 전의 값이 칼럼의 개수가 된다.

입력창에 1' ORDER BY n #에서 n을 1씩 증가시켜가며 칼럼 개수를 파악해보자

(#은 뒷부분을 모두 주석처리 시킨다는 뜻으로 혹시라도 존재할 명령어가 기능하지 못하게 한다.)

 

1' ORDER BY 2#을 넣었을 때는 결과가 잘 출력되었는데,

1' ORDER BY 3#을 넣었을 때는 해당 칼럼을 기준으로 정렬할 수 없어서 error가 발생한다.

따라서 전체 칼럼의 개수가 2개라는 것을 알 수 있다.

이제 본격적으로 UNION을 사용해보쟈

1' UNION SELECT 1,2# 를 입력해서 결과를 확인해보자

 

SELECT 뒤에 상수를 입력하면 상수가 그대로 반환되는데, 이때 어떤 칼럼의 정보가 어디에서 나타나는지 알 수 있다.

1번째 칼럼은 First name뒤에, 2번째 칼럼은 Surname 뒤에 출력되는 듯!

 

이제 1,2가 아니라 우리가 진짜 궁금해하는 정보를 가져와보자!

MySQL 데이터베이스는 information_schema 라는 데이터 베이스에서 데이터베이스 이름, 테이블, 칼럼 정보들을 관리한다. 따라서 information_schema의 schemata 테이블로부터 데이터 베이스 이름과 테이블 이름, 칼럼 정보를 차례대로 알 수 있다.

1. 데이터 베이스 이름 알아내기

' UNION SELECT schema_name,2 FROM information_schema.schemata#

현재 사이트가 DVWA이니 데이터 베이스 이름은 dvwa로 추측할 수 있다.

 

2. 데이터 베이스의 테이블 목록 알아내기

-WHERE 조건을 주어서 dvwa 데이터베이스 테이블만 출력

' UNION SELECT table_name,2 FROM information_schema.tables WHERE table_schema='dvwa'#

guestbook과 users 테이블이 존재한다. 

우리는 사용자 정보를 알아내는 것이기 때문에 users를 더 파악해보자

 

3. 테이블의 칼럼 목록 알아내기

' UNION SELECT column_name,2 FROM information_schema.columns WHERE table_schema='dvwa' and table_name='users'#

dvwa 데이터베이스의 users 테이블에 존재하는 칼럼은

user_id, first_name, last_name, user, password, avartar, last_login, failed_login 이다.

이중에서 user 정보와 password 정보를 출력 시켜보자

 

4. 원하는 정보 가져오기

' UNION SELECT user,password FROM users#

First name 뒤에는 user 정보가, Surname 뒤에는 password가 출력되었다.

 

password
출력된 패스워드는 평문이 아닌 해시 값으로 저장되어 있어서 위와 같이 나온 것!
평문 password를 얻으려면 크래킹을 통해 얻어야한다.

 

UNION을 이용한 공격 끝~~~

' > 웹 해킹' 카테고리의 다른 글

Command injection 공격 실습  (0) 2020.10.01
SQL injection 실습3 (Blind)  (0) 2020.09.30
SQL injection 실습1 (WHERE 구문 우회)  (0) 2020.09.29
Brute Force Attack + DVWA실습  (0) 2020.09.27
CSRF (크로스 사이트 요청 변조)  (0) 2020.09.18
Comments