腾达路由器检测环境功能破解MISP基础

在这里插入图片描述

在虚拟机上用qemu运行腾达路由器的网站固件会遇到无法识别网络的问题,这篇主要是破解这个功能,使腾达路由器成功在虚拟机上运行,方便漏洞复现

本次用到的腾达路由器版本:

https://www.tenda.com.cn/download/detail-3683.html

image.png

下载完后,是一个压缩包,解压进入文件夹

image.png

解压后有两个文件,.bin文件就是路由器主要的固件,我们可以使用binwalk工具提取固件里的文件

binwalk -eM 固件名称.bin

提取后会在当前目录生成一个文件夹

image.png

进入文件夹,在squashfs-root目录下是路由器主要运行的一些东西

image.png

需要分析的固件在bin目录下,bin/httpd这个程序就是路由器主要运行的固件

直接用qemu运行程序的话会卡住

image.png

什么是MISP

MIPS汇编语言是用于编写MIPS(Microprocessor without Interlocked Pipeline Stages)架构微处理器指令的低级语言,常见于路由器,MIPS架构是一种典型的精简指令集计算机(RISC)体系结构,最初由斯坦福大学的John Hennessy在1980年代初期设计,目的是为了实现高性能的处理器设计,通过使用简单的指令集来加速指令的执行速度。MIPS架构和汇编语言被广泛用于各种设备和应用中,包括嵌入式系统、路由器、微控制器以及视频游戏控制器等

MISP常见的一些寄存器

zero 常数零
$at	汇编器保留
$v0,$v1 子程序返回值
$a0-$a3	子程序参数
$t0-$t7	临时寄存器(调用者保存)
$s0-$s7	保存寄存器(被调用者保存)
$t8,$t9 临时寄存器(调用者保存)
$k0,$k1 操作系统保留
$gp	全局指针
$sp	栈指针
$fp	帧指针
$ra	返回地址

MISP常见指令

加法

addu rd,rs,rt	rd = rs + rt(溢出时不产生异常)
add rd,rs,rt	rd = rs + rt(溢出时产生异常)

减法

subu rd,rs,rt	d = rs-rt(溢出时不产生异常)
sub rd,rs,t	  d = rs-rt(溢出时产生异常)

乘法

mult rd,rt	hilo = rd * rt(有符号数)
multu rd,rt	hilo = rd * rt(无符号数)

除法

div rd,rt	  lo = rd / rt; hi = rd % rt(有符号数)
divu rd,rt	lo = rd / rt; hi = rd % rt(无符号数)

数据传输指令

lw rt,immediate(rs)	 rt = memory[rs + immediate]
sw rt,immediate(rs)	 memory[rs + immediate] = rt
lh rt,immediate(rs)	 rt = memory[rs + immediate]
lhu rt,immediate(rs) rt = memory[rs + immediate](零扩展)
sh rt,immediate(rs)	 memory[rs + immediate] = rt
lb rt,immediate(rs)	 rt = memory[rs + immediate]
lbu rt,immediate(rs) rt = memory[rs + immediate](零扩展)
sb rt,immediate(rs)	 memory[rs + immediate] = rt
lui rt,immediate	   rt = immediate * 2^16

无条件跳转指令

j address 	goto address * 4
jal address	$ra = PC + 4; goto address * 4
jr register	goto register

回到正题

腾达路由器检测环境功能破解

用ida打开这个程序,shift+f12查看这个程序的字符串

image.png

ctrl+f 定位welcone to字符串位置

image.png

双击,进入rodata段,交叉定位跳转到调用这个字符串的地址

image.png

image.png

程序在这里进入了死循环,代码的最后部分包含了一个条件跳转指令bnez(如果不等于零则跳转),这个跳转指令依赖于GetValue函数的返回值。如果GetValue返回非零值,程序将跳转到loc_43B828,在loc_43B828最后,又会跳回loc_43872c处,和while函数类似

image.png

用ghidra打开程序,定位到这个地方查看伪代码

image.png

可以看到,这里while函数会一直循环,我们在虚拟机上运行的,和路由器网络环境不一样,所以永恒为true

什么是NOP指令

NOP指令,全称"No Operation"指令,是一种在多种编程语言和汇编语言中存在的特殊指令。如其名所示,NOP指令的执行不会对程序的状态或机器的执行环境产生任何影响,也就是说,它不执行任何操作。在CPU执行NOP指令时,除了指令计数器(PC)会前进到下一条指令外,其他的寄存器值、内存状态和处理器的状态都不会改变

也就是说,我们可以用nop指令把while函数给覆盖掉,使程序不执行while函数

回到ida pro,我们可以把这两个跳转的地方用nop指令给覆盖掉

image.png

把鼠标放到第一个红框的地址处,点击一下,然后在ida pro上面的任务栏里选择

Edit->Patch program->change byte

将前4位都改成0,点击ok,就能换成nop指令了

image.png

image.png

继续更改第二个跳转指令,点击跳转地址的地方,然后在ida pro上面的任务栏里选择

Edit->Patch program->change byte

继续将前四个值改成0

image.png

image.png

点击ok,完成程序修改

image.png

现在导出程序,还是在ida pro上面的任务栏里选择

Edit->Patch program->Apply patches to input file

image.png
点击ok,现在程序已经被我们修改了,退出ida pro,将修改后的文件覆盖虚拟机里的源文件,然后给程序赋权

chmod 777 httpd

最后添加新的网卡,运行程序

brctl addbr br0
brctl addif br0 eth0
ifconfig br0 up
dhclient br0 

image.png

qemu-mipsel-static -L . ./bin/httpd

image.png
image.png

成功在虚拟机里访问路由器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/725056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

讲享元设计模式,顺便~学会了数据库连接池,

设计模式-详细说明享元模式设计,保准一听就会,不会你来打我 1.前言 今天呢,我们来说下享元模式,享元模式是结构型模式,我的感觉,结构型模式都是相对比较简单的设计模式,这个也是,之…

数据伪列

目录 数据伪列 rownum 查询 emp 表中的记录并且取得第一行数据 取得 emp 表的前 5 行记录 rowid 面试题:表中有许多完全重复的数据,要求将重复的数据删除掉(只剩最早的一个) Oracle从入门到总裁:https://blog.csdn.net/weixin…

Guava处理异常

guava由Google开发,它提供了大量的核心Java库,例如:集合、缓存、原生类型支持、并发库、通用注解、字符串处理和I/O操作等。 异常处理 传统的Java异常处理通常包括try-catch-finally块和throws关键字。 遇到FileNotFoundException或IOExce…

【算法可视化】图论专题

运行平台 Algorithm Visualizer 图的深度优先遍历 // import visualization libraries { const { Tracer, Array1DTracer, GraphTracer, LogTracer, Randomize, Layout, VerticalLayout } require(algorithm-visualizer); // }// define tracer variables { const graphTra…

嵌入式蓝桥杯做题总结

第十二届省赛 按键代码 ——自认为比较巧妙,定时器3被设置为10ms进入一次中断,代替了HAL_Delay(10)的方法消抖; 运用状态机机思想实现检测多个按键检测——且分为两个状态,其中一个状态PB1和PB2的按键不…

stable-diffusion-webui-forge 介绍,安装,运行

一 stable-diffusion-webui-forge 介绍 stable-diffusion-webui-forge 的作用和stable-diffusion-webui一样,但性能上作了优化,说得上是是stable-diffusion-webui优化版,本人在使用stable-diffusion-webui时偶尔会有内存不够报错。本人的环境…

手写分布式配置中心(四)增加实时刷新功能(长轮询)

上一篇文章中实现了短轮询,不过短轮询的弊端也很明显,如果请求的频率较高,那么就会导致服务端压力大(并发高);如果请求的频率放低,那么客户端感知变更的及时性就会降低。所以我们来看另一种轮询…

Mysql面试总结

基础 1. 数据库的三范式是什么? 第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项。第二范式:要求实体的属性完全依赖于主关键字。所谓完全 依赖是指不能存在仅依赖主关键字一部分的属性。第三范式&…

牛客 子序列的权值最小值(贪心)

链接:https://ac.nowcoder.com/acm/contest/76803/A 来源:牛客网 题目描述 给定一个长度为 n n n 的数组 a a a,求数组所有非空子序列权值的最小值。 定义子序列 a i , a j , … , a k a_i,a_j,…,a_k ai​,aj​,…,ak​ 的权值为 a i a…

什么是reids缓存雪崩、缓存击穿、缓存穿透?

缓存雪崩、缓存击穿和缓存穿透是与redis缓存系统相关的三种常见问题,它们都可能导致缓存系统性能下降或失效。下面分别解释这三种情况并提供例子: 缓存雪崩(Cache Avalanche): 定义: 缓存雪崩是指在某个时…

UDP通信发送和接收 || UDP实现全双工通信

recvfrom ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); 功能: 从套接字中接收数据 参数: sockfd:套接字文件描述符 buf:存放数据空间首地址 …

基于springboot实现的幼儿园管理系统

一、系统架构 前端:html | layui | jquery | css 后端:springboot | mybatis 环境:jdk1.8 | mysql | maven 二、代码及数据库 三、功能介绍 01. 登录页 02. 系统管理-用户管理 03. 系统管理-页面管理 04. 系统管理-角色管…

Day 50[补档] |● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV

123.买卖股票的最佳时机III class Solution { public:int maxProfit(vector<int>& prices) {if(prices.size() 0) return 0;vector<vector<int>> dp(prices.size(), vector<int>(5,0));//dp[i][j] 表示根据j的方法数下&#xff0c;第i天时候最大…

win11配置Mask DINO小白踩坑记录

win11配置Mask DINO踩坑记录 1 准备工作2 创建python环境和安装detectron22.1 安装前提2.2 安装流程2.2.1 cl.exe的错误2.2.2 SetuptoolsDeprecationWarning的错误 3 MaskDINO运行3.1 运行demo 前情提要&#xff1a;需要复现Mask DINO&#xff0c;但是实验室没有Linux的电脑&am…

keycloak18.0.0==本地源码启动

github下载源码&#xff0c; 版本18.0.0 java和maven的版本如下 E:\keycloak-18.0.0>java -version java version "21.0.1" 2023-10-17 LTS Java(TM) SE Runtime Environment (build 21.0.112-LTS-29) Java HotSpot(TM) 64-Bit Server VM (build 21.0.112-LTS-…

Wince NK.BIN文件格式

nk.bin文件格式 开始7个字节为 42 30 30 30 46 46 0A 即“B000FF\x0A”&#xff0c;以次来判别文件类型。 接下来4字节&#xff08;DWORD&#xff09;表示ImageStart, 4字节表示ImageLength 如7字节后的8字节分别为&#xff1a;00 00 00 60 9C FA 33 01 则表示ImageStart0x600…

【SpringBoot3.x教程05】SpringBoot与关系型数据库的整合

前言&#xff1a;常用的ORM框架有哪些 JdbcTemplate JdbcTemplate 是Spring框架提供的一个JDBC抽象库&#xff0c;旨在简化传统的JDBC操作&#xff0c;避免了繁琐的JDBC代码和数据库资源的手动处理。通过JdbcTemplate&#xff0c;开发者可以更加专注于业务逻辑而不是数据库的连…

【网站项目】308学生档案管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

如何用Python3自撰一个简单的后端框架

不使用任何现有的后端框架来创建一个Python 3的后端框架是一个相当复杂的任务,因为它涉及到许多Web开发的基础知识,比如HTTP协议处理、路由、中间件、请求和响应处理等。然而,我们可以从最基本的概念开始,逐步构建一个简单的后端框架。 以下是一个非常基础的指南,用于创建…

Spring Webflux 详解

目录 0、组件对比 1、WebFlux 1、引入 2、Reactor Core 1、HttpHandler、HttpServer 3、DispatcherHandler 1、请求处理流程 4、注解开发 1、目标方法传参 2.返回值写法 5、文件上传 6、错误处理 7、RequestContext 8、自定义Flux配置 9、Filter WebFlux&am…