P2IM论文笔记
简介背景:模拟以MCU为处理器的固件设备并没有完全的模拟外设,导致fuzzing时外设需要实际物理设备,速度偏慢,且没有达到完全模拟。 主要实现了一个可以模拟在MCU下运行的固件的模拟器P2IM。通过自动化外设接口的建模来进行自动化,可扩展的模拟。 特点:对mcu架构下的寄存器进行分类识别,在qemu模拟时同时模拟这些寄存器值的操作,从而模拟出了firmware外设的一系列操作。保证了firmware在qemu上的稳定运行的同时加入了外设的模拟。 解决问题当时对固件的模拟需要软硬件结合,导致fuzz的效率很慢,因此提出了一种模拟器对固件完全模拟的思路,通过实现对固件外设寄存器的分类并模拟以达到完全模拟的目的。 主要贡献实现了对无硬件模拟 提出了P2IE(外设接口等效属性):为了定义怎样的仿真是好的仿真 提出了MMIO寄存器四种模型:对四种模型的行为进行了定义 探索性执行技术 尚存不足 寄存器分类可能存在错误(eg:...
SFuzz论文笔记
简介RTOS系统当下并没有很好的分析方式,因此作者提出了sfuzz工具,利用RTOS每一项任务的控制流都是独立的特点,从RTOS系统中切出独立的代码块进行fuzzing。 项目地址:https://github.com/NSSL-SJTU/SFuzz 解决问题解决了在当时RTOS领域模糊测试没有很好的分析方式的问题。 主要贡献 提出了RTOS系统的特点:每一项任务的控制流都是相互独立的,通过代码切片获取到独立的代码树,分别进行分析 使用了前向切片与后向切片,根据依赖和函数调用关系获取了代码片段以供fuzz 设计了SFuzz,对RTOS进行灰盒测试。 尚存不足具体内容sfuzzing一共分为四个模块,分别为Forward slicer,Control Flow Nodes Handler,Micro Fuzzing,Concolic Analyzer。 Forward Slicer由上图可知,forward...
uEmu论文笔记
...
P2IM复现
导师说要多实践,因此将看过的P2IM论文进行复现,同时对源码进行简单查看。 看网上并没有相关的复现教程,因此写下该博客 链接: https://github.com/RiS3-Lab/p2im 1. 环境Ubuntu 16.04 !!!(重中之重!其他版本可能不成功) GNU Arm Embedded Toolchain:https://developer.arm.com/downloads/-/gnu-rm fuzz target: https://github.com/RiS3-Lab/p2im-real_firmware/tree/d4c7456574ce2c2ed038e6f14fea8e3142b3c1f7/binary 2. 过程 首先下载p2im源码 12git clone https://github.com/RiS3-Lab/p2im.gitcd p2im 下载子项目 123# submodules are cloned into externals/git submodule update --initgit submodule update...
uEmu复现
1. 环境Ubuntu 20.04(最好分配大于20G存储空间,否则可能不够用) gitee链接:https://gitee.com/cpdt/uEmu.git virtualbox 2. 步骤 克隆下载uEmu 1git clone https://gitee.com/cpdt/uEmu.git 使用vagrant Installation方式复现(不推荐,感觉和直接源码安装没区别,还要多出安装虚拟机的步骤,虚拟机套虚拟机。。。还容易崩溃。。。),安装virtualbox 12sudo apt install vagrantsudo apt install virtualbox 启动虚拟机 1vagrant up 需要等几分钟,第一次会下载ubuntu镜像,这里放一个清华源镜像,添加到vagrantfile里: 1config.vm.box_url =...
【SeedLab】格式化字符串实验报告
1 Overviewprintf函数用于根据指定格式打印出字符串,第一个参数诶格式化字符串format string,格式化字符串中使用了%来作为占位符。如果不使用%占位符而是直接将变量放入格式化字符串,则存在格式化字符串漏洞,可能被恶意利用。 2 Environment Setup2.1 Turning of Countermeasure关闭ASLR 12❯ sudo sysctl -w kernel.randomize_va_space=0kernel.randomize_va_space = 0 2.2 The Vulnerable Program漏洞程序如下 format.c:myprintf存在漏洞printf(msg); 1234567891011121314151617181920212223242526void myprintf(char *msg){#if __x86_64__ unsigned long int *framep; // Save the rbp value into framep asm("movq...
【SEED Lab2.0】Return_to_Libc实验报告
Task1:Finding out the Addresses of libc Functions 获取system函数和exit函数地址 gdb批处理命令,新建文件peda-session-retlib.txt,进行批处理操作 Task2:Putting the shell string in the memory 编写getprt.c来获取环境变量地址 getprt.c: 12345678#include<stdlib.h>#include<stdio.h>void main(){char* shell = getenv("MYSHELL");if (shell) printf("%x\n", (unsigned int)shell);} 设置/bin/sh的环境变量,获得地址: 将代码加入到retlib.c中,获取到地址,可以发现地址与getprt的地址相同。(如果开启aslr或者两文件名长度不同则会不同) Task 3: Launching the...
get_started_3dsctf_2016 WriteUp
考点 对栈溢出函数带参数的溢出理解 解题内容 使用checksec工具查看基本信息: 1234567❯ ~/.local/bin/checksec ./get_started_3dsctf_2016[*] '/home/bronya/Documents/ctf/pwn/get_started_3dsctf_2016/get_started_3dsctf_2016' Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE...
【SEED Lab2.0】缓冲区溢出实验报告
stack_overflow(setuid)环境配置配置环境,关闭ASLR地址随机化,将/bin/sh链接到/bin/zsh(/bin/dash以及/bin/bash都实现了一种安全对策, 防止自己在Set-UID进程中执行。 基本上,如果它们检测到它们是在一个Set-UID进程中执行的, 它们会立即将有效的用户ID更改为该进程的真实用户ID, 基本上会放弃特权 ) 123❯ sudo sysctl -w kernel.randomize_va_space=0 kernel.randomize_va_space = 0❯ sudo ln -sf /bin/zsh /bin/sh Task1: 熟悉shellcodeshellcode C代码实现: 12345678#include <stddef.h>void main(){ char *name[2]; name[0] = "/bin/sh"; name[1] = NULL; ...
BUUCTF 第五空间PWN5
考点 格式化字符串漏洞 解题过程 首先使用checksec工具查看基本信息 为32位,canary,dep防护 使用ida工具进行静态分析。 main main函数主要代码如上图所示,可以看见print((int)v7)存在格式化字符串输出漏洞,因此可以考虑进行利用(注:由于输入read限制了输入长度,导致无法通过泄漏canary方法来进行栈溢出攻击。) 构造python脚本如下,主要思路为修改printf的got表plt地址为要执行的代码地址(若开启full relro则无法使用),然后再代码执行到下一次调用printf函数时会转去执行目标代码。获得shell。 1234567891011121314151617181920from pwn import *context(arch="i386", log_level="debug")# p = process("./pwn")p = remote("node4.buuoj.cn", 29338)elf =...