这个项目的目的是来帮助人们学习X86_64之外其他架构环境,同时还帮助人们探索路由器固件里面的奥秘。

本文通过练习DVRF 中INTRO 部分的题目来学习下MIPS 结构下的各种内存攻击。

DVRF:路由器漏洞练习靶机

用binwalk解压DVRFbin后,题目位于如下目录中

调试环境配置参考本系列中的前面两篇文章:

通过CVE-2017-17215学习路由器漏洞分析,从入坑到放弃

路由器漏洞复现分析第二弹:CNVD-2018-01084

———————————————————————————————————————————————————–

第一个题目stack_bof_01

printf("Welcome to the first BoF exercise!\r\n\r\n");

strcpy(buf, argv[1]);

printf("You entered %s \r\n", buf);

printf("Try Again\r\n");

return 0x41; // Just so you can see what register is populated for return statements

}

可以看到strcpy处有栈溢出,main函数为非叶子函数,返回地址ra会被存放在栈中;

strcpy拷贝的变量目标地址放在变量VAR_D0处

因此如果要覆盖掉ra需要0xd0-0×4=204长度的字符,再接我们需要跳转的地址,

希望的覆盖地址如下如为dat_shell的地址0×400950:

调试命令如下:

sudo chroot . ./qemu  -g 1235 ./pwnable/Intro/stack_bof_01 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbb`echo -e '\x50\x09\x40'`"

可以看到当main要返回的时候返回地址已经被覆盖为0×400950:

当运行到dat_shell里面时出现错误:

Mips中函数的调用通常是jar $t9格式,因此t9保存的是函数的地址,因为我们是直接通过jr ra过来的,所以此处的t9值并不是函数地址因此会出错。我们需要找一个gadget让t9中保存函数的起始地址 。通过gadget搜索,找到:

将栈中地址复制到t9并跳转到t9.

此时要先找到libc的基地址,进入任意一个libc的提供的函数,列如memset:

找到memset函数的起始地址:

再用看下ida中memset的偏移:

那  libc_base=0x76700E10-0x0001BE10

那  address=libc_base+6b20= 0x766EBB20

最后的命令和执行结果如图:

————————————————————————————————————————————————————

第二个题目 uaf_01

heap_of = malloc(sizeof(message));

strncpy(heap_of,message,sizeof(message));

printf("Heap Address 1 of 17 bytes: %p\r\n", heap_of);

free(heap_of);

int size = strlen(argv[1]);

heap_of2 = malloc(size);

printf("Heap Address 2 of %d bytes: %p \r\n", size, heap_of2);

printf("Copying contents of argv[1] to Heap Address 2\r\n\r\n");

strncpy(heap_of2, argv[1], size);

if (heap_of2 != heap_of){

exit(1);

}

else{

printf("Awesome! \r\n");

free(heap_of2);

}

从c代码看,只要heap_of;heap_of2两个字符串指针的地址相同就可以走到正确的分支.

第一个内存分配内存后如图:

拷贝第一个字符串后:

Free掉第一个变量后:

此时再按输入的参数长度分配第二块内存,如果输入的参数长度不够长,那么就在free掉的第一块内存里取一块,如图,v0是malloc返回的地址:

此时,两次分配的地址不一样,程序走到错误分析。

当参数长度大于等于13时,第二次malloc的内存是第一次malloc的地址,走到正确分支

使用的命令如图

路由器漏洞复现分析第三弹:DVRF INTRO题目分析的更多相关文章

  1. 路由器漏洞复现分析第二弹:CNVD-2018-01084

    1月17日,CNVD公开了D-LinkDIR 615/645/815 service.cgi远程命令执行漏洞(CNVD-2018-01084),freebuf上有前辈写了一篇漏洞复现和poc的文章(h ...

  2. Spark RPC框架源码分析(三)Spark心跳机制分析

    一.Spark心跳概述 前面两节中介绍了Spark RPC的基本知识,以及深入剖析了Spark RPC中一些源码的实现流程. 具体可以看这里: Spark RPC框架源码分析(二)运行时序 Spark ...

  3. SpringBoot2.0源码分析(三):整合RabbitMQ分析

    SpringBoot具体整合rabbitMQ可参考:SpringBoot2.0应用(三):SpringBoot2.0整合RabbitMQ RabbitMQ自动注入 当项目中存在org.springfr ...

  4. 死磕 java集合之TreeMap源码分析(三)- 内含红黑树分析全过程

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 删除元素 删除元素本身比较简单,就是采用二叉树的删除规则. (1)如果删除的位置有两个叶子节点 ...

  5. Kubernetes Job Controller 原理和源码分析(三)

    概述Job controller 的启动processNextWorkItem()核心调谐逻辑入口 - syncJob()Pod 数量管理 - manageJob()小结 概述 源码版本:kubern ...

  6. 通过qemu复现路由器漏洞

    目录 简介 环境搭建 固件解包 复现漏洞,IDA调试 参考资料 简介 qemu和vmware一样,一种虚拟机软件,只不过qemu能够虚拟的平台更加丰富一些.能够虚拟很多嵌入式平台的设备. 工作上需要向 ...

  7. CVE-2020-2883漏洞复现&&流量分析

    CVE-2020-2883漏洞复现&&流量分析 写在前面 网上大佬说CVE-2020-2883是CVE-2020-2555的绕过,下面就复现了抓包看看吧. 一.准备环境 靶机:win7 ...

  8. SpringBoot框架SpEL表达式注入漏洞复现与原理分析

    前言 这是2016年的一个洞,利用条件是至少知道一个触发 springboot 默认错误页面的接口及参数名. 影响版本:1.1.0-1.1.12 1.2.0-1.2.7 1.3.0 修复方案:升级版本 ...

  9. 通过CVE-2017-17215学习路由器漏洞分析,从入坑到放弃

    1.基本信息: 2017/11/27,Check Point 软件技术部门报告了一个华为 HG532 产品的远程命令执行漏洞(CVE-2017-17215),Mirai的升级版变种中已经使用该漏洞.看 ...

随机推荐

  1. [poj] 3347 Kadj Square || 计算几何的“线段覆盖”

    原题 多组数据,给出n个正方形的边长,使他们以45度角倾斜的情况下最靠左(在第一象限内),如图.求从上看能看到哪几个完整的正方形. 借鉴于https://www.cnblogs.com/Ritchie ...

  2. webpack watch模式产生*.hot-update.json文件

    webpack --watch会产生*.hot-update.json文件,解决方法如下: output: { path: path.join(root, "dist"), fil ...

  3. HDU 5752

    Sqrt Bo Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total S ...

  4. Python之Excel编程

    excel编程:excel中是unicode编码方式 需要使用xrld,xlwt和openpyxl这三个模块,需先通过pip install下载     xlrd 读取模块:xls,xlsx     ...

  5. es6+最佳入门实践(1)

    1.let和const 1.1.let和块级作用域 在es5中,js的作用域分为全局作用域和局部作用域,通常是用函数来区分的,函数内部属于局部作用域,在es6中新增了块级作用域的概念,使用{}括起来的 ...

  6. XML格式化及解析

    XML格式化工具:notepad++   下载地址 http://rj.baidu.com/soft/detail/13478.html?ald    一个教程地址:http://jingyan.ba ...

  7. Springboot+Redis序列化坑

    今天在测试springboot整合redis的时候遇到下面这个坑,百度来百度去发现提示都是ajax的问题,真的是醉了,错误提示如下所示,不信大家可以直接复制百度一下答案是什么(流泪中....),错误如 ...

  8. Maven入门指南(一)—— Maven下载与安装

    Maven下载与安装 1.下载1)Maven的系统要求: Maven对内存和操作系统没有要求 Maven安装本身仅需大约10MB,本地仓库视使用情况有所不同 Maven3.3及以上版本需要JDK1.7 ...

  9. Linux Mint---ATI显卡驱动安装篇

    显卡驱动可谓是至关重要,当时折腾debian驱动的时候可是弄了好几天才搞定的,现在却非常容易就是装上, 详见这篇博客:http://www.yyearth.com/article/14-03/amd1 ...

  10. xCode中去除“Implicit declaration of function 'sysctl' is invalid in C99” 警告

    http://blog.csdn.net/dreambegin/article/details/8609121 一般出现该问题是因为通过C调用了unix/linux 底层接口,所以需要调整c语言的编译 ...