728x90
이번 포스트에서는 DVWA의 SQL Injection 문제를 실습해보겠다.
## 공격 정의
- 웹사이트의 입력란에 악의적인 SQL 코드를 삽입하여, 데이터베이스를 해킹하는 방법
- 일반적으로 웹사이트의 입력란에 입력된 데이터를 데이터베이스 쿼리의 일부로 사용하여, 데이터베이스를 조작하는 방법으로 수행됨
- 악성 SQL 코드를 삽입하여, 데이터베이스에서 정보를 불법적으로 탈취하거나 수정, 삭제 등의 악의적인 행동을 할 수 있음
## 공격 유형
- Error Based : 논리적 에러를 이용한 SQL Injection 공격. SQL 쿼리 고의적으로 오류를 발생시켜 출력되는 에러의 내용을 통해 필요한 정보를 찾아냄
- Union Based : 정상적인 쿼리문에 Union 키워드를 삽입하여 원하는 쿼리문을 실행하는 SQL Injection 공격. Union 키워드는 두 개 이상의 쿼리문에 대한 결과를 통합해 하나의 테이블로 출력
- Boolean Based : 참과 거짓만 출력하는 페이지에서 쿼리를 조작하여 정보를 획득하는 SQL Injection 공격
- Time Based : 응답의 참과 거짓을 구분할 수 없을 때 사용하는 SQL Injection 공격. 쿼리문의 참과 거짓에 따라 응답 시간을 다르게 하여 참과 거짓을 판별. sleep(), benchmark() … 등의 함수 사용
## 공격 다이어그램
- 공격자는 웹사이트의 입력란에 악성 SQL 코드를 삽입
- 해당 SQL 코드는 서버에서 실행되어 데이터베이스에 악의적인 명령어를 전달
- 공격자는 이를 통해 데이터베이스에서 중요한 정보를 탈취하거나, 데이터를 삭제, 수정 등의 악의적인 행위를 할 수 있음
## 실습
DVWA의 SQL Injection 항목을 선택하면 아래와 같은 이미지가 보인다.
여기서는 Union SQL Injection 기법을 활용해보겠다. 우선 출력되는 쿼리의 수를 알아내기 위해 다음과 같은 쿼리를 전송한다.
1, 2가 각각 First name, Surname에 출력되고, 오류없이 잘 동작하는 것으로 보아 출력되는 쿼리 수는 총 2개임을 알 수 있다.
다음은 데이터베이스의 이름을 알아보겠다.
위와 같이 database() 함수를 통해 DB를 첫번째 출력값에 출력해본 결과, dvwa라는 DB가 존재함을 알 수 있다.
이어서 테이블 명을 출력해보겠다.
위와 같이 table_name과 information_schema.tables를 통해 테이블 명을 출력해본 결과, users와 guestbook 테이블이 존재한 것을 알 수 있다.
이어서 컬럼 명을 출력해보겠다.
users 테이블 기반으로 column_name과 information_schema.columns를 활용하여 출력해본 결과, 총 8개의 컬럼이 출력된 것을 알 수 있다.
마지막으로 users 테이블 이용하여 user과 password 컬럼의 값들을 출력해보겠다.
user과 password 값이 성공적으로 출력된 것을 확인할 수 있다.
'Wargame > DVWA' 카테고리의 다른 글
DVWA (XSS) (0) | 2023.03.17 |
---|---|
DVWA (Blind SQL Injection) (0) | 2023.03.16 |
DVWA (Insecure CAPTCHA) (0) | 2023.03.14 |
DVWA (File Upload) (0) | 2023.03.13 |
DVWA (File Inclusion) (0) | 2023.03.12 |