SecureSkyTechnology/BadLibrary

GitHub: SecureSkyTechnology/BadLibrary

一个基于 Node.js 的轻量级漏洞 Web 应用靶场,帮助初学者在零配置环境下练习常见 Web 安全漏洞的发现与利用。

Stars: 59 | Forks: 7

# BadLibrary - 用于测试漏洞的示例 Web 应用程序 BadLibrary 是一个小巧、易于运行且包含漏洞的示例 Web 应用程序,非常适合初学者用来寻找漏洞。 只要安装了 node.js 即可运行,无需准备其他任何环境,因此不需要像使用 BadStore 等工具那样搭建 VM 环境。 此外,由于它仅具备 Web 应用程序的最基本功能,因此也很容易掌握其整体架构。 ## 安装 ``` % https://github.com/SecureSkyTechnology/BadLibrary % cd BadLibrary/src % npm install ``` ## 启动 只需简单地运行 src/app.js 即可。默认情况下会在 8080 端口监听。 ``` % npm start ``` 或者 ``` % node app.js ``` 启动后,请在 Web 浏览器中访问 `http://127.0.0.1:8080` 等地址。 可以通过参数 `-p` 或 `--port` 指定端口号,通过 `-h` 或 `--host` 指定监听的主机地址。 ``` % node app.js -p 80 % node app.js --port 8080 --host 127.0.0.1 ``` 此外,可以使用 `-c` 或 `--config` 指定配置文件。如果省略,将读取同一目录下的 `config.json`。 ``` % node app.js --config /tmp/config.json ``` 默认情况下,系统会使用用户名 `user` 和密码 `pass` 启用 BASIC 认证。如果不需要 BASIC 认证,请编辑配置文件。 另外,虽然系统中注册了多个可用用户,但作为使用者(用于练习),建议使用邮箱地址 `akita@example.jp` 和密码 `1234` 登录。至于其他账户,请尝试利用漏洞来登录使用。 ## 配置文件 在配置文件 `config.json` 中,可以设置是否对网站本身启用 BASIC 认证,以及启用或禁用包含的漏洞。 ``` { "global" : { "basic" : "user:1234" // BASIC認証のユーザー名とパスワード }, "vulnerabilities" : { "sqli" : ["auth", "search", "blind"], // SQLインジェクション "xss" : ["reflect", "dom" ], // XSS "session" : [ "no-refresh", "no-httponly", "serial" ], //セッション情報の不備 "expose" : ["contaft", "dirindex", "admin"], // 情報の露出 "xxe" : true, // XXE "csrf" : true // CSRF } } ``` - 在 `global.basic` 中指定用户名和密码后,将启用 BASIC 认证,在访问 BadLibrary 网站时会要求输入用户名和密码。 - 如果在 `vulnerabilities.sqli` 的元素中指定了 `"auth"`,将启用登录界面的 SQL 注入,从而可以通过 SQL 注入绕过认证。 - 如果在 `vulnerabilities.sqli` 的元素中指定了 `"search"`,将启用借阅历史界面的 SQL 注入。 - 如果在 `vulnerabilities.sqli` 的元素中指定了 `"blind"`,将启用书籍信息界面的盲注 SQL 注入。 - 如果在 `vulnerabilities.xss` 的元素中指定了 `"reflect"`,将启用借阅历史界面的反射型 XSS。 - 如果在 `vulnerabilities.xss` 的元素中指定了 `"dom"`,将启用 404 错误页面的基于 DOM 的 XSS。 - 如果在 `vulnerabilities.session` 的元素中指定了 `"no-refresh"`,登录后将不会更改 Session ID。 - 如果在 `vulnerabilities.session` 的元素中指定了 `"no-httponly"`,将不会为 Session ID 赋予 HttpOnly 属性。 - 如果在 `vulnerabilities.session` 的元素中指定了 `"serial"`,Session ID 将以连续数字而不是哈希值的形式发放。 - 如果在 `vulnerabilities.expose` 的元素中指定了 `"contact"`,将可以查看咨询内容的日志。(如果未指定此选项,则完全不会记录任何咨询内容。) - 如果在 `vulnerabilities.expose` 的元素中指定了 `"dirindex"`,将启用咨询日志的目录索引。同时还需要指定 `vulnerabilities.expose = ["contact"]`。 - 如果在 `vulnerabilities.expose` 的元素中指定了 `"admin"`,任何人都可以在无需登录的情况下访问管理界面。 - 如果将 `vulnerabilities.xxe` 设置为 `true`,将在管理界面的图书注册中启用 XXE。同时还需要指定 `vulnerabilities.expose = ["admin"]`。 - 如果将 `vulnerabilities.csrf` 设置为 `true`,将在咨询界面等处启用 CSRF。 ## 安全性 BadLibrary 不包含诸如 OS 命令注入等可能破坏环境的漏洞。此外,数据库是以只读模式打开的,因此也不会发生数据库损坏的情况。因此,即使多人同时访问同一台服务器,通常也不会出现环境被破坏导致诊断无法继续进行的问题。 但是,如果将 BadLibrary 公开部署为任何人都可以访问的状态,请注意以下几点。 - 如果指定了 `vulnerabilities.xxe = true` 并启用了 XXE,可能会导致服务器上的机密信息泄露。 - 如果指定了 `vulnerabilities.expose = ["contact"]` 并允许查看咨询日志,作为咨询内容写入的信息可能会发生泄露。此外,大量的写入操作也可能会消耗服务器上的磁盘空间。 除上述情况外,系统也可能包含非预期的、真正意义上的漏洞。 ## 许可证 This software is released under the MIT License, see LICENSE.txt.
标签:BASIC认证, CISA项目, CTF训练, GNU通用公共许可证, intentionally vulnerable app, MITM代理, Node.js, NodeJS靶场, OPA, Web安全, 代码审计学习, 安全培训, 安全测试, 攻击性安全, 教育用途, 数据可视化, 渗透测试训练, 漏洞演练平台, 网络安全教育, 网络靶场, 自定义脚本, 蓝队分析, 轻量级靶场, 靶场