堆溢出
堆溢出介绍堆溢出是指程序向某个堆块中写入的字节数超过了堆块本身可以使用的字节数(之所以是可以使用而不是用户申请的字节数,是因为堆管理器会对用户所申请的字节数进行调整,这也导致可利用的字节数都不小于用户申请的字节数)因而导致了数据溢出,并覆盖到了物理相邻的高地址的下一个堆块。
不难发现,堆溢出漏洞发生的基本前提是
程序向堆上写入数据。
写入的数据大小没有被良好地控制。
对于攻击者来说,堆溢出漏洞轻则可以使得程序崩溃,重则可以使得攻击者控制程序执行流程。
堆溢出是一种特定的缓冲区溢出(还有栈溢出,bss段溢出等)。但是其与栈溢出有所不同的是,堆上并不存在返回地址可以让攻击者直接控制执行流程的数据,因此我们一般无法直接通过堆溢出来控制EIP。一般来说,我们利用堆溢出的策略是
覆盖与其 物理相邻的下一个chunk的内容
pre_size
size,主要有三个比特位,以及该堆块真正的大小。
NON_MAIN_ARENA
IS_MAPPED
PREV_INUSE
the True chunk size
chunk content ,从而改变程序固有的执行流。
利用堆中的机制(如 un ...
堆学习---fastbin二次释放
堆学习—fastbin二次释放
由于fastbin采用单链表结构(通过fd指针进行链接),且当chunk释放时,不会清空next_chunk的prev_inuse,再加上一些检查机制上的不完善,使得fastbin比较脆弱。针对它的攻击方法包括二次释放,修改fd指针并申请(或释放)任意位置的chunk(或fake chunk)等,条件是存在堆溢出或者其他漏洞能够控制chunk的内容。
fastbin dup一般而言,不同大小的free chuk会被分类到不同的bin中,而bin的类型可以被分为fast bin ,small bin,large bin 以及unsorted bin 。其中,fast bin的操作效率最高,为单向链表,其他的都是双向链表。较高的操作效率意味着较低的安全性(传统艺能—牺牲安全换效率),所以fastbin机制产生的漏洞也是堆区漏洞最重要的组成部分之一。
默认情况下,对于size_t为4B的平台, 小于64B的chunk分配请求;对于size_t为8B的平台,小于128B的chunk分配请求,程序会根据所需的size首先到fastbin中去寻找对应大小的bin中 ...
堆利用
堆利用1.1 glibc 堆概述1.1.1 内存管理与堆内存管理是对计算机的内存资源进行管理,这要求在程序请求时能够动态分配内存的一部分,并在程序不需要时释放分配的内存。CTF中常见的ptmalloc2就是glibc实现内存管理机制,它继承自dlmalloc,并提供了对多线程的支持。
其他常见的堆管理机制还有 dlmalloc, tcmalloc ,jemalloc等,一般这些机制由用户显示的调用malloc())函数申请内存,调用free()函数释放内存。除此之外,还有由编程语言实现的自动内存管理机制,也就是垃圾回收。
堆是程序虚拟内存中由低地址向高地址增长的线性区域。一般只有当用户向操作系统申请内存时,这片区域才会被内核分配出来,并且由于页对齐和效率的问题,一般分配的空间很大。堆的位置一般在BSS段的高地址处。
brk()和sbrk()堆的属性是可读可写的,大小通过brk()和sbrk()函数进行控制。如下图,在堆未初始化时,program_break 指向BSS段的末尾,通过调用brk()和sbrk()函数来移动progam_break使得堆增长。在堆初始化时,如果开启了ASLR ...
堆入门off-by-null-asis2016_b00ks
[堆入门off-by-null]asis2016_b00ks前言由于这个题在堆利用里面过于经典了,网上wp千千万,我这里就不再细讲其中的利用方法了,只是说一点细节的东西,这里推几个我看的师傅的文章,下面的内存大部分都是基于Tokameine师傅的wp的。
堆中的 Off-By-One - CTF Wiki (ctf-wiki.org)
[(17条消息) 堆入门off-by-null]asis2016_b00ks_Nashi_Ko的博客-CSDN博客
[(17条消息) Asis CTF 2016] b00ks —— Off-By-One笔记与思考_Tokameine的博客-CSDN博客
free_hook劫持https://lantern.cool/note-pwn-free-hook/#%E4%BE%8B%E5%AD%90
小细节为了能更好的理解后面的内容建议先看完其他师傅的博客,这里先贴一下我本地打通的wp123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495 ...
堆中的Off-By-One
堆中的Off-By-One介绍严格来说off-by-onr漏洞是一种特殊的溢出漏洞,off-by-one指程序向缓冲区写入时,写入的字节数超过了这个缓冲区本身所申请的字节数并且只越界了一个字节。这种漏洞往往是在字符串操作时边界检查不严谨所导致的,例如
循环语句中的循环次数设置有误。
字符串操作不合适
一般来说,单字节溢出被认为是难以利用的,但是因为Linux的堆管理机制ptmalloc验证的松散性,基于Linux堆的off-by-one漏洞利用起来并不复杂,并且威力强大。
off-by-one利用思路发生在堆上的off-by-one,根据其是否涉及堆块头的修改可以分为两类,第一类是普通的off-by-one,通常用于修改堆上的指针;第二类则是通过溢出修改堆块头,制造堆块重叠,达到泄露或改写其他数据的目的,通常情况下溢出后修改的是下一个堆块的size域。由于glibc采用了空间复用技术,即将下一个堆块的prev_size域提供给当前chunk使用,所以堆块实际可用的大小(可以由malloc_usable_size()获得)不是固定的,如果堆块是通过mmap分配的,实际可用大小是siz ...
基础论文汇总知识
基础论文汇总知识前言对于人工智能等大数据方向的东西,还是得多看论文,了解更多前沿知识和基本情况,下面是一些AI大模型的论文,利用文心一言提纯的简介
A Survey of Large Language Models(大型语言模型综述)汇总信息这是一篇关于大型语言模型的综述性文章。自图灵测试提出以来,人类一直在探索机器如何掌握语言智能。近年来,预训练语言模型(PLM)通过在大规模语料库上预训练Transformer模型,成为语言理解和生成的主要方法,并在各种自然语言处理(NLP)任务中展现出强大的能力。随着模型规模的增加,模型能力也在不断提高。当模型规模超过一定阈值时,大模型不仅在性能上取得了显著的提升,还展现出小模型不具备的特殊能力,如in-context学习。 大型语言模型(LLM)在学术界和工业界中受到了广泛的关注。LLM的技术发展不断取得进展,例如基于LLM的ChatGPT等AI聊天机器人吸引了社会的广泛关注。本文综述了LLM的最新进展,介绍了LLM的背景、主要技术、主流方法以及开发LLM所需的资源,并讨论了未来需要解决的问题。LLM的综述对于研究人员和工程师非常有用。 综上所述 ...
基于固件的漏洞挖掘方法梳理
基于固件的漏洞挖掘方法梳理相关论文方案2013Fie on firmware: Finding vulnerabilities in embedded systems using symbolic execution, USENIX 2013
方案:Fie
技术:符号执行,静态分析,基于C源码,KLEE,基于MSP430系列微控制器
点评:对于某些固件,完整的分析是难以处理的,分析中的各种不精确来源可能会导致误报或漏报。改进符号执行技术来适应固件特定的功能。结果表明Fie可以发现许多内存错误。FIE anticipates and describes the peripherals symbolically using symbolic execution。使用符号执行符号化的描述外围设备?
资源:https://www.usenix.org/conference/usenixsecurity13/technical-sessions/paper/davidson
2014A Large-scale Analysis of the Security of Embedded Firm ...
固件解密
固件解密前言在分析爱快的路由器的时候遇到了固件被加密的情况,发现找到的一些固件解密的方法用不了,但是github上居然有对应的解密方法,果然多看看github
解密加密固件更新的方式固件制造商出于对产品安全的考虑,防止固件被恶意篡改,通常会采取各种防范手段,阻止固件被直接解包和破解。其中一种重要且有效的手段就是利用加密算法对固件进行加密,例如使用AES、DES等对称加密算法加密固件中的内核和文件系统,或使用XOR、ROT等简单置换算法对固件进行处理,这使得研究人员无法直接读取固件中的明文内容。
对固件进行解密之前,需提前了解厂商一般会以怎样的形式发布加密固件以及在设备启动和固件升级过程中,会在哪些地方对固件进行解密。厂商发布加密固件一般有以下三种场景:
固件出厂未加密后续发布包含解密方案的未加密固件
固件在出厂时未加密,也未包含任何解密代码,后续为了发布加密固件,会提前发布一个包含解密程序的未加密版本作为过渡版本,这样后续发布加密固件时可使用该解密程序进行解密,这类情况在发布时间较早的设备中比较常见。
对于此种情况,可寻找固件过渡版本v1.1,从中分析出所包含的解密逻辑和算法,从 ...
固件简介
固件简介前言该文章用于总结部分网络的固件知识,不具有原创性,只是转载和总结。
固件下载虽然通过官网下载固件的方法比较便捷,但是有些厂商并不会提供固件的下载链接,这就需要我们通过其他途径来获取固件。使用从硬件设备提取固件的方法会比较通用(前提是需要有实体机设备),因为固件一般都会存储在 PCB 的某个位置里。将设备拆开之后,找到相应的 flash rom 或者 Nor flash,使用专门的工具(烧写器、编程器)进行固件的提取。
先认识一下flash文件系统和固件类型
flash文件系统与普通计算机系统不同的是,嵌入式系统往往需要使用低成本的存储器,诸如EEPROM(带电可擦可编程只读存储器)或Nor/Nand Flash等。Nand flash存储器经常可以与NOR Flash存储器互换使用。大多数情况下闪存只是用来存储少量的代码,这时NOR闪存更适合一些,而NAND则是高数据存储密度的理想解决方案。
这里列举一些最常见的Flash文件系统,具体如下:
SquashfsSquashFS 是一套基于Linux内核使用的压缩只读文件系统,文件最大支持2^64字节。他是基于GPL协议的开源软 ...
固件提取
固件提取前言为了学习路由器漏洞挖掘,了解了如何提取固件,下面是各种提取固件的方法,有的方法我尝试过了,有的设备太贵了只是记录。
前置知识FLASH的分类
NOR Flash
像访问SDRAM一样,按照数据/地址总线直接访问, 可写的次数较少,速度也慢,由于其读时序类似于SRAM,读地址是线性结构,多用于程序代码的存储。NOR一般是8个针脚,现在常见的路由器大多是这种。
NAND Flash
只有8位/16位/32位甚至更多位宽的总线,每次访问,都要将长地址分为几部分,一点点的分布传入才能访问nand flash
相比其余的几种flash优势在于可擦写次数多,擦写速度快,但是在使用以及使用过程中会出现坏块因此需要做特殊处理才可以使用
一般是大型设备或者高端路由器会使用的。
eMMC Flash
全称为embeded MultiMedia Card,是一种嵌入式非易失性存储器系统,由Nand flash和Nand flash控制器组成,以BGA方式封装在一款chip上。
一般用于更加精细的设备,例如手机什么的。
串口介绍串口是一个泛称,UA ...