查找方法
在cve list查找cemara(router也行,但是路由器通常是mips架构的)
https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=camera
或者查找开源库
定位到感兴趣的条目
对它感兴趣是因为它的漏洞描述:固件为0x20x之前的VIVOTEK IP摄像机设备通过精心设计的HTTP标头具有基于堆栈的缓冲区溢出。
- 影响范围比较广(固件可能容易获得,一次可以找到影响的固件比较多)
- 栈溢出明显的二进制漏洞
但是这个条目的解释非常少,我对这个条目进行搜索
搜索更多信息
最关键的有两个点:
- 说明文档,对漏洞位置的说明
- 固件下载,能够下载到固件并且能够解压
接下来将会解决这两个问题
说明文档查找
直接搜索cve编号或cve编号+“poc” 关键字
这里面很多都是对漏洞的报告,需要多打开几个
我这里找到了一个报告多包含了一点信息
告诉了我关键漏洞函数位置以及cwe编号
介绍:cwe是收集的漏洞类型,是对一个漏洞关键代码的摘要
从cwe可以帮助理解这是什么漏洞
固件下载和解压
可以从查找道德信息里面确定漏洞存在于那些版本的固件,从官网下载固件,有些分析文章会直接给出固件下载链接
找到固件上面说0x20a以前的版本,就随便找之前的版本下载(字母尽量跟前面的VVTK匹配,匹配不了也没办法先下载一个试试)
下载之后查询签名并解压(一般是.bin文件但是有时候是其他后缀名)
binwalk -Y AB6117-VVTK-0101f.flash.pkg
命令可以查询签名得到架构的信息(一般是x86,x86_64,i386,amd64,mips,arm)架构信息查不到无所谓
然后解压binwalk -Me AB6117-VVTK-0101f.flash.pkg
解压完成会多出一个下划线开头的文件夹,可能内容很多也可能很少
接下来要确定一些信息,解压是否成功,漏洞程序是哪一个
- find 命令是递归输出指定目录下的所有文件、文件夹
- .表示目录(可以指定为要搜索的目录)
- |grep是用来过滤字符串的
- busybox就是要过滤的字符串,只输出包含busybox的字符串,其他的都不会输出
上面的结果表示搜索到了busybox这个文件(或者文件夹)
busybox是嵌入式设备常用(基本上都要用)的工具,它里面集成了很多linux常用命令并且文件本身比较小。这里搜索到了这个文件说明解压成功了(也可以通过tree命令查看目录里面文件多少判断是否解压成功)
还可以通过这个文件得到系统的架构
(base) ➜ _AB6117-VVTK-0101f.flash.pkg.extracted git:(master) ✗ file ./_31.extracted/_rootfs.img.extracted/squashfs-root/bin/busybox
./_31.extracted/_rootfs.img.extracted/squashfs-root/bin/busybox: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, stripped
file命令打印出了这个文件的架构是arm,LSB表示小段字节序,32-bit表示32位
分析漏洞
找到漏洞文件
可以根据分析的文章找到具体是哪个文件。但是有时候没有给出是哪个文件
一般是httpd文件(如果是http服务的漏洞)
同样的方法可以查找到httpd所在的目录
分析httpd文件
需要用到的工具:ghidra,ida安装包在硬盘里(漏洞收集目录)
搜索漏洞函数定位
本函数没有意义查找谁调用了这个函数
发现只有一个地方调用了这个函数
可以看出一些问题搜索了这些参数的含义可以知道这里三个参数只是限制日志等级进程之类的东西,没有限制字符串长度
这是我用c把这段代码摘出来做的测试
对字符串的限制在上一层函数
找到了很多函数,但是只有一个函数的参数是变量,这里应该是一个有漏洞的函数
但是需要动态调试来验证,比较麻烦先放在这里。(因为poc部分实在不行可以是一段文字描述)