BUUCTF-jarvisoj_fm 题解
Created|Updated|BUUCTF 题解
|Post Views:
题目
checksec

IDA

利用格式化字符串漏洞篡改 x 为 4 即可,注意这里是 32 位
exp
1 | from pwn import * |
Author: RatherHard
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Related Articles
2026-02-09
BUUCTF-NewStarCTF-2023-dlresolve 题解
题目 题目链接 攻击思路 64 位下 ret2dlresolve 模板题 注意将返回地址覆盖为 plt 内容后可再接返回地址控制程序流程 注意 _dl_runtime_resolve 有点像 srop 会还原寄存器 exp 12345678910111213141516171819202122232425262728293031323334353637383940414243444546from pwn import *context.log_level = 'debug'context.arch = 'amd64'context.terminal = ['tmux', 'splitw', '-h']debug = 0if debug: io = process('./pwn_patched')else: io = remote('node5.buuoj.cn', 28062)link_map_base = 0x404800binsh_add...
2026-01-12
BUUCTF-NewStarCTF-ret2csu1 题解
题目 题目链接 checksec IDA csu 中有 call [r12 + rbx*8] ,令 r12 为指向 backdoor 地址的一个地址即 gift3 , rbp 为 0 即可调用 backdoor 根据 execve 的参数定义,令 rdi -> “/bin/cat\x00” 即 rdi = aBinCat , rsi = gift2 , rdx = 0 再调用 backdoor 即可 exp 1234567891011121314151617181920from pwn import *context.log_level = 'debug'context.arch = 'amd64'io = process('./ret2csu1')csu1 = p64(0x40072A)csu2 = p64(0x400710)rdi = p64(0x4007BB)rsi = p64(0x601050)backdoor = p64(0x601068)padding = 32 + 8payload = b&...
2026-01-12
BUUCTF-NewStarCTF-2023-orwrop 题解
题目 题目链接 checksec 有 canary 保护 IDA 有沙箱,考虑 orw 可利用格式化字符串漏洞泄露 canary 然后发现 mmap 开了一个 rwx 区域 考虑栈迁移和 ret2shellcode 我们可以在第一次溢出时迁移 rbp 并再次调用溢出漏洞,然后由于 buf 的写入是以 rbp 为基准的,所以在第二次溢出时栈已迁移,可以直接在 rwx 段上布局 shellcode 实现 orw exp 123456789101112131415161718192021222324252627282930313233343536from pwn import *context.log_level = 'debug'context.arch = 'amd64'elf = ELF('ezorw')io = process('./ezorw') fmt = b'%11$p'io.recvuntil(b'sandbox\n')io.sendline(fm...
2026-01-16
BUUCTF-NewStarCTF-2023-ezheap 题解
题目 题目链接 checksec 全开 IDA main 菜单题 menu add 一次 add 申请两个 chunk ,记为 head_chunk 和 content_chunk delete 有明显的 UAF 漏洞 show delete 后仍可以 show edit delete 后仍可以 edit read_idx read_size 攻击思路 由于一次 add 申请两个 chunk ,而一次 delete 只 free 掉 head_chunk 且不清空数据,而 delete 后仍可以 edit,所以我们可以通过两次 delete 和一次 add 获得一个 head_chunk 的控制权,进而利用 edit/show 实现 AAW/AAR 同时,在上面的操作之前 delete 掉一个 head_chunk 使之进入 tcache ,我们可以利用 chunk 的残留值泄露堆地址,实现对堆的完全控制 然而由于我们并没有操作栈的机会,也没有办法劫持 got 表,因此我们考虑去劫持 __free_hook 函数,这需要泄露 libc 基址 由于 tcache ...
2026-02-06
BUUCTF-NewStarCTF-ret2csu2 题解
题目 题目链接 checksec 没有 canary 和 pie 但开了 Full RELRO ,要注意 .got 的只读属性 IDA 存在栈溢出,溢出长度较小,考虑栈迁移 攻击思路 栈迁移即可, leak 出 libc 基址后,利用 csu 构造 rop 链时考虑使用栈拼接的技巧 exp 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071from pwn import *from onegadget_selector import *context.log_level = 'debug'context.arch = 'amd64'context.terminal = ['tmux', 'splitw', '-h']libcoffsetdict = {...
2026-02-01
BUUCTF-ZJCTF-2019-Login 题解
题目 题目链接 checksec 存在 canary 保护 IDA main 一个简单的登录系统 观察到 [rbp-0x130] ,它来自于 password_checker 的 rax Admin_password_checker snprintf 这里有一个坑, src 和 dest 相同会产生 buffer overlap 的问题,产生非预期结果,而使用 ‘\x00’ 可以截断这种行为 其实经过动调可知,我们应该劫持 a1 为后门函数地址 Admin_password_checker_asm 上面的 a1 即此处的 rax ,为 rdi 解两层引用,接下来回到 main 去溯源 rdi main_asm rdi 溯源至 rbp - 0x130 ,注意并不是 [rbp - 0x130] , [rbp - 0x130] 溯源至 password_checker 后的 rax password_checker_asm rax 溯源至 rbp - 0x18 ,注意并不是 [rbp - 0x18] ,由此 call rax 中的 rax 最终溯源 [rbp - 0x18...
Announcement
Ciallo~(∠・ω< )⌒☆