ropchain的利用与静态编译——inndy_rop
一道静态编译的题目,直接给了gets函数栈溢出。 这道题主要是学到了ROPgadget可以直接生成静态的rop链 ROPgadget --binary ./inndy_rop --ropchain 直接填偏移量即可 还有一点就是,我最开始的思路是通过syscall来解决,理论可行,但实际上用ROPgadget我搜不到带有ret的int 0x80,这…
格式化字符串泄露canary——newstarctf2025_fmt and canary
一道利用格式化字符串漏洞泄露canary值的题目 如何泄露就不细说了,在下面的文章已经讲过,这里只需要记住 $np n=6是泄露的是栈顶就行了 https://l1rics06.fun/?p=289 这里补充一下这道题的另外一个点,也就是如何泄露got表的偏移,使用ROPgadget发现程序并没有可以现成利用rdi的gadget,也就是我们不能直接…
ret2scu——newstarctf2025_calc_beta
一道综合的ret2scu题目 如何劫持程序流程? 题目实现了一个计算器的模拟,通过对内存栈分区的操作保存数字,题目提示在计算部分操作 在程序的编辑函数模块中有个关键漏洞,首先getnum函数也就是一串字符串并将它自动转化为一个8字节长整数,这里的v3是无符号整数,v3-1本意是想实现用户输入的index(从1开始)和数组index(从0开始)的转换…
orw,sandbox——newstarctf_noshell
第一次遇到sanbox和orw的题,学到很多,故写详细一点 分析 题目乱起八糟很长,但本质就是用sandbox禁用了和execute相关的全部指令 这时就要考虑用orw方法,也就是open read write直接读出flag的内容 大体的流程如上 这边补充了一下文件标识符fd的知识,fd默认0 1 2是 stdin stdout error 之后…
两次shellcode——newstarctf_input small function
与直接利用shellcraft.sh()生成shellcode不同,这次第一次只能输入14字节,于是想到二次利用 因为没有开PIE,所以可写段就在0x114514那里 Exp from pwn import * context(arch="amd64",os="linux",log_level="debug") #sh = process("./i…
ctypes与伪随机——moectf2025_boom
一道模仿canary保护的题目,关键在于使用time(0)种子在一秒内不变这个性质,构造和栈上相同的随机数,绕过检查 程序的init函数最开始使用了当前时间来生成随机数种子 程序的保护机制就是通过最开始init生成的一个随机数种子生成一个随机数放在栈上v5的位置,最后通过检查v5的值是否被篡改,从而来判断是否遭受了缓冲区栈溢出攻击 (因为我们输入的…
格式化字符串泄露——moectf2025_fmt
本题跟着程序思路做即可,主要是有几点细节要注意 注意点 寄存器地址泄露完全后,继续泄露会从栈顶(rsp)开始读取栈 直接获取栈中被视为第 n+1 个参数的值 %n$x printf函数会将传入的格式化参数类型进行解引用,例如%s会将内存上的内容当作字符串指针,找到对应的字符串读取 这也是关于为什么本题没有直接通过%s读取s2的内容,而是通过%p直接…
延迟绑定与动态链接——moectf2025_ezlibc
本体涉及到延迟绑定与动态链接知识点,知识点详细的解释可以看一看这篇文章 https://www.cnblogs.com/pannengzhi/p/2018-04-09-about-got-plt.html 简单来说 第一遍泄露的地址是一个程序运行的地址PIE + 一段检测&装填got表的代码 printf 相当于第一次调用read这个外部函…
简单栈迁移–moectf2025_ezpivot
exp from pwn import * sh = process("./pwn") context(os = 'linux',arch = 'amd64',log_level = 'debug') gdb.attach(sh) elf = ELF("./pwn") sh.recvuntil(b"introduction.\n") sh.send…