-
DVWA - CSRF ( Low )모의해킹/Groot - 스터디 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'모의해킹 > Groot - 스터디' 카테고리의 다른 글
DVWA - SQL Injection ( Low ) (0) 2023.06.27 DVWA - Brute Force ( Medium ) (0) 2023.06.21 DVWA - Vulnerability: CSRF, low 문제풀이 (0) 2023.06.04 DVWA - Command Injection ( Low ) (0) 2023.06.03 DVWA - Vulnerability: Command Injection, low 문제풀이 (0) 2023.06.02