ret2dlresolve 关于动态链接与延迟绑定 想起来再写… 时隔多年终于打算写了,之前认为这个方法比较抽象就没有深入研究,最近打比赛遇到没有gadget的题目时我的傲慢终于付出了代价 不过一切都不算太迟,现在来看看吧… 1printf("hello ret2dlresolve!"); 在c语言中写下这个句子,观察其汇编代码会看到有这么一段 1call printf@plt <printf@p 2026-01-15 OS #ret2dlresolve #动态链接 #延迟绑定
signal 此篇blog为SROP那一章的后续,主要补充一下linux中的信号处理机制 为什么写这篇呢,因为我发现我虽然能构造SROP利用,但是却并不明白为什么能这么做 最近在学习操作系统时,学习到了这么一个知识点,进程在进行上下文切换时,也会有保存寄存器,恢复寄存器这样的一个动作,但是保存的地方是内核栈,那我为什么在用户栈布置上下文(context)时能make sense呢? 经过查阅资料发现,原来这两 2026-01-15 OS #SROP #linux信号机制
fmt_bss 加餐~ 今天依旧是一道格式化字符串漏洞的题目,题目出自NewStarCTF2025的week5pwn 题目给的提示-> hint:对于常规的栈上格式化字符串漏洞,可以任意构造自己的恶意数据来实现任意地址写,但是对于非栈上变量来说,就无法直接给出目的地址的指针,此时就需要留意栈上残留的内容,看看能不能找到可以利用的点(善用你的gdb)… 先来看看题目逻辑 1234567891011121314 2026-01-02 pwn #fmt #指针
shellcode 今天来分享一下关于shellcode编写技术的一些题目,在此之前,需要你对x86-64的汇编指令,寄存器调用约定,栈有一定了解 先来讲比较简单的ret2shellcode技术 前提条件是NX保护没开,即栈可执行 因此可以直接使用pwntools的一个非常强大的集成功能 12from pwn import *shellcode = asm(shellcraft.sh()) 通常payload是: 2026-01-02 pwn #寄存器 #shellcode编写 #汇编语言
fmt_got 你好,又见面了… 也有可能是第一次见面? 算了今天不废话了,直接看题目吧 1234567891011121314151617void main(void){ long in_FS_OFFSET; char local_118 [264]; undefined8 local_10; local_10 = *(undefined8 *)(in_FS_OFFSET + 0x28); 2025-12-30 pwn #ret2GOT #fmt
ret2csu 别急,还没写… 好了,现在写了… 额,还记得上次没有gadget的情况下我们采用了SROP,但是倘若没有syscall也没法控制rax呢,别急,还有一个办法,便是今天的ret2csu ps:现在看来当时好天真TT 一般的elf文件在libc_start_main中会存在libc_csu_init对libc进行初始化,而恰好libc_csu_init中隐含着两个我们可以利用的gadget… 一般长这 2025-12-25 pwn #ret2csu #gadget
hello pwn! 为什么写blog? 为什么打ctf? 为什么选择pwn? 鬼知道 也许是无聊吧 用此博客来记录我在pwn学习过程中的一些题解与思考 希望你能有所收获… ps:自言自语 bro以为自己是网红blogger 实则静态博客闹麻了 不过写给以后的自己看似乎也不错??? modification: 于2026.1.1 最近学习了一些栈漏洞 本打算继续学堆 但是我要先摆几天 期末还没复习 不重要了 最讨厌的 2025-12-25 pwn #Hello,World!
SROP 建议先看stack pivot再来这里… ok题目来自XSWCTF2025初赛的一道pwn,考察了更加精妙的栈风水布局(基于stack pivot),同时融合着SROP和ORW,来看看吧! ps:虽然比赛时我也没做出来(x_x) 先看一下题目逻辑 123456789101112131415void main(void){ undefined1 local_78 [108]; unde 2025-12-25 pwn #栈迁移 #ORW #内存布局 #SROP #ret2libc #寄存器
stack pivot 题目出自哪里已经记不真切了 只依稀记得这是我正式做的第一道pwn题,当时的我就像刚出新手村的菜鸟遇见了大boss一般,与其鏖战了数个日夜才终于拿下 来看看吧! 题目逻辑非常之简单 123456789undefined8 main(EVP_PKEY_CTX *param_1){ undefined1 local_58 [80]; init(param_1); puts(" 2025-12-25 pwn #栈迁移 #内存布局 #ret2libc
a_strange_rop 题目来自2025XSWCTF决赛的pwn题: a_atrange_rop 赛后才做出来 我也真是无敌了… 题目为64位动态链接elf文件 保护为NX和canary 既然题目叫a_stranre_rop 我们先看看有没有gadget 1ROPgadget --binary ./a_strange_rop | grep "pop rdi" 找到了pop rdi; ret;这样的一 2025-12-25 pwn #gdb #内存布局