当前位置: 首页 > news >正文

leak 记录今天的一个小题

先看题,

  1. add没有大小限制,
  2. 这里edit可以溢出8字节,也就是可以改后边的size,可以调用4次
  3. free没有调用函数只是把指针置0,
  4. show可以用一次.
void __fastcall __noreturn main(__int64 a1, char **a2, char **a3)
{init_0(a1, a2, a3);while ( 1 ){menu();switch ( read_n() ){case 1LL:m1add();break;case 2LL:m2edit();                               // 溢出8字节  4次break;case 3LL:m3show();                               // 1break;case 4LL:m4free();                               // 无freebreak;case 5LL:exit(0);default:puts("Unknown");break;}}
}

其实这个题没啥说的,在libc-2.27当把top_chunk改小后建大于top_chunk的块大会把新块建在top的后边,因为这个块还没用完.原块会放入largebin 

解题思路:

  1. 先建个块0,利用溢出修改top_chunk 原来是20d91改为d91(尾部需要对齐,所以最好保持原样)
  2. 建个1000的块1,由于这个块比d91大会在现有top后新开辟空间(相邻)原块进入largebin(有指向main_arena+xxx的指针和堆指针)
  3. 建小块2这块会占用原largebin里的空间(旧top_chunk)这时show得到libc地址,如果改0x10字节再show还可以得到堆地址,不过这题只能show一次得到不到
  4. 改1利用溢出8字节修改新top_chunk长度为0xfffffffffffffff 64位全1
  5. 建大块 -22020 #3 当前块地址就是22010,这样建就会把块一直建到堆空间的头,下一块与tcache重合
  6. 建与tcache重合的块4(不通太小,原来的top_chunk后边还有个挺大的largebin没用呢)
  7. 编辑块4,写入一个0x20块的tcache项,再建块就会建到这,所这这里指到哪就能建到哪.这里指malloc_hook-8=realloc_hook 因为没有free,所以要在malloc_hook写one,one又有条件限制可能需要用realloc调栈(对应2.27版本 偏移有0,2,4,6,8,9,10)
  8. 建块,写入one

看似板子题,但是这有个问题,赛方给了一个很难见到的libc版本 libc-2.27-3ubuntu1.4-amd64

后来看了打通人的EXP, 他用的 3u1.5 

对于泄露main_arena的题来说,main_arena在大版本相同的情况下是完全相同的.根本不可能确定小版本,但是对于需要用one的题又必需确定小版本,现在出题都这么卷吗.

http://www.lryc.cn/news/90352.html

相关文章:

  • 软考A计划-试题模拟含答案解析-卷二
  • 【C++】pthread
  • 2023年前端面试题汇总-浏览器原理
  • react介绍,react语法,react高级特性,react编程技巧
  • Locust接口性能测试
  • Python类的特殊方法(通过故事来学习)
  • Vue.js 中的父子组件通信方式
  • Python之并发编程二多进程理论
  • 纯干货:数据库连接耗时慢原因排查
  • 【OneNet】| stm32+esp8266-01s—— OneNet初体验 | 平台注册及设备创建 | demo使用
  • 解决win无法删除多层嵌套文件夹
  • 用Vue简单开发一个学习界面
  • Oracle数据库从入门到精通系列之五:数据文件
  • 使用MockJS进行前端开发中的数据模拟
  • Ex-ChatGPT本地部署+Azure OpenAI接口配置+docker部署服务
  • 【收藏】FP独立站建站安心收款经验分享
  • python:绘制GAM非线性回归散点图和拟合曲线
  • 每日算法(第十四期)
  • uboot的使用
  • 学习HCIP的day.09
  • Electron-Builder Windows系统代码签名
  • 数据分析概述
  • 网络编程初识
  • 软考A计划-试题模拟含答案解析-卷十二
  • I.MX RT1170加密启动详解(1):Encrypted Boot image组成
  • Linux---用户切换命令(su命令、sudo命令、exit命令)
  • 手机图片怎么提取文字?高效渠道一览
  • Elasticsearch 聚合数据结果不精确问题解决方案
  • Qt经典面试题:Qt开启线程的几种方式
  • 使用chartgtp写Android代码