环境
实验 1 裸机物联网设备溢出漏洞利用
./qemu-system-arm -M netduinoplus2 -cpu cortex-m4 -m 16M -nographic -d in_asm,nochain -kernel task1_67.elf -D log.txt
分析一下源码
function函数中提供了一个溢出点
这里看到savedregs是bp+0x20的位置,然而接下来就是r7,lr,因此覆盖的位置偏移是savedregs+4,+5,+6,+7
可以确定len为24
输出flag函数为reset,偏移为080018E0+1(这里的+1是cpu权限位)
实验 2 基于MPU的物联网设备攻击缓解技术
MPU(memory protection unit) 内存保护单元,顾名思义,就是用来规定内存访问权限的机制。细节可以自行百度
task1 解除代码段不可写入保护将指定代码段改为可写
先编译一遍看看是什么。
保护在于MEMORY[0XE000ED94]位置,其实是MPU->CTRL
为了绕过保护,我们只需要添加一行代码即可完成绕过。
重新编译后运行
task2 解除特定外设区域保护将指定外设区域改为可读写
分析得知同样是mpu->ctrl 的值,同样只需要加1即可完成
实验 3 FreeRTOS-MPU 保护绕过
task1 编写MPU绕过的函数
这道题需要静态编译一遍源码,找提权函数和打印flag的函数
通过交叉引用找到打印flag函数
通过望文生义找到提权函数
然后在代码里实际编写
task2 rop绕过MPU
源码很清晰
首先是让我们输入id,长度,和内容
内容放在inputbuffer里
之后会利用RTOS启动函数调用function函数
这里有溢出点,利用ROP
同样是先找到提权函数和打印flag的函数
Payload为 0 0 0 0 + (提权函数地址+4+1) + 0 0 0 0 +打印(flag地址+1)