모의해킹/Groot - 스터디

DVWA - CSRF ( Low )

잉카콜라 2023. 6. 4. 14:50

DVWA - CSRF ( Low ) 입니다

 

 개요 

이 포스팅에서는 DVWA(Damn Vulnerable Web Application)  CSRF, Low 단계 실습을 진행하면서 공부했던 내용에 대한 내용을 정리해 보았고, 모두 본인이 소유한 가상머신에서 실습이 이루어졌습니다

실습환경
M1 MacBook Air
16G RAM
UTM - 가상머신
Kali Linux 2023.1  - Apple Silicon (ARM64)

 

 

 목차 

1. 취약점 설명 및 분석  -  소스코드 분석, CSRF

2. CSRF 실습

3. 대응방안

 

 

 

 취약점 설명 및 분석 

 

 소스코드 분석 

// 위치 : /var/www/html/dvwa/vulnerabilities/csrf/source -> low.php
// 중요내용 제외 삭제하였음
<?php

if( isset( $_GET[ 'Change' ] ) ) {

    $pass_new  = $_GET[ 'password_new' ];	// 비밀번호, 비밀번호 확인 정보 가져오기
    $pass_conf = $_GET[ 'password_conf' ];

    if( $pass_new == $pass_conf ) {		// 비밀번호 일치 확인
                
            // 비밀번호가 일치할 경우 비밀번호에 md5 적용
            $pass_new = md5( $pass_new )
            
            // 데이터베이스 변경
            $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser()
            $result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die(이하생략);
                
            // 사용자에게 변경 완료 알려주기
            $html .= "<pre>Password Changed.</pre>";
    }
    else {
            // 비밀번호가 일치하지 않을 경우 에러 메시지 보여주기
            $html .= "<pre>Passwords did not match.</pre>";
    }

}

?>

입력된 비밀번호 일치 여부를 확인하고 일치한다면 현재 사용자의 비밀번호를 변경한다

 

// 위치 : /var/www/html/dvwa/vulnerabilities/csrf -> test_credentials.php
// 중요내용 제외 삭제하였음
<?php

// db 연결
dvwaDatabaseConnect();
$login_state = "";

if( isset( $_POST[ 'Login' ] ) ) {

    $user = $_POST[ 'username' ];			// 아이디 비밀번호 가져오기

    $pass = $_POST[ 'password' ];
    $pass = md5( $pass );				// 비밀번호 md5 적용

	// 유저 정보 조회하기
    $query  = "SELECT * FROM `users` WHERE user='$user' AND password='$pass';";
    $result = @mysqli_query($GLOBALS["___mysqli_ston"], $query) or die('이곳의 내용은 생략');
        
    if( $result && mysqli_num_rows( $result ) == 1 ) {    
    // 로그인 성공
    $login_state = "<h3 class=\"loginSuccess\">Valid password for '{$user}'</h3>";
    }else{
    // 로그인 실패
    $login_state = "<h3 class=\"loginFail\">Wrong password for '{$user}'</h3>";
    }

}

?>

아이디와 비밀번호로 유저 정보를 조회하고 유저 정보가 있다면  로그인 성공/실패 메시지를 띄운다

 

 

 CSRF 

DVWA - CSRF ( Low ) 는 비밀번호를 변경하는 과정에서 비밀번호만 일치한다면 현재 사용자의 비밀번호를 바꾸는 취약점이 있다

 

 

 

 CSRF 실습 

 

 CSRF 적용하기 

새로운 비밀번호를 asdf로, 비밀번호 확인란도 asdf로 한 뒤 전송했다

 

유저 정보가 존재하는지 확인하기 위해 로그인을 해 보니 성공했다

 

 

 

 대응방안 

비밀번호를 변경하는데 별다른 검증 없이 입력된 비밀번호만 일치한다면 해당 유저의 비밀번호를 변경하는데 취약점이 있다

1.  비밀변호 변경을 정상적으로 이루어지게 하기 위해서 비밀번호 변경 요청은 비밀번호 변경페이지에서 온 요청만 처리하도록 해야 한다

2.  현재 사용자의 비밀번호까지 입력하도록 한다면 실제 사용자가 아닌 이상 비밀번호를 변경하는데 어려움이 있다

 

 

 

 문제풀이 

https://ruang0124.tistory.com/212

 

728x90