首页 > 其他分享 >N1CTF2018 shopping:多线程堆题中堆溢出的应用

N1CTF2018 shopping:多线程堆题中堆溢出的应用

时间:2024-05-14 08:57:45浏览次数:39  
标签:arena 中堆 shopping 堆块 堆题 多线程 分配 溢出

介绍一种在多线程堆题中利用堆溢出达成任意地址分配的手法。

我们知道,一个进程的主线程的堆管理main_arena在libc中,分配的chunk在堆段中。那么子线程的arena和堆块都在哪里呢?
image
这一大串在libc前面一点点的anon就是给子线程留的arena和堆空间。arena和tcache管理chunk在这个内存段的最上面。(下面那个紫色的800000大小的段好像不是,没见过他被分配。)紫色的用完了就从白色哪里扩展。那么当图中所有的紫色和白色都用完了应该用哪里的内存地址了呢?
image
程序会用mmap或者其他的什么办法再搞来一段内存空间,然后把蓝色箭头指向的段(刚刚提到的带有arena的那个堆段)上面一些地方的地址分配给他们。这时我们可以发现,只要我们把这次分配的空间再用完,然后在最后一个堆块上实行堆溢出,溢出的部分就能覆盖到子线程的arena。控制了arena就好说了,在fastbin上随便写写就能任意地址分配了。

回到题目
例题:N12018 shopping
题目只有一个malloc功能,malloc完了以后可以在堆块上写点东西也可以不写,没有free没有show没有edit,单纯看下来挺难做的。Read()函数有一个不易察觉的我没发现的洞,只要一次读入数据没有把nbytes用完,那么就可以再读入nbytes,达成堆溢出。这样就可以通过上述手法,申请大量堆块,通过堆溢出覆盖fastbin。达成任意写之后在bss上画一个system就能getshell了,很方便很仁慈。

标签:arena,中堆,shopping,堆块,堆题,多线程,分配,溢出
From: https://www.cnblogs.com/SegTree/p/18190512

相关文章

  • C#异步与多线程
    c#的异步与多线程异步与多线程首先,异步是相对于同步的一个概念,在同步环境下,程序允许至某处需要等待的位置,会发生阻塞,直到达到条件才会继续向下运行;而异步操作则可以在需要等待的位置,跳过等待,执行其他内容,通常异步处理的事务不能相互存在影响。多线程指的是,同时使用多个线程执行......
  • mybatis多线程插入数据表已经事务回滚
    importlombok.extern.slf4j.Slf4j;importorg.apache.commons.collections4.CollectionUtils;importorg.apache.commons.collections4.ListUtils;importorg.apache.ibatis.session.ExecutorType;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibati......
  • C#多线程
    目录C#线程概述定义程序、进程、线程基本语法C#可以通过Thread、ThreadPool、Task(推荐)创建线程。前台线程和后台线程共享数据保护机制优缺点/应用场景优缺点常见的应用场景总结C#线程概述定义线程(thread)是计算机科学中将进程划分为两个或多个线程(实例)或子进程,由单处理器(单线程......
  • 多线程应用
    importtimeimportthreadingdeffunc_one(name):fornuminrange(1,6):print(f"{name}第{num}次执行")time.sleep(1)deffunc_two(name):fornuminrange(1,6):print(f"{name}第{num}次执行")time.sleep(1......
  • 爬虫多线程代码调试
    第一次调试fromthreadingimportThreadfromfake_useragentimportUserAgentimportrequestsfromtimeimportsleepforiinrange(1,11):url=f"https://www.hupu.com/home/v1/news?pageNo={i}&pageSize=50"headers={"User-......
  • C#实现多线程的几种方式
    思维导航前言多线程常用场景什么是进程?什么是线程?使用Thread类使用ThreadPool类使用Task类使用Parallel类拾遗补漏合集DotNetGuide技术社区交流群前言多线程是C#中一个重要的概念,多线程指的是在同一进程中同时运行多个线程的机制。多线程适用于需要提......
  • C#实现多线程的几种方式
    前言多线程是C#中一个重要的概念,多线程指的是在同一进程中同时运行多个线程的机制。多线程适用于需要提高系统并发性、吞吐量和响应速度的场景,可以充分利用多核处理器和系统资源,提高应用程序的性能和效率。多线程常用场景CPU密集型任务.I/O密集型任务.并发请求处理.大数......
  • 理解 iOS 中的多线程编程
    在iOS应用开发中,多线程编程是一项关键技术,可以帮助应用实现更好的性能和响应性。本文将详细解释iOS中的多线程编程,并讨论如何在应用中正确地使用多线程以提高性能和响应性。1.什么是多线程编程?多线程编程是指在一个应用程序中同时执行多个线程(线程是进程中的执行单元),从而实......
  • RR级别-多线程环境下-for update+插入操作包含的间隙锁+插入意向锁引发的死锁问题
    记录selectforupdatemysql死锁问题_执行select...where...forupdate是否会造成死锁(deadlock)-CSDN博客......
  • java 多线程CountDownLatch
     CountDownLatch简介CountDownLatch 是Java中的一个同步工具类,可以用来确保一组线程等待其他线程完成各自工作后再继续执行。CountDownLatch的应用场景CountDownLatch可以被广泛应用于各种多线程协作的场景,例如:主线程等待多个子线程完成后再执行下一步操作。多个子任......