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|= 5 ``` 字段名称因 Splunk 插件和 sourcetype 而异,因此请调整 `clientip`、`uri` 和 `uri_path` 以匹配您的环境。 ## 安全练习映射 该代码库旨在支持对以下类别进行调查,而不会透露确切的 payload 或 flag 位置: - 身份验证和记录查找流程中的 SQL 注入 - 反射型/存储型输出处理和 XSS 风险 - 弱密码存储和默认凭据 - 纯 PHP 变体中缺失的 CSRF 防御 - 基本的、位于 session 内部的速率限制,在真实部署中可被绕过 - 冗长的错误处理和信息泄露 - 授权和 session 管理行为 - Web 服务器配置和目录列表风险 有些文件包含诸如 `IMPROVED` 之类的标签,尽管其周边流程仍然被故意设置为不安全状态。请将这些视为教学检查点,而不是证明某个变种可以在生产环境中安全使用的证据。 ## Laravel 原型 Laravel 书店原型针对 PHP 7.3/8.x 和 Laravel 8: ``` cd bookstore-web-security/bookstore-web-security cp .env.example .env composer install php artisan key:generate php artisan migrate --seed php artisan serve ``` 提供的目录是一个轻量级脚手架,在这些命令生效之前,可能需要标准的 Laravel 引导文件或在全新的 Laravel 8 项目中进行重新生成。它还引用了已通过身份验证的 API 行为,应根据已安装的身份验证包进行验证。切勿提交 `.env`;当前归档文件中包含此文件,在发布之前应将其从 Git 历史记录中删除。 ## 测试工作流 1. 在练习前对虚拟机拍摄快照。 2. 将实验室限制在仅主机或其他隔离网络中。 3. 记录目标 IP、测试人员 IP 和测试时间窗口。 4. 在发起受控攻击之前,先建立正常的网络流量。 5. 捕获相关的 Apache 和 Splunk 证据。 6. 每次修补一个弱点,然后重复相同的测试。 7. 比较每次更改前后的日志和应用程序行为。 8. 练习结束后还原或销毁实验室。 对于 Laravel 原型,请运行: ``` php artisan test ``` 纯 PHP 变种不包含自动化测试工具;请仅在受控实验室内对它们进行验证。 ## 在发布到 GitHub 之前 - 移除被追踪的 `.env` 文件,并将 `.env` 添加到 `.gitignore` 中。 - 将硬编码的数据库凭据替换为环境变量。 - 决定 CTF flag 是否应保持公开;在每次活动前轮换它们。 - 除非为了进行比较,否则移除重复的目录和嵌套的归档文件。 - 在分发之前审查 `ca.crt`,切勿发布对应的私钥。 - 仅在抹去 IP 地址、用户名、token 和 flag 后添加截图。 - 选择并添加一个许可证。当前归档文件不应被默认带有任何许可证。 ## 预期交付成果 - Web 服务器和数据库配置说明 - Splunk 设置和仪表盘/搜索证据 - 故意包含漏洞的代码和已恢复 flag 的截图 - 包含授权方法和结果的进攻性测试报告 - 包含 IP、payload、检测和响应操作的防御性日志分析报告 - 练习后的加固对比 ## 道德与授权 仅出于教育、研究或测试目的使用这些材料,且必须获得每个受影响系统所有者的明确许可。将扫描和漏洞利用保持在商定的范围和时间窗口内。维护者和贡献者对未经授权或非法的使用不承担任何责任。
标签:CISA项目, ffuf, OpenVAS, PHP, Web安全, 漏洞靶场, 网络安全, 蓝队分析, 防御检测, 隐私保护