-
DVWA - Brute Force ( Medium )모의해킹/Groot - 스터디 2023. 6. 21. 23:31
DVWA - Brute Force ( Medium ) 입니다
개요
이 포스팅에서는 DVWA(Damn Vulnerable Web Application) - Brute Force, Medium 단계 실습을 진행하면서 공부했던 내용에 대한 내용을 정리해 보았고, 모두 본인이 소유한 가상머신에서 실습이 이루어졌습니다
DVWA - Brute Force, Low 단계에서는 Wfuzz를 사용하여 실습을 진행하였고 Medium 단계에서는 Hydra를 사용하였습니다
실습환경
M1 MacBook Air
16G RAM
UTM - 가상머신
Kali Linux 2023.1 - Apple Silicon (ARM64)목차
1. 취약점 설명 및 분석 - 소스코드 분석, Brute Force, 관리자 페이지
2. Hydra 사용방법 및 실습 - 사용방법, 실습, wfuzz와 비교하기
3. 대응방안
4. Secure Coing In Ubuntu - 로그인 횟수 제한하기
취약점 설명 및 분석
소스코드 분석// 위치 : /var/www/html/dvwa/vulnerabilities/brute/source -> medium.php // 중요내용 제외 삭제하였음 <?php if( isset( $_GET[ 'Login' ] ) ) { // 회원 정보 조회하기 $query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';"; $result = mysqli_query($GLOBALS["___mysqli_ston"], $query ); if( $result && mysqli_num_rows( $result ) == 1 ) { // 유저 정보 가져오기 $row = mysqli_fetch_assoc( $result ); $avatar = $row["avatar"]; // 로그인 성공 echo "<p>Welcome to the password protected area {$user}</p>"; echo "<img src=\"{$avatar}\" />"; } else { // 로그인 실패 sleep( 2 ); echo "<pre><br />Username and/or password incorrect.</pre>"; } } ?>
입력받은 아이디와 비밀번호를 조회하여
로그인에 성공했다면 이미지와 성공 메시지를, 실패한다면 2초 뒤에 실패메시지를 보내도록 한다Brute Force
위 코드에서는 이용자가 로그인 시도를 무한으로 할 수 있다
로그인에 실패할 경우 2초 뒤에 응답이 온다는 차이점이 있지만 로그인 시도를 하고 바로 응답이 오지 않으면 로그인 실패로 간주하고 바로 다음 로그인을 시도할 수 있다
관리자 페이지
아이디를 admin으로 하고 비밀번호를 password로 로그인을 시도하면 위와 같이 로그인에 성공함을 알 수 있다
로그인에 성공했을 때 나오는 이미지를 이용하여 다른 관리자 아이디를 알 수 있다
Hydra 사용방법 및 실습
사용방법-l 유저이름 -P 비밀번호파일 형식으로 사용했다
-V 는 verbose mode( 상세모드 )로 아이디와 비밀번호를 보여준다
-I 는 기존 복원파일을 무시한다 ( 10초를 기다리지 않는다 )
실습
시간지연이 발생해 5개의 터미널을 이용하여 동시에 진행해 주었고 rockyou.txt, fasttrack.txt, john.lst 를 사용했다
wfuzz와 비교하기
Low 에서 사용했던 wfuzz를 Medium에도 적용했다
hydra를 적용했을 때와 마찬가지로 sleep(2)때문에 시간지연이 발생하는 것은 똑같았지만 결과는 같았다
대응방안
Brute Force는 로그인 시도를 무한으로 할 수 있다는 문제에서 발생하므로 Captcha, 로그인 횟수 제한, 로그인 시 개인 인증과 같은 방식으로 Brute Force 공격을 막을 수 있다
로그인할 때 개인 인증을 추가로 하는 경우는 국가 기관과 같이 엄청 중요한 곳이나 은행과 같이 평소에 이용은 자주 안 하지만 중요한 곳에 적용을 할 수 있다
Secure Coing In Ubuntu
로그인 횟수 제한하기칼리 리눅스에서 우분투로 공격을 진행했다
<?php $dbcon = mysqli_connect("localhost", "ruang", "ruang", "test") or die("접속 실패"); $user = $_GET['username']; $pass = $_GET['passwd']; $query = "SELECT * FROM `dvwa_brute` WHERE username = '$user' AND passwd = '$pass';"; $result = mysqli_query($dbcon, $query); if( $result && mysqli_num_rows($result) == 1 ) { echo "<p>Welcome to the password protected area {$user}</p>"; } else { sleep( 2 ); echo "<pre><br />Username and/or password incorrect.</pre>"; } ?>
기존 코드를 가져와서 실습하기 편하도록 수정했다
Brute Force 공격이 정상적으로 진행된다
<?php $dbcon = mysqli_connect(데이터베이스 연결); $query = "로그인 성공시 사용할 SQL 질의문"; $result = mysqli_query($dbcon, $query); $user_query = "로그인 실패시 사용할 SQL 질의문"; $user_result = mysqli_query($dbcon, $user_query); if (mysqli_num_rows($result) == 1) { $trys = mysqli_fetch_assoc($result); $trynum = $trys['count']; if ($trynum < 3) { //로그인 성공 } } else { $trys = mysqli_fetch_assoc($user_result); $trynum = $trys['count']; if ($trynum >= 3) { echo "<pre><br/>계정이 잠겼습니다. 비밀번호를 변경해주세요.</pre>"; mysqli_close($dbcon); exit; } else { //로그인 실패 } } ?>
로그인 시도 횟수를 1씩 증가하도록 하여 3회 이상이 되면 계정이 잠기도록 변경했다
Brute Force 공격을 진행하면 연결이 끊겨서 더 이상 공격을 할 수 없다
728x90'모의해킹 > Groot - 스터디' 카테고리의 다른 글
DVWA - Brute Force ( High ) (0) 2023.06.27 DVWA - SQL Injection ( Low ) (0) 2023.06.27 DVWA - CSRF ( Low ) (0) 2023.06.04 DVWA - Vulnerability: CSRF, low 문제풀이 (0) 2023.06.04 DVWA - Command Injection ( Low ) (0) 2023.06.03