ToB企服应用市场:ToB评测及商务社交产业平台

标题: HUST网络攻防实践|6_物联网设备固件安全实验|实验一 裸机缓冲区溢出漏洞 [打印本页]

作者: 盛世宏图    时间: 2022-6-26 06:59
标题: HUST网络攻防实践|6_物联网设备固件安全实验|实验一 裸机缓冲区溢出漏洞
文章目录



写在最前:
大家分析的时候看一下自己学号是多少,然后分析对应的文件哈,我想都没想就打开01分析了,全部都做完了发现我不是这个文件,当事人现在就是很后悔,非常后悔呜呜呜呜呜。
实验一

1 加载bin文件找到reset函数的步骤

打开IDA Pro 7.6,打开task1_0x.elf文件, 选对应的选项。

然后点开main函数,f5反汇编生成简单易懂的代码。
2 逆向存在溢出缓冲区的函数截图

从main函数开始分析,分析如下:

总之,main函数的主要功能如下:
点开HelpFunc(),分析如下:

很明显,这个就是溢出函数了。主要功能是:
因为len就是第二个输入,是自己输入的,所以能够赋任意值到任意地址上去。我们这里覆盖掉函数的返回值就行。
3 逆向找到flag打印函数的截图

点开Text View从上往下一翻就翻到了,flag打印函数就是Die。

起始地址是080018E0。
由于固件的最低位是1,所以实际上的地址是080018E1。解释如下图。

4 溢出函数栈图

在HelpFunc中点开sp变量,就可以进入到栈图的页面。
   f5反汇编,然后注释里有sp,点开这个。
  
5 栈的溢出原理

画了个简单的示意图:

我们需要覆盖返回地址,也就是写入BP+4~BP+8这一部分。从溢出函数栈图中可以看到Buffer的起始地址与BP的距离是0x14,而len就是返回地址的最后一位,所以len=Buffer与BP的距离+4,就是24(注意是10进制)。
老师给了多个不同的样本,Buffer大小不同,计算方式相同。
6 Qemu模拟运行固件的获取flag的截图

6.1 首先,安装QEMU

apt-get install的版本太老,没有实验需要的架构。因此采用源码安装:
  1. wget https://download.qemu.org/qemu-7.0.0.tar.xz
  2. tar xvJf qemu-7.0.0.tar.xz
  3. cd qemu-7.0.0
  4. sudo apt-get install ninja-build -y # ninja
  5. sudo apt install libglib2.0-dev -y # glib-2.56 gthread-2.0
  6. sudo apt install libpixman-1-dev -y # pixman-1
  7. ./configure --prefix=~/qemu-7.0.0/build --target-list=arm-softmmu --enable-debug
  8. make
  9. make install
复制代码
我在~目录下安装QEMU,因此运行configure时目录采用~/qemu-7.0.0/build。
安装完成后,在~/qemu-7.0.0/build目录下即可看到需要的可执行文件。
./qemu-system-arm -M help查看是否有mps2-an386和netduinoplus2。

6.2 获取flag

运行elf文件:
  1. ~/qemu-7.0.0/build/qemu-system-arm -M netduinoplus2 -cpu cortex-m4 -m 16M -nographic -d in_asm,nochain -kernel ~/exp6/task1_01.elf -D log.txt
复制代码
注意实验一要选netduinoplus2,否则有段错误。
然后,输入三个内容:
就得到flag:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4