theRedhood007/secureshop-web-security-lab
GitHub: theRedhood007/secureshop-web-security-lab
一个故意包含多种 Web 漏洞的 PHP/MySQL 电商实验应用,用于网络安全教学、CTF 练习和 Splunk 日志分析实训。
Stars: 0 | Forks: 0
# SecureShop Web 安全模拟
这是一个故意包含漏洞的 PHP/MySQL Web 应用程序,用于在隔离的实验室环境中练习进攻性测试、防御性加固和 Apache 日志分析。该仓库支持课堂夺旗赛(CTF)练习,团队可以部署本地 Web 服务器,发现受控漏洞,收集 flag,并使用 Splunk 调查产生的活动。
## 项目目标
- 部署本地 Apache、PHP 和 MariaDB Web 应用程序。
- 演示 SQL 注入、跨站脚本攻击(XSS)、弱身份验证及相关的 Web 风险。
- 练习逐步加固,同时不破坏所有预设的 CTF 路径。
- 将 Apache 访问和错误日志转发至 Splunk。
- 检测攻击 payload,识别源 IP,并记录响应操作。
- 比较存在漏洞和经过部分加固的实现。
## 仓库内容
| 路径 | 用途 |
| --- | --- |
| `DFIR/` | 经过部分加固的 SecureShop 实现,保留了部分选定的 CTF 漏洞。 |
| `DFIR_test/` | 经过部分加固的实现的副本/测试拷贝。 |
| `SecureShop/` | 基础的轻量级 PHP 实现,故意包含直接的 SQL 查询且几乎没有防御。 |
| `SecureShop1.0/` | 包含部分预处理语句和验证的过渡期实现。 |
| `src/src/` | 过渡期/部分加固 PHP 应用程序的另一个副本。 |
| `bookstore-web-security/bookstore-web-security/` | 独立的 Laravel 8 书店脚手架,包含身份验证、书籍、购物车、middleware 和测试。 |
| `kali_deployment_guide.txt` | 详细的 Kali Linux、Apache、MariaDB、日志和实验室配置说明。 |
| `ca.crt` | 为实验室提供的证书授权机构(CA)证书。在信任它之前,请审查其来源。 |
| `*.zip`, `*.rar` | 项目变种的归档副本。如果存在对应的解压目录,则不需要这些文件。 |
推荐的课堂练习目标是 `DFIR/`。当您需要最简单的基础漏洞环境时,请使用 `SecureShop/`。Laravel 目录是一个独立的原型,不能直接替代 PHP 目标。
## 实验室架构
```
Attacker VM/workstation
|
| authorized test traffic
v
Apache + PHP + SecureShop ----> MariaDB
|
| access/error logs
v
Splunk forwarder / Splunk VM
```
## 功能
- 用户注册、登录、登出和 session 处理
- 产品列表和产品详情页面
- 仅限管理员的用户列表
- 部分加固变种中的基本验证和输出转义
- `DFIR/` 中的 session 重生成和简单的登录尝试限流
- 故意保留的 CTF 弱点和隐藏 flag
- 适合 Splunk 摄取的 Apache 日志
- 一个独立的 Laravel 书店原型,包含书籍和购物车工作流
## 环境要求
对于纯 PHP 的 SecureShop 实验室:
- Kali Linux、Ubuntu 或其他 Linux 虚拟机
- Apache 2
- 支持 `mysqli` 的 PHP
- MariaDB 或 MySQL
- Splunk Enterprise 或 Splunk Forwarder(可选,用于监控练习)
在 Kali/Debian 上安装示例包:
```
sudo apt update
sudo apt install apache2 mariadb-server php php-mysql libapache2-mod-php
sudo systemctl enable --now apache2 mariadb
sudo mysql_secure_installation
```
## 快速开始
### 1. 创建实验室数据库
以管理员身份打开 MariaDB:
```
sudo mysql
```
创建一个专用数据库和仅限本地的应用程序账户。应用程序目前期望使用如下所示的值;如有需要,请在 MariaDB 和 `DFIR/db.php` 中同时更改它们。
```
CREATE DATABASE secureshop;
CREATE USER 'shopuser'@'localhost' IDENTIFIED BY 'vulnerable123';
GRANT ALL PRIVILEGES ON secureshop.* TO 'shopuser'@'localhost';
FLUSH PRIVILEGES;
```
创建所需的表:
```
USE secureshop;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
is_admin TINYINT(1) DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT,
price DECIMAL(10,2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
使用 `kali_deployment_guide.txt` 中的 SQL 示例为用户、产品和练习 flag 填充初始数据。为了避免 README 产生剧透,此处故意不提供这些 flag。
### 2. 部署应用程序
将推荐的变种复制到 Apache 的 document root 中:
```
sudo mkdir -p /var/www/html/secureshop
sudo cp -R DFIR/. /var/www/html/secureshop/
sudo chown -R www-data:www-data /var/www/html/secureshop
sudo find /var/www/html/secureshop -type d -exec chmod 755 {} \;
sudo find /var/www/html/secureshop -type f -exec chmod 644 {} \;
sudo systemctl restart apache2
```
然后打开:
```
http://localhost/secureshop/
```
### 3. 验证日志记录
生成一些请求,然后确认 Apache 正在记录它们:
```
sudo tail -f /var/log/apache2/access.log
sudo tail -f /var/log/apache2/error.log
```
如果您定义了专用的虚拟主机,其日志名称可能会有所不同。除非练习明确要求,否则对于部分加固的部署,请保持禁用目录列表功能。
## Splunk 监控
将 Apache 访问和错误日志转发至 Splunk。有用的防御性搜索包括:
```
index=web sourcetype=access_combined
| stats count by clientip, status
| sort - count
```
```
index=web sourcetype=access_combined
| regex _raw="(?i)(union.*select|