필수 패키지 설치
sudo apt install -y php5 libapache2-mod-php5 php5-mysql mysql-server
Bash
복사
MySQL 설치 및 설정
MySQL에서 사용자 데이터베이스를 생성하고, 이를 사용할 웹 애플리케이션과 연결합니다.
보안 설정
•
취약한 웹 서버 구축시에는 안 해도 됨
sudo mysql_secure_installation
HTML
복사
사용자 및 데이터베이스 생성
sudo mysql -u root -p
Bash
복사
데이터 베이스 및 사용자 생성
PHP 5는 caching_sha2_password를 지원하지 않기 때문에 mysql_native_password를 사용
CREATE DATABASE userdb;
CREATE USER 'test_user'@'localhost' WITH mysql_native_password IDENTIFIED BY 'kisec123';
GRANT ALL PRIVILEGES ON userdb.* TO 'test_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
SQL
복사
CREATE USER 'punbb_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'kisec123';
변경
ALTER USER 'test_user'@'localhost' IDENTIFIED WITH mysql_native_password BY '새로운비밀번호';
Bash
복사
사용자 데이터 삽입
use userdb
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL
);
INSERT INTO users (username, password) VALUES ('admin', 'password123');
SQL
복사
PHP 설치 및 설정
Apache - PHP 연동 테스트
sudo vi /var/www/info.php
Bash
복사
아래 내용 추가
<?php
phpinfo();
?>
PHP
복사
웹 애플리케이션 구축 (로그인 페이지)
로그인 화면을 만들기 위해 PHP와 MySQL을 연동한 간단한 로그인 시스템을 만들 수 있습니다. 이를 통해 세션 하이재킹, SQL 인젝션, XSS 공격을 실험할 수 있는 환경을 구축합니다.
로그인 페이지 (login.php)
sudo vi /var/www/login.php
Bash
복사
아래 내용 작성
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login Page</title>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
font-family: Arial, sans-serif;
background-color: #f4f4f4;
}
.container {
text-align: center;
width: 300px;
padding: 20px;
background-color: white;
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
border-radius: 10px;
display: flex;
flex-direction: column;
align-items: center;
}
input[type="text"], input[type="password"] {
width: 100%;
padding: 10px;
margin: 10px 0;
border-radius: 5px;
border: 1px solid #ddd;
box-sizing: border-box;
}
input[type="submit"] {
width: 100%;
padding: 10px;
background-color: #28a745;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
margin-top: 10px;
}
input[type="submit"]:hover {
background-color: #218838;
}
.message {
margin-top: 20px;
font-size: 18px;
}
</style>
</head>
<body>
<div class="container">
<?php
session_start();
// MySQL 데이터베이스에 연결
$conn = new mysqli("localhost", "test_user", "kisec123", "userdb");
// 연결 확인
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// 사용자 입력 처리
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$password = $_POST['password'];
// SQL 쿼리 실행
$sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$_SESSION['username'] = $username;
// 사용자 입력값을 필터링하지 않고 그대로 출력하여 XSS 공격이 가능하게 만듦
echo "<div class='message'>Login successful! Welcome, " . $username . "</div>";
} else {
echo "<div class='message'>Invalid username or password.</div>";
}
} else {
// 로그인 폼 표시
echo '
<form method="POST" action="">
<h2>Login</h2>
<input type="text" name="username" placeholder="Username" required><br>
<input type="password" name="password" placeholder="Password" required><br>
<input type="submit" value="Login">
</form>
';
}
?>
</div>
</body>
</html>
PHP
복사