SJTU26校赛出题记录
此次出题过于执着于防AI以及AI agent工具使用,反而忽略了碳基古法解题的做题体验,线上赛看大家问卷反馈也是发现此次出题效果很差,在此向大家谢罪 XD。 【Stack UAF】NekoGarden题目预期难度:简单题目评价:该题目是一道防 agent 题目,虽然是在第三天凌晨就被 b0ar 大佬拿下一血(结合该选手其他题目解题情况合理怀疑是编排了很强力的 agent 自动解题。但是整场比赛七天下来在最后两天放出提示后才两解(另一解看wp应该是真人手打的),基本上可以认为是防住了 AI 大人。但是没想到的是把真人也防住了,导致最后解数太低(该题目预期难度简单,考验手动调试),实在惭愧。 起因是看到一个漏洞:CVE-2024-23354该漏洞是内核中 kgsl gpumem 逻辑中,op 结构体 op->data 成员被赋值为栈上变量地址,可以通过提前kill进程导致栈对应函数提前释放。因此考虑在用户态对此种情况进行复现,通过 pthread_t 的生命周期管理导致子线程函数提前退出然后触发栈上变量UAF。这也就是这道题目的由来,题目的漏洞点在于...
CVE-2026-21385漏洞复现
实验环境 小米15 (snapdragon 8 Elite) 漏洞分析漏洞位于 kgsl 驱动上,相关 patch commit 有关 kgsl 的基本介绍可以阅读:Attacking the Qualcomm Adreno GPU 根据其描述可知为整数下溢。在 kgsl_sharedmem.h 中 kgsl_memdesc_get_align 函数内容如下 123456789101112/* * kgsl_memdesc_get_align - Get alignment flags from a memdesc * @memdesc - the memdesc * * Returns the alignment requested, as power of 2 exponent. */static inline intkgsl_memdesc_get_align(const struct kgsl_memdesc *memdesc){ return FIELD_GET(KGSL_MEMALIGN_MASK,...
Kernel-PWN-Race
uffd(userfaultfd)该功能在 5.11 版本后变成需要 root 权限。 1int sysctl_unprivileged_userfaultfd __read_mostly = 1 该值在较新版本中会默认为 0。可以通过命令验证是否开启 1234$ cat /proc/sys/vm/unprivileged_userfaultfd 1$ sysctl vm.unprivileged_userfaultfdvm.unprivileged_userfaultfd = 1 不过该功能十分好用。userfaultfd 为用户可以为特定地址注册 page handler ,当 内核触发特定地址 pagefault 时,就会阻塞进而执行 handler 内容。从而可以在让内核读写时暂停,然后开启另一个线程进行篡改,实现 race。 1 punch hole在 CTF 题目中,如果关闭了 userfaultfd 以及 fuse 情况下,同时时间竞争窗口较小,可以通过该方法来扩大时间窗口。其基本原理是 fallocate 系统调用支持对 打开文件的对应内存打洞,即...
Android-GPU-Driver
两个主流的安卓GPU驱动,ARM Mali 以及 Qualcomm Adreno MaliGPU driverGPU 驱动作为安卓内核模块,其可以用于实现 LPE。在 Android 内核中 GPU 软件技术栈依赖于进程中 HAL 模型,其与 GPU 内核模块通信的 API 和 用户空间驱动直接运行在 app 上下文中,避免了 IPC 的使用。其导致第三方应用可以直接访问内核模块提供的接口。如果存在漏洞,第三方应用可以直接进行漏洞利用。 攻击面:GPU driver,GPU Firmware在 Mali GPU 驱动架构中,每一个 client 进程维护了一个上下文。当 client 进程 打开 /dev/maliX 设备文件,GPU 驱动就会给其创建一个 GPU 对象 kbase_file 结构体,通过 handshake 相关 ioctl 系统调用,可以初始化 kbase_file->ctx 结构体对象。 模拟可以使用 Cuttlefish 以及 2025年 39c3 上的一个议题来实现对 gpu...
ebpf入门
eBPF(extended Berkeley Packet Filter),ebpf 支持程序在不修改内核源码,或添加额外内核模块情况下运行,添加内核新功能。 架构 用户态 用户编写 ebpf 程序,可使用 ebpf 汇编或者 ebpf 特有 c 语言编写; 使用 llvm/clang 编译器,将 ebpf 程序编译为 ebpf 字节码; 调用 bpf() 系统调用将 eBPF 字节码加载到内核 内核态 ebpf 字节码到内核时,内核会先对其进行安全验证; 使用 JIT (Just In Time)将 字节码编译为本地机器码; 根据 eBPF 程序功能,将机器码挂载到内核的不同运行路径上(例如跟踪内核运行状态的ebpf 程序会挂载在 kprobes 的运行路径上)。当内核运行到这些路径上,就会触发执行相应路径上的 eBPF 机器码; 原文拿来和 JAVA 的 AOP 概念做类比,这里由于本人没有 java 基础,所以不再赘述,感觉只是挂钩函数功能而已,欢迎评论区指正...
Linux kernel 内存布局
page tableLinux 定义了 5 级页表。其虚拟地址对应的物理地址通常由 page frame number(pfn) 引用。page frame number 表示 page 的物理地址➗PAGE_SIZE。以 4kB 一页,32位大小地址空间而言, pfn 0 代表 0x00000000,pfn 1 代表 0x00001000,以此类推。如果是 16 kB 则是 0x00000000, 0x00004000…对于 4KB 页,其页pfn使用的到地址为 12-31 位,此即 PAGE_SHIFT=12 的含义,PAGE_SIZE = (1 << PAGE_SHIFT) pfn 再往上一层为 PTE (page table entries),不过后来随内存增大,page 索引层级也越来越多。目前 page table 层级如下: 12345678910111213141516171819+-----+| PGD |+-----+ | | +-----+ +-->| P4D | +-----+ | ...
CVE-2022-20421 漏洞复现
CVE漏洞编号:CVE-2022-20421google bulletin:https://source.android.com/docs/security/bulletin/2022-10-01?hl=zh-cn相关patch commit:https://android.googlesource.com/kernel/common/+/19bb609b45fb 环境搭建aosp编译报错:not found libncurses.so.5debian 版本太新,需要下载较老的库并放入 /lib/x86-…/ 中 libncurses.so.5 libtinfo.so.5 android-kernel 选择较老的分支:android-gs-raviole-5.10-android12-d1 1234repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/kernel/manifest -b android-gs-raviole-5.10-android12-d1repo init...
template for obsidian
Overviewbinder 为 Android 层为不同进程之间实现 IPC 通信的系统组件,由于在 SELinux 保护下,untrusted_app 以及 isolated_app 也可以访问 binder,因此攻击面较广。binder 中用于并行同步的原语包括:5个锁,6个引用计数器,一些原子变量binder 上提权 root 的历史漏洞: CVE-2019-2025 Waterdrop: slides, video CVE-2019-2215 Bad Binder: blog, video CVE-2020-0041: blog CVE-2020-0423 Typhoon Mangkhut: slides, video CVE-2022-20421 Bad Spin: whitepaper, video Making an RPC call with Binder与 binder 的交互方式。通过 /dev/binder 设备文件进行交互。 12int fd = open("/dev/binder", O_RDWR, 0);void *map...
Steam-for-Linux-CheetSheet
记录一些在 linux 上配置 steam 以及 proton 的 tricks protonproton 管理工具:protonplus proton-ge-custom dwproton cachyos-proton 启动选项仅 Nvidia显卡: 1__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus=NVIDIA_only VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json gamemoderun %command% 设置 cache: 1__GL_SHADER_DISK_CACHE=1 设置 steam 预编译着色器缓存使用 cpu 核数: 12# ~/.steam/steam/steam_dev.cfgunShaderBackgroundProcessingThreads <cpu-num> ESYNC, FSYNC,...
Android 内核编译模拟
环境配置硬件配置64GB内存 工具 aosp android-kernel Android Studio adb 等 android-tools 1sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig rsync 1234export REPO=$(mktemp /tmp/repo.XXXXXXXXX)curl -o ${REPO} https://storage.googleapis.com/git-repo-downloads/repogpg --recv-keys 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65curl -s...
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)
.jpg)