【Virtual】浅谈escape-qemu
qemu逃逸这部分内容,在今年年初就有所涉猎,然而由于本人过于懒惰,这个部分的总结推了整整半年多。直到参加本月的HTICON2023,真正第一次在比赛中面对QEMU逃逸,发现了自己很多的不足之处。借这次机会将这部分内容作以总结。 PCI设备在目前的QEMU逃逸题目类型中,出题者一般会在qemu-system-x86_64(或是对应arm架构的qemu-system)的二进制程序中加入自己编写的、具有漏洞的PCI设备模块。每个PCI设备都对应一个PCI配置空间,包含该PC ...
【Kernel】Linux Huge Pages
在HITCON CTF 2023的一道QEMU escape题目中,利用到了Huge Pages这项技术,借此复现题目的机会,来学习了解下这部分知识。 简介当进程使用 RAM 时,CPU 会将其标记为已被该进程使用。为了提高效率,CPU 以块的形式分配 RAM——4K 字节是许多平台上的默认值。这些块被称为页面。页面可以交换到磁盘等。 由于进程地址空间是虚拟的,CPU和操作系统需要记住哪些页属于哪个进程,以及每个页存储在哪里。页面越多,查找内存映射位置所需的时间就越多。因 ...
【trick】house of blindness
在WMCTF 2023官方wp中,看到了一个十分新奇的手法house of blindness. 其无需leak地址却仍然能够hijack程序流,这里做以学习研究。本文例题使用WMCTF2023 blindness 参考文章: issues in exit town - HackMD 前置首先补充一个关于malloc的前置知识 如果申请的chunk大小非常大,那么便不会使用ptmalloc来进行chunk的分配,而是调用mmap() 另外,这样申请出来的chunk位置与 ...
【fuzz】AFL源码分析 part 2
上个一个part主要关注的是插桩相关部分的源码,这一节主要来查看afl-fuzz.c这个核心模块的源码部分 概述由于该部分代码体量过大,我们只对核心部分进行源码解析。这部分总体可以分为三块: 初始配置:进行fuzz环境配置相关工作 fuzz执行:fuzz的主循环过程 变异策略:测试用例的变异过程和方式 预处理首先从main()函数着手进行分析。在完成初始配置后,main()同样利用time生成随机种子 gettimeofday(&tv, &tz); s ...
【Kernel】一些trick记录(持续更新)
pt_regs用于保存用户态–>内核态切换时的用户态信息,在内核态返回时会从pt_regs恢复数据。因而若我们能控制rsp到达此位置,即可以使用用户态寄存器值辅助实现ROP list_head结构体简单的内核双链表结构,在内核中经常作为实现双链表结构的基础,定义如下 // https://elixir.bootlin.com/linux/latest/source/include/linux/types.h#L184 struct list_head { ...
【fuzz】AFL源码分析 part 1
本来想一周内完成,看来要延期了,尽量希望能在这几天内完成吧,31号晚上还有qax的一面😭😭,水平果然还是太次了。 项目地址:google/AFL(github.com) 前言AFL,全称“American Fuzzy Lop”,是由安全研究员Michal Zalewski开发的一款基于覆盖引导(Coverage-guided)的模糊测试工具,它通过记录输入样本的代码覆盖率(代码执行路径的覆盖情况),以此进行反馈,对输入样本进行调整以提高覆盖率,从而提升发现漏 ...
【fuzz】ASAN原理解析
前言 参考文章: 工欲善其事必先利其器——AddressSanitizer - 知乎 (zhihu.com) google/sanitizers(github.com) 本所涉及到的相关代码可以在我的仓库内找到:how2ASAN/README.md at main · Loora1N/how2ASAN (github.com) ASAN简介ASAN(Address Sanitizer)是针对 C/C++ 的快速内存错误检测工具,在 ...
【fuzz】AFL白皮书中英双语版
前言 最近想研究研究AFL整体内部逻辑源码,面试时也遇到了同样的问题,决定从AFL白皮书开始看看。网上有很多翻译版,但是要不就是没写完,要不就是机翻痕迹太重。决定自己完成这个任务,争取在一周内完成大部分核心源码的分析。又想到之前看网络协议栈和IO_FILE时的噩梦了😭😭😭 本人英语水平有限,如有问题可以文末评论区直接指出。我想做中英双语版也是尽量在一定程度上防止大家被我的蹩脚翻译带偏。 白皮书的原文部分我都会使用markdown的引用语法,另外,全文使用AFL简写替代 ...
【fuzz trick】利用LCOV测量代码覆盖率
本文样例为LibTIFF version 4.0.4,以CVE-2016-9297漏洞举例 Install直接使用apt安装包即可 sudo apt install lcov Usage整体流程大致如下 cd ./tiff-4.0.4/ lcov --zerocounters --directory ./ lcov --capture --initial --directory ./ --output-file app.info ../install/bin/tiff ...
【IOT】嵌入式设备固件分析
嵌入式设备固件一般可以分为两类: 有文件系统(如路由器固件这种) 无文件系统(如STM32这种嵌入式设备固件,程序直接存放在flash中) 针对第一类固件,分析起来比较简单,直接binwalk分离。然后去逆向对应的服务对应的二进制程序即可,也不需要考虑程序的加载地址。 而对于第二类固件,往往就会比较复杂,需要分析程序的加载地址,也需要考虑外设的地址映射。 本文将从SCTF2020的题目Password Lock入手,分析STM32固件作为入门 题目信息这是一个STM3 ...