geminishkv/course_labs
GitHub: geminishkv/course_labs
一套面向安全冠军计划和应用安全工程师的系统化实践培训课程,涵盖从基础工具链到SAST/DAST/SCA的完整安全技能体系。
Stars: 17 | Forks: 20

大家好 :wave:,
在此说明主要几点:
* 目标 - 培养使用 `git`, `CI`, `CD`, `docker`, `packages`, `appsec toolchain`, `yml` 等的技能。
* *部分作业基于 `Go`, `Python`, `JAVA`, `Shell` 等。
* 涵盖 `SAST`, `SCA`, `Container Security`, `DAST`, `Secret Detection` 等工具。
* 作业旨在深化和学习风险分析及应用程序安全评估的相关材料,这些对于迭代开发是必要的,同时也为学习编程模式和原型设计提供了额外的机会。
* 每个迷你项目必须按照提供的实验作业格式构建,并托管在 `GitHub` 服务上,同时生成相应的 `gistup` 格式报告以演示已完成的工作及结果截图(**在需要的地方**)。
* 对于每项实验作业,应创建自己的仓库(可以使用父仓库的 `fork`),其中包含项目的源代码,然后以 `gistup` 格式为其编写报告。
* 所有实验作业必须在 develop 分支中完成,并需要向 [geminishkv](https://github.com/geminishkv) 发起 `pull request` 并获得 [approve](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/requesting-a-pull-request-review),以此最终确认对远程提交的更改和修正的审批。

**注意:**
* 实验作业 - 无论基础水平如何,都必须参加、完成并进行迭代开发。
* 必须复制实施步骤并标记出自己已完成的具体内容。
* 每项作业最初应将更改迭代拆分为提交以便追踪。
* 每份报告需单独提交并进行答辩,使用的每条命令都必须在 `gistup` 报告中包含描述(解释),并附上终端输出及对控制台命令的解释。
* 实验作业中还涉及使用需要安装额外开源包的工具。
* 对于所有报告,应避免使用截图,而是插入控制台输出以及所使用的命令和标志的描述,并说明其含义以理解其工作原理。
敬请期待 ;)
### 步骤
1. 查阅[讲座](artifacts/ppt/)的学习资料
2. 查看[示例](artifacts/exmpls/)
3. 每个仓库必须包含 `.gitignore`, `code of condact`, `contributing`, `license`, `notice`, `security`,并且必须针对具体的实验作业或项目进行调整。
* **请注意**,在复用项目材料时,必须正确选择许可证类型,并应额外阅读相关许可协议。
* 报告示例在[这里](https://gist.github.com/MishaBary/21ab63f83292a86268e039d484a86411)
4. 按顺序完成以下作业:
- [ ] lab01 - [本实验作业旨在学习 **gitscm** 及后续作业的准备材料](labs/lab01/README.md)
- 作业材料在[这里](labs/lab01/)
- [ ] lab02 - [本实验作业旨在学习 *nix、权限控制及进程操作](labs/lab02/README.md)
- 作业材料在[这里](labs/lab02/)
- [ ] lab03 - [本实验作业旨在学习 **nmap** 及分析已发现的漏洞](labs/lab03/README.md)
- 作业材料在[这里](labs/lab03/)
- [ ] lab04 - [本实验作业旨在实际**分析并确定**信息安全风险的缓解措施](labs/lab04/README.md)
- [ ] lab05 - [本实验作业旨在学习 **Docker** 及其使用方法](labs/lab05/README.md)
- 作业材料在[这里](labs/lab05/)
- [ ] lab06 - [本实验作业旨在学习 **Docker CIS Benchmark** 以发现漏洞、检查 Docker-host 及其使用方法](labs/lab06/README.md)
- 作业材料在[这里](labs/lab06/)
- [ ] lab07 - [本实验作业旨在学习 SAST, SCA 以发现漏洞,并通过 Semgrep, Checkov, Dependency Check 进行实践](labs/lab07/README.md)
- 作业材料在[这里](labs/lab07/)
- [ ] lab 08 - [本实验作业旨在学习 DAST OWASP ZAP 及对易受攻击应用程序的手动测试](labs/lab08/README.md)
- 作业材料在[这里](labs/lab08/)
- [ ] lab 09 - *更新将稍后提供**
- [ ] lab 10 - [本实验作业旨在评估信息安全风险分析并实践相关知识](labs/lab10/README.md)
5. 完成最终作业并撰写报告
- [ ] pet_project - [本实验作业旨在评估信息安全风险分析并实践 Application Security 工具的相关技能](labs/pet_project/README.md) *更新将稍后提供**
### 规范要求
- ✔️ 统一的代码风格
- ✔️ 所有处理树结构的函数必须位于命名空间中
- ✔️ 根据项目内容设计 `README.md`
- ✔️ 根据项目内容设计 `.gitignore`
- ✔️ 根据项目内容设计 `.dockerignore`
- ✔️ 为项目使用合适类型的 `LICENSE` 和 `NOTICE`
- ✔️ 创建并使用脚本以自动化项目构建、示例、测试和打包
- ✔️ 使用 `GitHub Actions` 服务确保项目的持续构建流程
- ✔️ 使用 **doxygen** 工具编写项目文档
- ✔️ 确保在 `develop` 分支成功合并后,将项目包发布到 `GitHub Release` 服务
- ✔️ 在流程活动中对实验作业进行重构和维护
- ✔️ 所有命令必须严格从 `终端/控制台` 执行,除非涉及处理 tokens、密钥和特定设置,否则不得使用 `WebUI`
### 教程
* 准备环境
```
$ python3 -m venv .venv
$ source .venv/bin/activate
$ pip install -r requirements.txt
$ ruff format .
$ pip install mkdocs-include-markdown-plugin
$ python -m mkdocs serve --livereload
# 或
$ mkdocs serve -a 127.0.0.1:8001 # прямое обозначение адреса
$ pip show mkdocs # debug
```
* 清理本地仓库
```
$ rm -rf __pycache__ scripts/__pycache__ # etc.
$ lsof -i :8000
$ kill
```
* Release
```
$ git tag -a v1.0.0 -m “Основные изменения: …”
$ git push origin v1.0.0
# 使用的替代方案是 RELEASE_NOTES
$ git tag -a v1.0.0 -m "v1.0.0"
$ git add "Release Notes.md" && git commit -m "Update notes for v1.0.0"
$ git tag -a v1.1.0 -m "v1.1.0" # текущий релиз
$ git push origin v1.1.0
$ git tag -d v0.1.0 # удалить локальный тег
$ git push origin :refs/tags/v0.1.0 # удалить тот же тег на GitHub
```
* 本地测试 ci.yml
```
$ act -l
$ act -j имя_job # или общий act push
$ act push -b -v
$ act push -j build -b
$ act pull_request -j linter_checks_ruff_shell # конкретный job
$ act pull_request -j docs-preview -b # docs-preview и все зависимые job
$ ACT_SKIP_CHOWN=true act push -j linter_checks_ruff_shell -b
```
* 测试
```
$ abandit -r labs
$ aruff check .
$ anpx eslint "docs/**/*.js" "javascripts/**/*.js"
npx stylelint "docs/**/*.css" "stylesheets/**/*.css"
$ agit ls-files '*.sh' \
| grep -v 'labs/lab08/dast/zap_scan.sh' \
| grep -v 'labs/lab07/sca/dependency-check.sh' \
| grep -v 'labs/lab06/audit.sh' \
| xargs -r shellcheck -e SC2086,SC1090,SC1091
$ ayamllint .github/workflows mkdocs.yml
$ anpx markdownlint-cli2 "docs/**/*.md" "labs/**/*.md" "README.md"
$ mkdocs build --strict --clean --config-file mkdocs.yml --site-dir /tmp/mkdocs-check
```
### 仓库结构
```
├── assets
│ └── logotype
│ ├── logo.jpg
│ └── logo2.jpg
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── docs
│ ├── about.md
│ ├── APPENDIX.md
│ ├── appsec_tt.md
│ ├── artifacts
│ │ ├── assets
│ │ │ ├── favicon.ico
│ │ │ ├── logo.png
│ │ │ └── logotypemd.jpg
│ │ ├── cheatsheet
│ │ │ ├── CHEATSHEET_DOCKER.md
│ │ │ ├── CHEATSHEET_DOCKERIGNORE.md
│ │ │ ├── CHEATSHEET_GH_CLI.md
│ │ │ ├── CHEATSHEET_GIT.md
│ │ │ └── CHEATSHEET_GITIGNORE.md
│ │ ├── exmpls
│ │ │ ├── risk-analysis.png
│ │ │ ├── table1.png
│ │ │ └── transaction.png
│ │ ├── owasp
│ │ │ ├── Authentication.pdf
│ │ │ ├── Authorization.pdf
│ │ │ ├── Client-side_Attacks.pdf
│ │ │ ├── Command_Execution.pdf
│ │ │ ├── Information_Disclosure.pdf
│ │ │ ├── Logical_Attacks.pdf
│ │ │ └── OWASP_Top_10_CICD_Risks.pdf
│ │ └── ppt
│ │ └── Лекция_Управление Рисками ИБ_intro.pdf
│ ├── channel.md
│ ├── index.md
│ ├── javascripts
│ │ ├── custom-title.js
│ │ └── typewriter-target.js
│ ├── labs
│ │ ├── lab01.md
│ │ ├── lab02.md
│ │ ├── lab03.md
│ │ ├── lab04.md
│ │ ├── lab05.md
│ │ ├── lab06.md
│ │ ├── lab07.md
│ │ ├── lab08.md
│ │ ├── lab09.md
│ │ ├── lab10.md
│ │ └── pet_project.md
│ ├── licenses.md
│ ├── materials
│ │ ├── examples
│ │ │ ├── exmpl.md
│ │ │ ├── Multisignature.md
│ │ │ ├── PrintNightmare.md
│ │ │ └── RA.md
│ │ └── OWASPTOP10
│ │ ├── Authentication.md
│ │ ├── Authorization.md
│ │ ├── Client-side Attacks.md
│ │ ├── Command Execution.md
│ │ ├── Information Disclosure.md
│ │ ├── Logical Attacks.md
│ │ └── OWASP_Top_10_CICD_Risks.md
│ ├── RELEASE_NOTES.md
│ ├── robots.txt
│ ├── Security.md
│ └── stylesheets
│ ├── burger.css
│ ├── clipboard.css
│ ├── footer.css
│ ├── header.css
│ ├── layout.css
│ ├── mobile-logo.css
│ ├── search.css
│ ├── sidebar.css
│ ├── tools-overlay.css
│ └── typeset.css
├── eslint.config.js
├── labs
│ ├── lab01
│ │ ├── README.md
│ │ └── typersteel.py
│ ├── lab02
│ │ ├── exmpl_hello.py
│ │ ├── pygamesteel.py
│ │ └── README.md
│ ├── lab03
│ │ ├── exmp_targets.txt
│ │ └── README.md
│ ├── lab04
│ │ └── README.md
│ ├── lab05
│ │ ├── client
│ │ │ ├── client.py
│ │ │ ├── Dockerfile
│ │ │ └── requirements.txt
│ │ ├── docker-compose.yml
│ │ ├── README.md
│ │ ├── server
│ │ │ ├── app.py
│ │ │ ├── Dockerfile
│ │ │ └── requirements.txt
│ │ └── source
│ │ ├── Dockerfile
│ │ ├── hello.py
│ │ ├── image.tar
│ │ └── requirements.txt
│ ├── lab06
│ │ ├── audit_reports
│ │ ├── audit.sh
│ │ ├── config
│ │ │ └── nginx.conf
│ │ ├── docker-compose.yml
│ │ ├── README.md
│ │ └── vulnerable-app.yml
│ ├── lab07
│ │ ├── cheat_check_yuorself.sh
│ │ ├── docker-compose.yml
│ │ ├── README.md
│ │ ├── sast
│ │ │ ├── checkov-config.yaml
│ │ │ └── semgrep-rules.yml
│ │ ├── sca
│ │ │ ├── dependency-check.sh
│ │ │ └── pom.xml
│ │ └── vulnerable-app
│ │ ├── app.py
│ │ ├── config.yaml
│ │ ├── Dockerfile
│ │ └── requirements.txt
│ ├── lab08
│ │ ├── dast
│ │ │ ├── convert_reports.py
│ │ │ ├── reports
│ │ │ ├── zap_scan.sh
│ │ │ └── zap-baseline.conf
│ │ ├── docker-compose.yml
│ │ ├── README.md
│ │ ├── requirements.txt
│ │ └── vulnerable-app
│ │ ├── app.py
│ │ ├── Dockerfile
│ │ ├── files
│ │ │ └── secret.txt
│ │ └── requirements.txt
│ ├── lab09
│ │ └── README.md
│ ├── lab10
│ │ └── README.md
│ └── pet_project
│ └── README.md
├── LICENSE.md
├── mkdocs.yml
├── mypy.ini
├── NOTICE.md
├── README.md
├── RELEASE_NOTES.md
├── requirements.txt
├── ruff.toml
├── scripts
│ └── generate_sitemap.py
├── SECURITY.md
├── sitemap.xml
└── stylelint.config.cjs
```
Copyright (c) 2025 Elijah S Shmakov
 标签:AppSec, Bash, CISA项目, CTI, DevSecOps, Docker, Git, Markdown, MkDocs, Python, Security Champion, 上游代理, 安全实验室, 安全教育, 安全课程, 安全防御评估, 工具链, 应用安全, 教学资源, 文档, 无后门, 编排, 网络安全研究, 请求拦截, 逆向工具, 防御加固, 风险分析