Network/DVWA

Exercise 7. SQL Injection

dcho 2019. 8. 8. 02:51
SMALL
SQL Injection 공격이란?
  • 데이터베이스에 전송되는 SQL 쿼리문을 조작하여, 데이터를 변조하거나 허가되지 않은 정보에 접근
  • 예전부터 최근까지 꾸준하게 사용
    • 2011년 소니해킹
    • 2015년 뽐뿌 해킹
    • 2015년 어나니머스 WTO 해킹

(출처:인프런/화이트해커가-되기위한-8가지)

DVWA 실습

(Low)

-
먼저 소스코드를 확인을 해보았다. ID, First name, Surname 으로 출력을 해주게 되어있다.

요런식으로 1~5까지 정보가 나오는 것을 확인해 볼 수 있었다.

// Check database
$query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
소스코드에서 보면 이런식으로 입력이 들어간 것을 확인해 볼 수 있었다. 그렇다면 알맞는 값을 넣어서 ID를 모두 출력해 보고 싶었다.

// Check database
$query  = "SELECT first_name, last_name FROM users WHERE user_id = '1' or '1'='1';";
입력 폼에 1' or '1'='1 이렇게 입력 해줌으로써 우회를 해주었다. 그렇다면 user_id가 1 또는 참 조건이 성립이 되었다.

ID 모두 출력해주는 SQL Injection 공격이 성공하였다. 

이제 패스워드를 알아보기 위해 UNION 을 이용해 보자.

먼저 첫번째로 칼럼 갯수를 알아 내야 한다. 그 이유는 UNION 구문은 칼럼 갯수를 맞춰야 하기 때문이다.

UNION SELECT를 하기 위해선 칼럼 갯수를 맞춰야 하기에 이런식으로 , 를 이용해 갯수를 맞춰준다.


DVWA에서 하면 일단 칼럼이 1개인지 확인해 보기위해 폼에 1' union select 1# 를 입력해 주었다.

오류가 뜬다.

칼럼 갯수가 2개 라고 가정하고 넣어 보았다.

정상적으로 뜨는것을 보아 칼럼 갯수는 2개라는 것을 확인해 볼 수 있었다.


다른 방법으로는 ORDER BY 를 이용해 칼럼갯수를 확인해 보는 방법이 있었다.


이런식으로 칼럼 갯수보다 크면 오류가 나는 것을 확인해 보았다. 




결론
  • UNION 을 이용하면 정확한 값을 입력할때 까지 일일이 다 대입해 봐야하고
  • ORDER BY 를 이용하면 입력한 값보다 큰지 작은지를 이용하여 확인해 볼 수 있었다.



이렇게 칼럼의 갯수는 2개인데 그 칼럼의 이름을 알아내어 패스워드를 알아 내야 한다.그래서 DB구조를 파악하기로 하였다.

구글 검색을 통해 데이터베이스 명을 먼저 조회를 하는 법을 보고

// 폼 입력 값
1' union select schema_name,1 from information_schema.schemata #

전체 DB이름이 뜨는 것을 확인해 볼 수 있었다. dvwa DB를 이용하면 되겠다.


그럼 DB이름을 통해 테이블 명을 조회하기 위해 관련된 정보를 찾아 보았다.

// 폼 입력 값
1' union select table_name,1 from information_schema.tables where table_schema = 'dvwa' #

users 테이블 발견


// 폼 입력 값
1' union select column_name,1 from information_schema.columns where table_schema = 'dvwa' and table_name = 'users'#

이제 필드명을 알았으니 password를 확인해 보자.

// 폼 입력 값
1' union select user_id,password from users#
1' union select user,password from users#

확인! DB의 패스워드값은 해시값으로 되어있다 그 해시값은 보통 2가지가 쓰인다.

(출처 : 위키백과)
※ MD5는 레인보우 테이블이 있어 복호화가 가능해 보안에 취약하고 SHA 는 MD5보다 더 보안에 강해 많이 쓰인다고 한다. 

여기서는 MD5 해시값으로 암호화가 되어있어 복호화를 진행하여서 각각 확인해 보았다.

결과는 다음과 같다.

'Network > DVWA' 카테고리의 다른 글

Exercise 9. Weak Session IDs  (0) 2019.08.09
Exercise 8. SQL Injection (Blind)  (0) 2019.08.08
Exercise 6. Insecure CAPTCHA  (0) 2019.08.08
Exercise 5. File Upload  (0) 2019.08.08
Exercise 4. File Inclusion  (0) 2019.08.08