从零开始的二进制漏洞挖掘(1)路由器漏洞挖掘(去实战版)

在这里插入图片描述

前言

路由器的洞大部分都是栈溢出,如果想要了解一些相关的知识,可以去看我的pwn和二进制安全虚拟机Protostar靶场系列文章,传送门:

https://blog.csdn.net/qq_45894840/category_12002228.html?spm=1001.2014.3001.5482

ghidra安装

Ghidra是一个由美国国家安全局(NSA)开发并公开发布的软件逆向工程(SRE)工具套件。它是一个完全开源的项目,旨在提供一个全面的工具集合,用于执行对编译代码(如二进制文件和执行文件)的逆向工程任务。Ghidra的发布旨在帮助安全研究人员分析恶意代码和漏洞,以及提高软件的安全性

https://github.com/NationalSecurityAgency/ghidra
apt install openjdk-17-jdk  #java环境安装

在这里插入图片描述

提取路由器固件

下载路由器官网更新的固件后,可以用binwalk工具对固件进行提取

在这里插入图片描述

解压文件夹后,可以看到一个.bin文件,这个就是路由器的固件

在这里插入图片描述

现在可以用binwalk提取路由器固件里的文件

binwalk -eM 路由器固件.bin

进入目录后,查看文件夹,会发现会有一个类似linux目录的文件夹

在这里插入图片描述

wwwroot_ro目录下是路由器网站的源代码

在这里插入图片描述

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

在这里插入图片描述

使用ghidra对固件进行静态分析

ghidra的简单使用的文章

https://blog.csdn.net/qq_45894840/article/details/124556441

将httpd程序导入ghidra

在这里插入图片描述

在这里插入图片描述

双击程序进行分析

在这里插入图片描述

在这里插入图片描述

等右下角没有进度条了就说明Ghidra分析完成了

在这里插入图片描述

什么是缓冲区溢出

在程序运行时,系统会为程序在内存里生成一个固定空间,如果超过了这个空间,就会造成缓冲区溢出,可以导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,甚至可以取得系统特权,进而进行各种非法操作。

在这里插入图片描述

strcpy

strcpy这个函数比较危险,因为它是直接把一个变量里的内容复制到另一个变量里的,它不会检查字符串的长度,很容易发生缓冲区溢出

按住ctrl+shift+e,呼出搜索界面,搜索strcpy函数

在这里插入图片描述

注意要勾选上图中的选项和点击搜索全部

在这里插入图片描述

这些就是程序调用了strcpy的地方,点击就能看到对应函数伪代码

在这里插入图片描述

把这些搜索到的调用strcpy函数的地方一个一个看,很容易发现栈溢出漏洞

这次演示的漏洞点在setSchedWifi函数中,找到setSchedWifi函数,点击它,查看源代码

在这里插入图片描述

在setSchedWifi函数中,__src变量会将用户交互的schedStartTime字符串后面的值作为字符串存入

在这里插入图片描述

之后程序会用strcpy函数将__src变量里的值传入__ptr+2指针指向的地址处

在这里插入图片描述

由于__src并未设置缓冲区,而strcpy函数不会检查字符串的长度,传入过长的字符串会造成缓冲区溢出,使程序崩溃退出

交叉定位,全局搜索调用setSchedWifi函数的地方,找到调用setSchedWifi函数的接口

在这里插入图片描述

在这里插入图片描述

在formDefineTendDa这个函数下面找到了setSchedWifi函数的路由

在这里插入图片描述

ctrl+f快速定位setSchedWifi函数

在这里插入图片描述

调用setSchedWifi函数的接口是openSchedWifi

payload:

import requests

url = "http://ip/goform/openSchedWifi"
data = {
    "schedStartTime":b'A'*1000
}
requests.post(url=url,data=data)

system

system这个函数会执行指定的命令,如果程序将我们的输入传入了这个函数里,那么有可能会造成rce

ctrl+shift+e搜索system

在这里插入图片描述

在这里插入图片描述

绕过

||id
|id

如果要输入空格,可以用以下命令代替空格:

${IFS}

路由器环境安装

什么是qemu

QEMU是一种流行的开源机器模拟与虚拟化软件。它的全称是Quick Emulator,意即“快速模拟器”。QEMU允许用户模拟完整的计算机系统,包括处理器和各种外设,这样可以在一个主机系统上运行一个或多个客户操作系统。它支持多种硬件架构,这意味着不仅可以模拟您的当前硬件架构,还可以模拟其他架构,以运行为那些架构专门设计的软件。

安装qemu

sudo apt install qemu-user-static
qemu-user-static -L . ./bin/httpd  #运行

在这里插入图片描述

找到漏洞并复现成功后,可以在这个网站提交漏洞,获取cve编号

https://vuldb.com/?id.add

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ba1_Ma0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值