보안 공부/Web 보안

취약한 웹 어플리케이션 DVWA를 통한 취약점 진단_SQL Injection

H.J.World 2019. 7. 25. 10:10
728x90
반응형

취약한 웹 어플리케이션 DVWA를 통한 취약점 진단 실습입니다.

실습 : SQL Injection

난의도 : LOW

 

SQL Injectin 이란?

웹 개발자가 SQL 질의에 대한 공격 가능성을 배제하고, SQL 질의를 신뢰할 수 있는 명령으로 판단함을 가정합니다.

SQL 질의에서 접근 제어를 우회, 일반적인 인증 및 인증 확인을 무시, SQL 질의가 OS 레벨 명령을 할 수있는 공격입니다.

꽤 오래된 취약점임에도 불구하고 최근에도 많은 사고사례가 발생하고 있습니다.

 

위와 같이 입력이 가능한 폼에서, SQL Injection 공격이 가능한지 확인하기 위해 싱글쿼터 '를 입력 시도

 

입력 시 위와 같은 에러 발생, 여기서 알수있는 것은 싱글쿼터에 대한 검증이 이뤄지지 않고 있음과 MySQL를 사용하고 있다는 점을 알수 있습니다.

 

1. 입력 구문 : a' or 1=1 #

SQL Injection 대표 구문 a' or 1=1 #을 입력하여 공격 가능여부 파악

여기서 #은 Mysql에서 주석 구문

 

2. 입력구문 : test' or 1=1 union select null, table_name from information_schema.tables #

여기서 사용하는 information_schema.table은 모든 DB에서 사용하는 기본 table로 SQL injection에서 주로 공격 대상으로 삼아 시도합니다.

기본적으로 사용되는 table 및 schema에 대한 내용은 따로 자세하게 정리하여 포스팅하도록 하겠습니다.

아래와 같이 기본 table조회를 통해서 user 정보가 있을만한 table을 조회합니다.

아래 두번째 사진에서 보는것과 같이 "users" table이 존재하는 것을 확인  할 수 있습니다.

 

4. 입력구문 : a' or 1=1 union select null, column_name from information_schema.columns where table_name='user' #

users table에 어떤 column들이 존재하는지 확인하기 위해서, 조회를 시도

아래 사진에서 볼수 있듯이 password 필드가 존재하는 것을 확인

 

5. 입력 구문: test' or 1=1 union select user, password from users #

user정보가 들어있는 table과 column을 알았으니 쿼리문을 통해서 조회 시도

아래와 같이 db에 저장되어 있는 형태의 결과값을 확인 가능

 

* 번외로 지금 보여주는 비밀번호 형태를 봤을때 MD5로 인코딩된 비밀번호가 아닐까 예상,

** 32글자로 구성, 특수기호 없이 구성되어 있음//

실제로 돌려보지 않아서 정확하지 않을 수도 있습니다. ㅎ

감사합니다!

728x90
반응형