정보보안(구버전)/ bWAPP 2019. 2. 25. 16:06

웹 해킹 bWAPP - 99. A8 - Cross-Site Request Forgery(CSRF) - Cross-Site Request Forgery(Change Password)

 

 

본 내용은 교육 과정에서 필요한 실습 목적으로 구성된 것이며, 혹시라도 개인적인 용도 및 악의적인 목적으로 사용할 경우, 법적 책임은 본인에게 있다는 것을 알려드립니다. 

 

 

1. Cross-Site Request Forgery(CSRF)

 

 - OWASP Top10 A8 - 크로스 사이트 요청 변조

 - 공격자가 서버에 백드라운드에서 실행되는 악의적인 파일/스크립트를 업로드 한 이후, 클라이언트가 이를 실행하여

   공격자 대신 웹 서버에게 악의적인 요청을 전송하는 취약점이다.
 - 그럼 웹 서버는 클라이언트에게 응답을 실시하기 때문에 정보 유출 및 획득이 가능하다.

 - 타켓 주체가 클라이언트가 아니라 서버라는 것에 XXS와 차이가 있다.

 - Ex) 패스워드 변경, 패스워드 유출, 계좌 정보 변경

 

 

 

2. Cross-Site Request Forgery(CSRF) - Cross-Site Request Forgery(Change Password)

 

 - 이 시나리오는 CSRF 취약점을 이용한 인젝션을 실시하여 패스워드 변경을 다른 패스워드로 변경하는 내용이다.

 

 

  

Ex1) Cross-Site Request Forgery(CSRF) - Cross-Site Request Forgery(Change Password) 이해

 

 

보안 레벨 선택 및 시나리오 선택

 

 

 

Intercept -> 'Intercept is on' 으로 변경 실시

 

 

 

bug를 bug로 변경 -> 'Change' 버튼 클릭

 

 

 

버프슈트 Intercept 내용 확인

 

 

 

마우스 우클릭 -> 'Copy URL'을 클릭하여 URL 주소 복사 실시 -> 메모장에 붙여넣기

 

 

 

'Intercept is on'를 클릭하여 off 실시

 

 

 

'Intercept is off' 확인

 

 

 

'HTML Injection - Stored(Blog)' 시나리오 선택

 

 

 

99-0. HTTP 이미지 인젝션 추가.txt

HTTP 이미지 인젝션 실시 -> 'Submit' 버튼 클릭

 

 

 

'height=0 width=0'을 사용했기 때문에 기록된 내용 안보이지만, 인젝션은 완료됨

 

 

 

'SQL Injection(Login Form/User)' 시나리오 선택

 

 

 

'bee/bug' 로그인 실시 -> 로그인 실패

 

 

 

'bee/cisco' 로그인 실시 -> 로그인 성공

 

 

 

'HTML Injection - Stored(Blog)' 시나리오 선택

 

 

 

'Add' 체크 해지 -> 'Delete' 체크 실시 -> 'Submit' 버튼 클릭

 

 

 

 

Ex2) 'csrf_1.php' 파일 내용 확인

 

 bee@bee-box:/var/www/bWAPP$ ls -l csrf_1.php
-rw-rw-r-- 1 root www-data 9206 2014-11-02 23:52 csrf_1.php

bee@bee-box:/var/www/bWAPP$ vi csrf_1.php

~ 중간 생략 ~

 

include("security.php");
include("security_level_check.php");
include("selections.php");
include("connect_i.php");

 

$message = "";

 

if(isset($_REQUEST["action"]) && isset($_REQUEST["password_new"]) && isset($_REQUEST["password_conf"]))
{

 

    $password_new = $_REQUEST["password_new"];
    $password_conf = $_REQUEST["password_conf"];

 

    if($password_new == "")
    {

 

        $message = "<font color=\"red\">Please enter a new password...</font>";

 

    }

 

    else
    {

        if($password_new != $password_conf)
        {

 

            $message = "<font color=\"red\">The passwords don't match!</font>";

 

        }


        else
        {

 

            $login = $_SESSION["login"];

 

            $password_new = mysqli_real_escape_string($link, $password_new);
            $password_new = hash("sha1", $password_new, false);

 

            if($_COOKIE["security_level"] != "1" && $_COOKIE["security_level"] != "2")
            {

 

                $sql = "UPDATE users SET password = '" . $password_new . "' WHERE login = '" . $login . "'";

 

                // Debugging
                // echo $sql;

 

                $recordset = $link->query($sql);

 

                if(!$recordset)
                {

 

                    die("Connect Error: " . $link->error);

                }

 

                $message = "<font color=\"green\">The password has been changed!</font>";

            }

 

 else
            {

 

                if(isset($_REQUEST["password_curr"]))
                {

 

                    $password_curr = $_REQUEST["password_curr"];
                    $password_curr = mysqli_real_escape_string($link, $password_curr);
                    $password_curr = hash("sha1", $password_curr, false);

 

                    $sql = "SELECT password FROM users WHERE login = '" . $login . "' AND password = '" . $password_curr . "'";

 

                    // Debugging
                    // echo $sql;

 

                    $recordset = $link->query($sql);

                    if(!$recordset)
                    {

 

                        die("Connect Error: " . $link->error);

 

                    }
 

:q!

 

 

 

 

Ex3) 보안 레벨 'High' 변경

 

 

보안 레벨 및 시나리오 선택

 

 

 

Intercept -> 'Intercept is on' 으로 변경 실시

 

 

현재 패스워드 'cisco' -> 변경 패스워드 'bug' 입력 실시

(현재 패스워드를 입력해야하는 폼이 출력되기 때문에 CSRF 취약점 공격 불가능)

 

 

 

버프슈트 Intercept 내용 확인 -> 'Forward' 버튼 클릭

 

 

 

'Intercept is on'를 클릭하여 off 실시

 

 

 

'Intercept is off' 확인

 

 

 

패스워드 변경 성공

 

 

 

 'SQL Injection(Login Form/User)' 시나리오 선택

 

 

 

'bee/bug' 로그인 실시 및 확인

 

 

 

[유튜브] 동영상 강의 링크 (구독! 좋아요!!!)

 

웹해킹 99. A8 - bWAPP Cross-Site Request Forgery(CSRF) - Cross-Site Request Forgery(Change Password)


https://youtu.be/MAa27JGgTlo



Posted by 김정우 강사(카카오톡 : kim10322)
,


Q