코드 소스
1. index.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>브루트포스</title>
<style>
button {
display: inline-block;
padding: 5px 10px;
background-color: gray;
color: white;
font-size: 18px;
text-decoration: none;
border-radius: 5px;
}
</style>
</head>
<body>
<h3>010-1234-5678에 전송된 PIN코드를 입력하세요</h3>
<p>
<form action="login.php" method="post">
<input type="password" id="password" name="pin" placeholder="PIN 네 자리 숫자 입력">
</p>
<p>
<button type="submit">Enter</button>
</form>
</p>
</body>
</html>
|
cs |
2. login.php
<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$inputPin = $_POST['pin'];
if ($inputPin === '1004') {
$_SESSION['loggedin'] = true;
header('Location: good.php');
} else {
echo "<script>window.alert('로그인 실패')
history.go(-1)</script>";
}
}
?>
|
cs |
3. good.php
<?php
session_start();
if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] !== true) {
header('Location: login.php');
exit;
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>브루트포스</title>
</head>
<body>
<h1>로그인 성공</h1>
</body>
</html>
|
cs |
세션 파기하는 기능은 뺐다ㅎ...
풀이
index.php 화면
잘못된 pin을 입력하면 아래 사진처럼 로그인 실패 알림창이 뜬다.
위의 요청을 intruder 탭으로 보낸다.
변수 clear하고 pin에만 설정한다.
payloads로 가서, payload type을 숫자(bruteforcer 로 하는 것보다 이게 더 빠름)로 하고
1000부터(pin이 1004인걸 아니까...ㅎ) 9999까지 1씩 증가하는 수를 입력하도록 설정했다.
1004를 보냈을 때 응답코드와 길이가 혼자 다르다. 맞는 pin이라는 뜻.
페이지로 돌아가서 1004를 입력하면 로그인 성공.
틀린 패스워드를 일정 횟수 이상 입력했을 때 10분동안 로그인 시도 못 하게 한다던지 로그인을 아예 차단하는 락킹을 해버리면 브루트 포스 공격은 거의 완벽하게 대응할 수 있다. 캡챠를 이용해서 대응해도 좋다.
'Hacking_study > 해킹과제' 카테고리의 다른 글
UNION SQL injection (0) | 2023.04.21 |
---|---|
워게임 만들기! (Lv2. 응답변조. 미완..) (0) | 2023.04.16 |
워게임 만들기! (Lv0. process jump) (0) | 2023.04.16 |
워게임 만들기! (Lv0. 쿠키변조) (0) | 2023.04.16 |
SQL select 구문 / 로그인 유형 2가지 / SQL injection (0) | 2023.04.14 |