불충분한 인증
불충분한 인가 취약점은 중요 정보를 다루는 페이지에 대한 인증 절차가 미흡할 경우 발생하는 취약점입니다. 인증 기능(로그인, 중요 페이지에 대한 추가 인증)은 구형하였으나 추측 가능한 패스워드, 취약한 인증 프로세스로 구현되어 우회하거나 무력화하여 접근할 수 있습니다.
1. 공격 실습
No. |
실습 위치 |
비고 |
1 |
회원정보 수정 기능 |
2. php 코드
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>HOME</title>
<link rel="stylesheet" href="/css/loginstyle.css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.1/css/all.css">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
<link rel="stylesheet" href="/css/gallery.css">
</head>
<body class="loggedin">
<!-- Nav Bar -->
<nav class="navtop">
<div>
<h1>My Website</h1>
<a href="/home"><i class="fas fa-home"></i>Home</a>
<a href="profile.php"><i class="fas fa-user-circle"></i>Profile</a>
<a href="/member/logout"><i class="fas fa-sign-out-alt"></i>Logout</a>
</div>
</nav>
<div class="container mt-3">
<div class="row">
<div class="col-sm-12 col-md-3 col-lg-2 p-2">
<!-- Sidebar -->
<nav id="sidebar" class="border-top border-secondary">
<div class="list-group">
<a class="rounded-0 list-group-item list-group-item-action list-group-item-light " href="/freeboard/index">자유게시판</a>
<a class="rounded-0 list-group-item list-group-item-action list-group-item-light " href="/login/report">버그및건의</a>
</div>
</nav>
</div>
<div class="col-sm-12 col-md-9 col-lg-10 p-2">
<div class="content">
<h2>내 정보</h2>
<div class="col-11">
<div class="card">
<div class="card-body">
<div class="find">
<form method="post" action="profile_update_ok.php">
<?php
$sql1 = mq("select * from member where id ='{$_SESSION['username']}'");
while($member = $sql1->fetch_array()){
?>
<fieldset>
<legend>Profile</legend>
<table>
<tr>
<td>아이디</td>
<td><input type="text" size="35" name="username" value="<?php echo $_SESSION['username']; ?> (아이디는 변경불가)" disabled></td>
</tr>
<tr>
<td>패스워드</td>
<td><input type="password" size="35" name="password"?></td>
</tr>
<tr>
<td>이름</td>
<td><input type="text" size="35" name="name" placeholder="이름" value="<?php echo $member['name']; ?>"></td>
</tr>
<tr>
<td>주소</td>
<td><input type="text" size="35" name="address" placeholder="주소" value="<?php echo $member['address']; ?>"> </td>"
</tr>
<tr>
<td>성별</td>
<td>남<input type="radio" name="sex" value="남"> 여<input type="radio" name="sex" value="여"></td>
</tr>
<tr>
<td>이메일</td>
<td><input type="text" size="35" name="email" placeholder="이메일" value=<?php $str= explode("@", $member['email']); $str = $str[0]; echo $str; ?>>@<select name="emaddress"><option value="naver.com">naver.com</option><option value="nate.com">nate.com</option><option value="hanmail.com">hanmail.com</option><option value="daum.net">daum.net</option><option value="gmail.com">gmail.com</option></select></td>
</tr>
</table>
<button type="button" class="btn btn-primary" onclick="location.href='profile'">뒤로가기</buton>
<button type="submit" class="btn btn-success" onclick="location.href='profile_update'">수정하기</buton>
</fieldset>
<?php } ?>
</form>
</div>
Step1: 로그인 후 Profile 을 클릭해 회원 정보 수정 페이지에 접속합니다.
Step2:회원 정보 수정 페이지에 2차 인증이 구현되어 있지 않습니다.
이 페이지는 사용자의 정보를 세션으로 관리하기 때문에 파라미터 변조를 통해 정보 수정 페이지에 접근할 수는 없으나 XSS공격을 통해 세션이 탈취되었을 때 사용자의 정보 수정이 가능함을 2.2.2에서 검증하였습니다. 그리고 CSRF 공격을 통해 사용자의 정보가 가능함을 이전 포스트에서 검증하였습니다. 따라서 사용자 수정과 같은 민감 정보를 다루는 페이지에 접근 시 2차 인증을 구현하고 안전한 패스워드를 사용하도록 해야 합니다.
반응형
'Security > WEB' 카테고리의 다른 글
[Angular]설치 및 시작하기 (0) | 2021.07.31 |
---|---|
[모의해킹 실습] 불충분한 인가 페이지 구현 및 공격 실습 (0) | 2021.07.31 |
[모의해킹 실습] 자동화공격 취약 페이지 구현 및 공격 실습 (0) | 2021.07.24 |
[모의해킹 실습] CSRF 취약 페이지 구현 및 공격 실습 (0) | 2021.07.22 |
[모의해킹 실습] 파일 다운로드 취약 페이지 구현 및 공격 실습 (0) | 2021.07.19 |