ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.