Search

취약한 웹 서버 세팅 (나머지)

필수 패키지 설치

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
복사