appleweiping/asu-cse365

GitHub: appleweiping/asu-cse365

该项目在本地 WSL2 环境中完整复现了 ASU CSE365 网络安全入门课程的七个实验模块,涵盖从 SUID 滥用到 Web 漏洞利用的进攻性安全基础技术,每个模块均附带可运行的 solver 脚本和真实输出验证。

Stars: 0 | Forks: 0

# ASU CSE365 — 网络安全简介(本地实验室) ![status](https://img.shields.io/badge/status-complete%20(1%20documented%20partial)-brightgreen) ![language](https://img.shields.io/badge/C%20%7C%20x86--64%20asm%20%7C%20Python-informational) ![license](https://img.shields.io/badge/license-MIT-blue) ## 教学范围(请先阅读) 本仓库是用于公立大学安全课程的**授权自学课程作业**。这里的每个练习都是**独立的本地复现**,由我在自己的 WSL2 沙箱中完全构建并运行,仅针对我自己的故意存在漏洞的靶机以及我植入的“flag”文件。这里没有任何针对真实、第三方或远程系统的内容;没有恶意软件,没有 C2,没有 DoS,也没有检测规避工具。内存错误模块中不安全的编译选项和禁用的 ASLR **仅在抛弃型实验沙箱中应用**,用于教授经典的内存安全概念。请将其用于学习。 ## 概述 CSE365 以一系列 CTF 风格的模块来教授进攻性安全的基础知识。本仓库通过小型、真实、可在本地运行的实验室复现了模块主题——SUID 提权、脚本化的程序交互、手写的 x86-64 汇编、gdb 驱动的调试、二进制逆向工程、32位栈溢出以及存在漏洞的 Web 应用程序——每一个都带有可工作的 exploit/solver,并通过将真实输出捕获到 [`results/`](results/) 中进行了验证。 ## 模块与结果(在 WSL2 Ubuntu 24.04, x86-64, 仅 CPU 环境下测量) | # | 模块 | 本地复现 | 验证结果 | |---|--------|--------------------|-----------------| | 01 | 程序误用 | 仅限 root 的 flag + 6 个 SUID-root coreutils | 直接读取**被拒绝**;用户 `hacker` 通过所有 **6** 个 SUID 工具成功读取 flag | | 02 | 程序交互 | token 握手 + 50 个限时问题,pwntools solver | **50/50** 问题已解答,flag 已恢复 | | 03 | 汇编编写 | 6 个手写的 NASM 程序 + RWX 运行器 | **8/8** 检查通过;`execve("/bin/sh")` shellcode 成功启动真实 shell (`uid=0`) | | 04 | 调试 | 运行时 keyed crackme,两种 gdb 解决方案 | 从实时内存中恢复了密钥 `JZL:=<`,**并**在运行时修补了比较逻辑;两种方式均成功捕获 flag | | 05 | 二进制逆向工程 | 从 ELF 中逆向出密钥检查 | 从 `.rodata` 中恢复了 11 字节密钥 + 反向转换;二进制程序已解锁 | | 06 | 内存错误 | 32位 `ret2win` → shell | saved-EIP 偏移量 **76** (cyclic/core dump),`ret2win`@`0x80491f6`,通过启动的 shell 获取 flag + `id` | | 07 | Web 安全 | 存在漏洞的 Flask 应用,4 个 bug 类别 | **6/6** exploit:命令注入、SQLi 绕过 + UNION exfil、SSTI RCE、反射型 XSS | **最近一次完整运行:`7/7` 模块全部通过** — 见 [`results/SUMMARY.txt`](results/SUMMARY.txt) 以及 [`results/`](results/) 中的各模块日志。Flag 在每次运行时都是随机生成的,因此每份日志显示的都是最新捕获的 `pwn.college{local_...}` 值。 ## 已实现模块 - [x] **01 · 程序误用** — GTFOBins 风格的 SUID 误用 (`cat`, `sed`, `awk`, `tail`, `cut`, `find`)。 - [x] **02 · 程序交互** — pwntools `recvuntil`/正则表达式/`sendline` 自动化。 - [x] **03 · 汇编编写** — const/sum/max/memsum/popcount + `execve("/bin/sh")` shellcode。 - [x] **04 · 调试** — gdb 从内存中恢复密钥 + 运行时比较逻辑修补。 - [x] **05 · 二进制逆向工程** — 逆向 `(k^0x5A)+i`,从 `.rodata` 读取 `target[]`。 - [x] **06 · 内存错误** — 循环偏移栈溢出,`ret2win`,驱动已启动的 shell。 - [x] **07 · Web 安全** — 命令注入,SQLi(绕过 + UNION exfil),Jinja2 SSTI RCE,反射型 XSS。 ## 项目结构 ``` asu-cse365/ ├── run_all.sh # copies repo to an ext4 workdir, runs every module, writes results/ ├── 01-program-misuse/ # setup.sh + solve.sh + run.sh ├── 02-program-interaction/ # interaction_challenge.c + solve.py ├── 03-assembly-crafting/ # sol_*.asm + runner.c + shellcode_runner.c + run.py ├── 04-debugging/ # license.c + solve_recover.gdb + solve_patch.gdb ├── 05-binary-reverse-engineering/ # crackme.c + solve.py ├── 06-memory-errors/ # vuln.c + solve.py ├── 07-web/ # app.py + solve.py └── results/ # REAL captured output (committed as evidence) ``` ## 如何运行 要求使用安装了 `gcc` (+ `gcc-multilib`)、`nasm`、`gdb` 的 WSL2 Ubuntu,以及一个包含 `pwntools`、`flask`、`requests` 的 Python venv。该 venv 不保存在 `C:` 盘上: ``` # 一次性 toolchain sudo apt-get install -y build-essential gcc-multilib nasm gdb python3-venv python3 -m venv /mnt/d/Project/security/.venv-cse365 /mnt/d/Project/security/.venv-cse365/bin/pip install -r requirements.txt # 运行所有内容(以 root 身份,用于 SUID + ASLR 切换),捕获 results/ wsl -d Ubuntu -e bash -lc 'bash /mnt/d/Project/security/asu-cse365/run_all.sh' # 或单个 module bash 03-assembly-crafting/run.sh ``` ## 验证 每个模块都会将其真实的终端输出写入 `results/.txt`,并且 `results/SUMMARY.txt` 会记录每个模块的 PASS/FAIL 状态。每个 solver 都会对捕获的 flag / 预期值进行断言,因此绿色的运行结果是真实的(而不是打印出来的虚假声明)。重新运行会重新生成全新的随机 flag 并重新推导它们。 ## 部分 / 仅限托管平台 **带有评分的 pwn.college dojo**(按用户分配的挑战二进制文件以及真实的服务器端 `/flag`)无法离线镜像——这部分属于已记录在案的不完整部分。本仓库针对本地类似环境复现了每个模块的*技术原理*,并进行了端到端的验证;它没有也无法向托管记分板提交 flag。要获得 dojo 积分,请在 [pwn.college](https://pwn.college/) 上运行相同的技术。 ## 技术栈 C (gcc, 32位和64位), x86-64 汇编 (NASM), Python 3 ([pwntools](https://github.com/Gallopsled/pwntools), Flask, requests), gdb, objdump, 运行于 WSL2 Ubuntu。 ## 核心思想 / 我学到了什么 - SUID 二进制文件以文件所有者的有效 UID 运行——单个被误用的实用程序就相当于一次完全的权限提升。 - 为程序 I/O 编写脚本(解析后响应的循环)在任何限时挑战-响应中都能击败人类。 - 手动编写 shellcode:SysV 调用约定,以及如何在 RWX 页面中通过原始字节实现 `execve("/bin/sh")`。 - 调试器是一种 exploit 基础手段:从实时内存中读取机密信息,或者重写内存/寄存器以改变控制流。 - 逆向检查程序意味着反向推导其算法,并直接从二进制文件的 `.rodata` 中提取常量。 - 栈溢出:使用循环模式(cyclic pattern)找到保存的返回地址偏移量,将其覆盖,并跳转到代码执行(`ret2win` → shell)。 - Web 安全的“四大金刚”:OS 命令注入、SQL 注入、模板注入(SSTI)以及反射型 XSS——所有这些的根源都在于未经处理的输入跨越了解释器边界。 ## 致谢与许可 基于 Yan Shoshitaishvili、Connor Nelson 以及 pwn.college 团队编写的 **pwn.college / ASU CSE365 – 网络安全简介** 模块主题。 本仓库是对针对自行编写的本地目标所进行的*技术*的独立教育性复现;所有课程材料和托管 dojo 均归其原作者所有。此处的原创代码基于 [MIT License](LICENSE) 发布。
标签:Pwntools, Web报告查看器, 云资产清单, 快速连接, 搜索语句(dork), 汇编语言, 网络安全教育, 逆向工程