[모의해킹 실습] 자동화공격 취약 페이지 구현 및 공격 실습

반응형

자동화공격

자동화 공격이란 웹 애플리케이션의 정해진 프로세스에 자동화된 공격을 수행함으로써 자동으로 수많은 프로세스가 진행되는 취약점입니다. 이는 DoS(Denial of Service), 무차별 대입 기법(Brute-Forcing), 데이터베이스 과부하와 같은 피해를 일으킬 수 있습니다.

 

1. 공격 원리

자동화 공격은 다량의 요청이 시도될 때 검증과 적절한 대안 방안을 구축하지 않았기 때문에 발생하는 취약점입니다. 자동화 공격을 방지하기 위해서는 데이터 등록 시 일회성이 될 수 있는 별도의 토큰 사용, captcha 사용, IDS/IPS에서의 탐지 규칙 추가 등이 있습니다.

2. php 코드

<?php
  $username = $_POST[ 'username' ];
  $password = $_POST[ 'password' ];
  if ( !is_null( $username ) ) {
    $jb_conn = mysqli_connect( "[DB 접속 정보]" );
    $jb_sql = "SELECT pw FROM member WHERE id = '" . $username . "';";
    $jb_result = mysqli_query( $jb_conn, $jb_sql );
    while ( $jb_row = mysqli_fetch_array( $jb_result ) ) {
      $encrypted_password = $jb_row[ 'pw' ];
    }
    if ( is_null( $encrypted_password ) ) {
      $wu = 1;
    } else {
	    if ( password_verify( $password, $encrypted_password ) ) {
		    session_start();
		    $_SESSION[ 'username' ] = $username;
	            header( 'Location: login-ok.php' );
      } else {
        $wp = 1;
      }
    }
  }
?>
<!doctype html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>로그인</title>
    <style>
      body { font-family: sans-serif; font-size: 14px; }
      input, button { font-family: inherit; font-size: inherit; }
    </style>
  <link rel="stylesheet" type="text/css" href="/css/loginstyle.css"/>
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.1/css/all.css">
  <link rel="stylesheet" type="text/css" href="/css/common.css" />
  </head>

	<body>
		<div class="login">
			<h1>Login</h1>
			<div class="links">
				<a href="login1.php" class="active">Login</a>
				<a href="signUp.html">Register</a>
			</div>
			<form action="login.php" method="post">
				<label for="username">
					<i class="fas fa-user"></i>
				</label>
				<input type="text" name="username" placeholder="Username" id="username" required>
				<label for="password">
					<i class="fas fa-lock"></i>
				</label>
				<input type="password" name="password" placeholder="Password" id="password" required>
				<div class="msg">계정정보를 입력해주세요</div>
				<input type="submit" value="Login">
			</form>
		</div>
	</body></html>

 

3. 공격 실습

No.

실습 위치

비고

1

http://localhost/login.php

로그인 기능

 

Step1: 로그인 기능에서 자동화 공격 취약점이 발생합니다. 게시판의 글쓴이 항목을 통해 사용자 계정명을 알 수 있습니다.

사용자 계정명 식별가능

Step2:로그인 시도 시 발생하는 요청을 분석합니다.

로그인 요청 분석

Step3:로그인 시도 횟수 제한이 존재하지 않으므로 무차별 대입 공격을 시도할 수 있습니다. Burp의 Intruder 기능을 이용하여 공격을 시도합니다.

Burp Intruder기능 사용

Step4:공격 수행 시 302 응답 코드로 정상적으로 로그인이 되어 Redirect 된 값을 확인할 수 있습니다.

공격 수행 화면

자동화 공격은 게시글 자동 등록, 무차별 대입 공격 뿐만 아니라 SQL Injection을 수행하는 데 사용될 수 있습니다. 다량의 패킷을 요청하는 Blind SQL Injection의 자동화 공격을 허용하게 됩니다. 때문에 자동화 공격은 Captcha 사용, 일회성 토큰 사용, 프로세스 호출 제한 등을 통해 대응해야 합니다.