0CTF/TCTF 2022 RisingStar Final 无中生有

题目要求构造一个64位 ELF,读取flag输出到stdout,并以137号 exit code 退出。该ELF文件中不允许存在 syscall 和 int 0x80 两个指令,不允许存在WX段,且进程受seccomp的限制需要分别调用64位和32位系统调用才能完成题目要求。因此要解该题,则必须动态构造出syscall和int 0x80两条指令。其中syscall指令在vdso中存在,可以复用,重点是如何泄露vdso基址(利用 auxv 或者暴破)。对于 int 0x80 指令,在有了syscall后,mmap一段RWX的内存,将对应的机器码写入即可。基于64位和32位系统调用能力,就能愉快地解出该题目了(x86_64 linux无需切换架构,可直接调用int 0x80)。
阅读全文

构造一个最小ELF文件

以 PlaidCTF 2020 的题目 golf.so 为目标,深入了解 ELF 文件格式,尽可能构造出满足条件的最小 ELF 文件
阅读全文

0CTF/TCTF 2022 RisingStar Final ftpd (ARM Pwn)

第六届TCTF新星赛决赛的一道 ARM Pwn 题 - ftpd。(1)题目作者将ftpd处理客户端目录名的逻辑做了反转,引入一个memcpy堆溢出漏洞,可溢出服务端session结构体(struct ftp_session_t),其中包含函数指针和session链表指针。(2)利用首先想到溢出函数指针,但直接溢出到函数指针会破坏前序数据,导致提前崩溃。(3)因此考虑溢出session链表,即伪造一个session结构体。伪造的session内容可以通过STOR命令发送到session->file_buffer中且无任何输入限制,而session的地址在每次重启ftpd后相对于堆基址的偏移是固定的,因此通过RETR读取/proc/self/maps获得堆基址后,即可计算得到session->file_buffer地址,即用于溢出的伪造session地址。(4)伪造session中的函数指针并不会自动调用,需要通过STOR命令构造出等待客户端数据的状态,当客户端发送数据时触发。(5)最后使用system和ROP两种方法完成利用。
阅读全文

GeekCon AVSS 2023 初赛示例题 CVE-2015-3636

Geekcon 2023 AVSS挑战赛的说明文档中,用 CVE-2015-3636 这个漏洞作为示例,展示了同一个漏洞在不同环境中(android 5/7/11)进行利用所面临的挑战。(没想到又碰到了这个漏洞hhh
阅读全文

经典内核漏洞复现之 dirtycow

虽然学了一阵内核pwn的利用,但是最近两次比赛都没能做出题来(太难了吧ㄒ_ㄒ,感觉新手友好的ko题不会再有了)。我还是老老实实分析分析CVE,学多点挖洞和利用技巧吧🥹。
阅读全文