论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
安全
›
网络安全
›
HUST网络攻防实践|6_物联网设备固件安全实验|实验一 ...
HUST网络攻防实践|6_物联网设备固件安全实验|实验一 裸机缓冲区溢出漏洞 ...
盛世宏图
金牌会员
|
2022-6-26 06:59:37
|
显示全部楼层
|
阅读模式
楼主
主题
887
|
帖子
887
|
积分
2661
文章目录
实验一
1 加载bin文件找到reset函数的步骤
2 逆向存在溢出缓冲区的函数截图
3 逆向找到flag打印函数的截图
4 溢出函数栈图
5 栈的溢出原理
6 Qemu模拟运行固件的获取flag的截图
6.1 首先,安装QEMU
6.2 获取flag
写在最前:
大家分析的时候看一下自己学号是多少,然后分析对应的文件哈,我想都没想就打开01分析了,全部都做完了发现我不是这个文件,当事人现在就是很后悔,非常后悔呜呜呜呜呜。
实验一
1 加载bin文件找到reset函数的步骤
打开IDA Pro 7.6,打开task1_0x.elf文件, 选对应的选项。
然后点开main函数,f5反汇编生成简单易懂的代码。
2 逆向存在溢出缓冲区的函数截图
从main函数开始分析,分析如下:
总之,main函数的主要功能如下:
显示输入提示“input your Student ID immediately”;
接收4字符的输入,存入aRxBuffer;
显示aRxBuffer+\n这5个字符;
调用HelpFunc(),以及一堆不知名函数。
点开HelpFunc(),分析如下:
很明显,这个就是溢出函数了。主要功能是:
收2字符的输入,存入length;
回显length+\n这3个字符;
收8个字符的输入,存入shellcode;
把length转换成数值,存入len;
把shellcode从字母的ASCII码值转换成数值,比如e8转换成14和8;
把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-an386和netduinoplus2。
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,否则有段错误。
然后,输入三个内容:
学号后4位;
偏移长度(我的是24);
shellcode,也就是跳转的函数地址,由于字节序的原因,需要从后往前填(也就是E1180008)。
就得到flag:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
盛世宏图
金牌会员
这个人很懒什么都没写!
楼主热帖
绝了,这20款可视化大屏模板太酷炫了( ...
【十年网络安全工程师整理】—100渗透 ...
零基础学Java(1)初识Java程序 ...
Python程序运行内存的查看
聊聊DevOps制品管理-不止是存储制品这 ...
记一次 .NET 某RFID标签管理系统 CPU ...
数据库扩容也可以如此丝滑,MySQL千亿 ...
lamp
Frida主动调用java函数来爆破解题思路 ...
【Linux进程概念——下】验证进程地址 ...
标签云
存储
服务器
快速回复
返回顶部
返回列表