IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> HUST网络攻防实践|6_物联网设备固件安全实验|实验一 裸机缓冲区溢出漏洞利用 -> 正文阅读

[网络协议]HUST网络攻防实践|6_物联网设备固件安全实验|实验一 裸机缓冲区溢出漏洞利用


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

实验一

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

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

然后点开main函数,f5反汇编生成简单易懂的代码。

2 逆向存在溢出缓冲区的函数截图

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

总之,main函数的主要功能如下:

  1. 显示输入提示“input your Student ID immediately”;
  2. 接收4字符的输入,存入aRxBuffer
  3. 显示aRxBuffer+\n这5个字符;
  4. 调用HelpFunc(),以及一堆不知名函数。

点开HelpFunc(),分析如下:

很明显,这个就是溢出函数了。主要功能是:

  1. 收2字符的输入,存入length
  2. 回显length+\n这3个字符;
  3. 收8个字符的输入,存入shellcode
  4. length转换成数值,存入len
  5. shellcode从字母的ASCII码值转换成数值,比如e8转换成14和8;
  6. shellcode的数值形式依次赋值给Buffer[len]Buffer[len+3]

因为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的版本太老,没有实验需要的架构。因此采用源码安装:

wget https://download.qemu.org/qemu-7.0.0.tar.xz
tar xvJf qemu-7.0.0.tar.xz
cd qemu-7.0.0
sudo apt-get install ninja-build -y # ninja
sudo apt install libglib2.0-dev -y # glib-2.56 gthread-2.0
sudo apt install libpixman-1-dev -y # pixman-1
./configure --prefix=~/qemu-7.0.0/build --target-list=arm-softmmu --enable-debug
make
make install

我在~目录下安装QEMU,因此运行configure时目录采用~/qemu-7.0.0/build

安装完成后,在~/qemu-7.0.0/build目录下即可看到需要的可执行文件。

./qemu-system-arm -M help查看是否有mps2-an386netduinoplus2

6.2 获取flag

运行elf文件:

~/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,否则有段错误。

然后,输入三个内容:

  1. 学号后4位;
  2. 偏移长度(我的是24);
  3. shellcode,也就是跳转的函数地址,由于字节序的原因,需要从后往前填(也就是E1180008)。

就得到flag:

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-06-01 15:28:43  更:2022-06-01 15:29:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:42:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码