第一章 基础准备与工具

1.路由器漏洞分类

  • 密码破解漏洞

    • 简单可猜测密码:暴力破解
    • WPS(Wi-Fi Protected Setup)技术:一键加密
    • 本质上属于使用过程中的配置问题,不着重分析
  • Web漏洞

    • 家用路由器带有Web管理服务
    • SQL注入、命令执行、CSRF、XSS等针对web攻击
  • 后门漏洞

    • 后门:开发软件的程序员为了日后调试和检测方便,在软件中设置的一个超级管理权限
    • 后门被发现即会被攻击
  • 溢出漏洞

    • 存在缓冲区漏洞被攻击
    • 通过分析及模糊测试发现缓冲区溢出漏洞,即可获得控制权限

2.路由器系统

  • 采用Linux系统

    • 特点:
    1. 指令架构:路由器是一种嵌入式系统,多采用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漏洞挖掘技术》学习笔记相关推荐

  1. 第二行代码学习笔记——第六章:数据储存全方案——详解持久化技术

    本章要点 任何一个应用程序,总是不停的和数据打交道. 瞬时数据:指储存在内存当中,有可能因为程序关闭或其他原因导致内存被回收而丢失的数据. 数据持久化技术,为了解决关键性数据的丢失. 6.1 持久化技 ...

  2. 第一行代码学习笔记第二章——探究活动

    知识点目录 2.1 活动是什么 2.2 活动的基本用法 2.2.1 手动创建活动 2.2.2 创建和加载布局 2.2.3 在AndroidManifest文件中注册 2.2.4 在活动中使用Toast ...

  3. 第一行代码学习笔记第八章——运用手机多媒体

    知识点目录 8.1 将程序运行到手机上 8.2 使用通知 * 8.2.1 通知的基本使用 * 8.2.2 通知的进阶技巧 * 8.2.3 通知的高级功能 8.3 调用摄像头和相册 * 8.3.1 调用 ...

  4. 第一行代码学习笔记第六章——详解持久化技术

    知识点目录 6.1 持久化技术简介 6.2 文件存储 * 6.2.1 将数据存储到文件中 * 6.2.2 从文件中读取数据 6.3 SharedPreferences存储 * 6.3.1 将数据存储到 ...

  5. 第一行代码学习笔记第三章——UI开发的点点滴滴

    知识点目录 3.1 如何编写程序界面 3.2 常用控件的使用方法 * 3.2.1 TextView * 3.2.2 Button * 3.2.3 EditText * 3.2.4 ImageView ...

  6. 第一行代码学习笔记第十章——探究服务

    知识点目录 10.1 服务是什么 10.2 Android多线程编程 * 10.2.1 线程的基本用法 * 10.2.2 在子线程中更新UI * 10.2.3 解析异步消息处理机制 * 10.2.4 ...

  7. 第一行代码学习笔记第七章——探究内容提供器

    知识点目录 7.1 内容提供器简介 7.2 运行权限 * 7.2.1 Android权限机制详解 * 7.2.2 在程序运行时申请权限 7.3 访问其他程序中的数据 * 7.3.1 ContentRe ...

  8. 第一行代码学习笔记第五章——详解广播机制

    知识点目录 5.1 广播机制 5.2 接收系统广播 * 5.2.1 动态注册监听网络变化 * 5.2.2 静态注册实现开机广播 5.3 发送自定义广播 * 5.3.1 发送标准广播 * 5.3.2 发 ...

  9. 第一行代码学习笔记第九章——使用网络技术

    知识点目录 9.1 WebView的用法 9.2 使用HTTP协议访问网络 * 9.2.1 使用HttpURLConnection * 9.2.2 使用OkHttp 9.3 解析XML格式数据 * 9 ...

  10. 安卓教程----第一行代码学习笔记

    安卓概述 系统架构 Linux内核层,还包括各种底层驱动,如相机驱动.电源驱动等 系统运行库层,包含一些c/c++的库,如浏览器内核webkit.SQLlite.3D绘图openGL.用于java运行 ...

最新文章

  1. GC(垃圾处理机制)面试加薪必备
  2. python和rpa_什么是RPA
  3. 选择计算机系统的依据是什么,大学计算机基础 试题
  4. iText中输出 中文
  5. oracle存储怎么调试tord,接口_数据交换应用指导(20页)-原创力文档
  6. 最近在上海浦东新区的租房经历
  7. 网站设计| 网站设计模板素材
  8. DIY面试题 for AI产品经理 | “智能音箱半夜诡异笑声”的原因分析及建议方案
  9. 概念性知识与程序性知识的关系
  10. 高分Essay写作要点分析
  11. c语言编程基础 王森,《C语言编程基础第2版》王森版 习题答案
  12. 我为国内微积分“小糊涂”感到悲哀!
  13. Adroid游戏开发实例讲解(四)-电子白板附源码
  14. #03 ASP.NET主题
  15. python opencv 剪切图片
  16. git切换分支:The following untracked working tree files would be overwritten by checkout:
  17. 深度学习论文: BAM: Bottleneck Attention Module及其PyTorch实现
  18. 一文读懂服务式办公室、共享办公室、联合办公空间、开放式工位的关系
  19. python自动化测试之unittest简介讲解
  20. mount命令挂载时出现libuuid.so.1 : no version information available

热门文章

  1. sendto 函数中的struct iov_iter结构 (linux-5.0)
  2. 温度采集系统(开源 原理图、PCB文件+源码+云平台+app端设计方案)
  3. 看单片机原理图-电源电路
  4. Scintilla教程(2): 文本检索与修改
  5. vmware如何安装spoonwep2
  6. 【计量经济学导论】16. 面板数据模型
  7. 工科数学分析寒假预习day2 正项级数的敛散性
  8. 利用公共手机获取短信验证码
  9. Python爬虫实战01 ---- 百度贴吧一键签到
  10. 计算机专业类ppt背景图片,6种方法,教你做出高大上PPT及背景-ppt背景图片怎么设置...