破防实践7-iot入门

2022-06-04

环境

ubuntu20 (安装qemu-arm、源码静态编译)

keil

实验 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)