《解密家用路由器0day漏洞挖掘技术》学习笔记
第一章 基础准备与工具
1.路由器漏洞分类
密码破解漏洞
- 简单可猜测密码:暴力破解
- WPS(Wi-Fi Protected Setup)技术:一键加密
- 本质上属于使用过程中的配置问题,不着重分析
Web漏洞
- 家用路由器带有Web管理服务
- SQL注入、命令执行、CSRF、XSS等针对web攻击
后门漏洞
- 后门:开发软件的程序员为了日后调试和检测方便,在软件中设置的一个超级管理权限
- 后门被发现即会被攻击
溢出漏洞
- 存在缓冲区漏洞被攻击
- 通过分析及模糊测试发现缓冲区溢出漏洞,即可获得控制权限
2.路由器系统
采用Linux系统
- 特点:
指令架构:路由器是一种嵌入式系统,多采用MIPS(属于RISC精简指令集体系,与之相对的是CISC复杂指令集体系)和ARM这两种指令架构
2.路由器的Shell基于BusyBox
文本编辑器:
- nano编辑器:简单,使用方便
- vi编辑器:命令行模式、插入模式、末行模式
编译工具GCC
- 将.c文件生成可执行文件
- 编译命令:gcc -o 文件名 文件名.c
- 执行命令: ./文件名
调试工具GDB
- 设置断点进行调试
3.MIPS汇编语言基础
最常使用MIPS32架构
使用大量寄存器:
- 通用寄存器GPR:32个
- 特殊寄存器:3个 PC(程序计数器)、HI(乘除结果高位寄存器)、LO(乘除结果低位寄存器)
字节序:大端模式(与书写习惯相同)、小端模式(相反)
寻址方式:4种 寄存器寻址、立即数寻址、寄存器相对寻址、PC相对寻址
流水线效应:几条指令同时执行,但处于不同阶段
寄存器前面使用$标注
4.HTTP协议
- 路由器与Web服务器通信时使用HTTP协议
- HTTP请求由请求行、消息报头、请求正文三部分组成
- 请求行:请求方法(常用GET、POST)+URL
- 消息报头:名字+:+空格+值
- 请求正文:请求内容
第四章 Web漏洞
XSS漏洞
跨站脚本攻击 Cross Site Scripting
指的是在Web页面中插入恶意HTML代码
过程:受害者点击含有XSS漏洞的网页中的URL,恶意代码就会在浏览器中执行,将路由器网页的Cookie发给攻击者,即可通过Cookie盗取信息或更改路由器设置
CSRF漏洞
- 跨站请求伪造Cross-Site Request Forgery
- 相较XSS能够直接修改路由器参数,使目标长期被监控,危害更大,更隐蔽
- 攻击者伪造CSRF链接,修改路由器DNS为伪造DNS服务器,受害者点击后,网络数据因假的DNS将数据全部发给攻击者,可监控。
路由器基础认证漏洞
- 使用一种特殊的URL访问方法实现路由器认证
- 基础认证漏洞+XSS+CSRF一起攻击
第五章 后门漏洞
- 可以绕过安全控制而获取路由器访问权的漏洞
- 事件举例:绕过密码、直接获得root权限
第六章 溢出漏洞
- 叶子函数:一个函数中不再调用其他任何函数
- 存在可以溢出大量数据的情况,就存在通过覆盖父函数中的返回地址利用缓冲区溢出漏洞的可能性
- 非叶子函数:一个函数中调用了其他函数
- 存在非叶子函数,且有缓冲区溢出漏洞,就可以覆盖某一个函数的返回地址,从而劫持程序执行流程
- 缓冲区:在内存中存储数据的内存区域
- 缓冲区溢出:大放小,多出来的覆盖了小相邻内存中的其他数据,引发内存问题
- 利用缓冲区溢出的3种后果:拒绝服务、获得用户级权限、获得系统权限(注:用户级权限就是普通权限,系统权限相当于root)
- 漏洞利用开发过程:
- 劫持PC
- 确定偏移
- 确定攻击途径
- 构建漏洞攻击数据
第八章 路由器文件系统与提取
- 路由器固件:是软件,固化在只读存储器ROM中
- 获取固件两种方法:
- 从路由器广商提供的更新网站下载
- 通过硬件接入,从路由器flash中提取固件
- 文件系统:Squashfs,只读格式,具有超高压缩率,将文件系统保存在压缩过的文件中,需要时只解压所需部分
手动提取
- file命令查看文件类型
- 手动判断文件类型
- 检索magic签名(大小端两次检索)
- 确定文件系统
- 手动提取出squashfs-root文件夹
自动提取
- 使用binwalk
- 使用libmagic库函数,直接扫描文件的内存镜像,以提高扫描效率
- 使用 binwalk 名称.bin 进行固件扫描
- 使用 binwalk -e 名称.bin 进行提取文件
第九章 漏洞分析简述
- 漏洞分析是指 在代码中迅速定位漏洞,弄清攻击原理,准确地估计潜在的漏洞利用方式和风险等级的过程
- 通过漏洞公布网站获取漏洞信息
- 漏洞POC:漏洞发现者提供的一段可重现漏洞的代码
- 漏洞分析常用的两种方法:
- 动态调试:使用IDA的动态调试功能,跟踪指令执行流程,追踪输入数据在程序中的处理过程
- 静态分析:使用IDA获得程序的“全局观”,具有清晰的代码结构,能高质量地支持MIPS指令的反汇编代码,辅助进行动态调试
第十六章 路由器硬件的提取
Flash:闪存,通常分为4个区块
- BootLoader
- Kernel
- Root Filesystem
- NVRAM
提取方案:
- 通过路由器主板上的JTAG接口提取FLASH、NVRAM
- 从主板上取下的FLASH芯片中提取
- 使用测试夹从FLASH芯片中提取
提取FLASH:
- brjtag -backup:kernel 备份固件
- brjtag -erase:kernel 擦除固件
- brjtag -flash:kernel 写入固件
- brjtag -backup:wholeflash 备份wholeflash
- brjtag -erase:wholeflash 擦除wholeflash
- brjtag -flash:wholeflash 写入wholeflash
漏洞挖掘技术
- 静态代码审计:依赖源代码的白盒测试
- 使用IDA
- 步骤:
- 使用IDA对目标程序进行反汇编
- 搜索可能造成安全漏洞的危险函数
- 跟踪危险函数如何获取和用户提供的数据的过程,判断是否存在安全漏洞
- 跟踪分析方法:
- 正向数据流跟踪:从用户输入开始追踪,判断其影响和漏洞
- 数据处理逆向流跟踪:跟踪常见的数据危险函数,反向追踪数据流向,找到源缓冲区和目的缓冲区,判断输入的数据是否造成漏洞(目前采用)
- 模糊测试:不依赖源代码的黑盒测试
《解密家用路由器0day漏洞挖掘技术》学习笔记相关推荐
- 第二行代码学习笔记——第六章:数据储存全方案——详解持久化技术
本章要点 任何一个应用程序,总是不停的和数据打交道. 瞬时数据:指储存在内存当中,有可能因为程序关闭或其他原因导致内存被回收而丢失的数据. 数据持久化技术,为了解决关键性数据的丢失. 6.1 持久化技 ...
- 第一行代码学习笔记第二章——探究活动
知识点目录 2.1 活动是什么 2.2 活动的基本用法 2.2.1 手动创建活动 2.2.2 创建和加载布局 2.2.3 在AndroidManifest文件中注册 2.2.4 在活动中使用Toast ...
- 第一行代码学习笔记第八章——运用手机多媒体
知识点目录 8.1 将程序运行到手机上 8.2 使用通知 * 8.2.1 通知的基本使用 * 8.2.2 通知的进阶技巧 * 8.2.3 通知的高级功能 8.3 调用摄像头和相册 * 8.3.1 调用 ...
- 第一行代码学习笔记第六章——详解持久化技术
知识点目录 6.1 持久化技术简介 6.2 文件存储 * 6.2.1 将数据存储到文件中 * 6.2.2 从文件中读取数据 6.3 SharedPreferences存储 * 6.3.1 将数据存储到 ...
- 第一行代码学习笔记第三章——UI开发的点点滴滴
知识点目录 3.1 如何编写程序界面 3.2 常用控件的使用方法 * 3.2.1 TextView * 3.2.2 Button * 3.2.3 EditText * 3.2.4 ImageView ...
- 第一行代码学习笔记第十章——探究服务
知识点目录 10.1 服务是什么 10.2 Android多线程编程 * 10.2.1 线程的基本用法 * 10.2.2 在子线程中更新UI * 10.2.3 解析异步消息处理机制 * 10.2.4 ...
- 第一行代码学习笔记第七章——探究内容提供器
知识点目录 7.1 内容提供器简介 7.2 运行权限 * 7.2.1 Android权限机制详解 * 7.2.2 在程序运行时申请权限 7.3 访问其他程序中的数据 * 7.3.1 ContentRe ...
- 第一行代码学习笔记第五章——详解广播机制
知识点目录 5.1 广播机制 5.2 接收系统广播 * 5.2.1 动态注册监听网络变化 * 5.2.2 静态注册实现开机广播 5.3 发送自定义广播 * 5.3.1 发送标准广播 * 5.3.2 发 ...
- 第一行代码学习笔记第九章——使用网络技术
知识点目录 9.1 WebView的用法 9.2 使用HTTP协议访问网络 * 9.2.1 使用HttpURLConnection * 9.2.2 使用OkHttp 9.3 解析XML格式数据 * 9 ...
- 安卓教程----第一行代码学习笔记
安卓概述 系统架构 Linux内核层,还包括各种底层驱动,如相机驱动.电源驱动等 系统运行库层,包含一些c/c++的库,如浏览器内核webkit.SQLlite.3D绘图openGL.用于java运行 ...
最新文章
- GC(垃圾处理机制)面试加薪必备
- python和rpa_什么是RPA
- 选择计算机系统的依据是什么,大学计算机基础 试题
- iText中输出 中文
- oracle存储怎么调试tord,接口_数据交换应用指导(20页)-原创力文档
- 最近在上海浦东新区的租房经历
- 网站设计| 网站设计模板素材
- DIY面试题 for AI产品经理 | “智能音箱半夜诡异笑声”的原因分析及建议方案
- 概念性知识与程序性知识的关系
- 高分Essay写作要点分析
- c语言编程基础 王森,《C语言编程基础第2版》王森版 习题答案
- 我为国内微积分“小糊涂”感到悲哀!
- Adroid游戏开发实例讲解(四)-电子白板附源码
- #03 ASP.NET主题
- python opencv 剪切图片
- git切换分支:The following untracked working tree files would be overwritten by checkout:
- 深度学习论文: BAM: Bottleneck Attention Module及其PyTorch实现
- 一文读懂服务式办公室、共享办公室、联合办公空间、开放式工位的关系
- python自动化测试之unittest简介讲解
- mount命令挂载时出现libuuid.so.1 : no version information available
热门文章
- sendto 函数中的struct iov_iter结构 (linux-5.0)
- 温度采集系统(开源 原理图、PCB文件+源码+云平台+app端设计方案)
- 看单片机原理图-电源电路
- Scintilla教程(2): 文本检索与修改
- vmware如何安装spoonwep2
- 【计量经济学导论】16. 面板数据模型
- 工科数学分析寒假预习day2 正项级数的敛散性
- 利用公共手机获取短信验证码
- Python爬虫实战01 ---- 百度贴吧一键签到
- 计算机专业类ppt背景图片,6种方法,教你做出高大上PPT及背景-ppt背景图片怎么设置...