0%

前言

在某些情况下,我们可能会将C代码与汇编代码一起混合使用。比如,使用汇编代码直接与硬件进行交互,或者在处理任务时希望占用尽量少的资源同时获得最大的性能,而使用C代码处理一些更高级 的任务。通常情况下,混合使用C与汇编可分为以下三种情形:

  • 在C中调用汇编中定义的函数
  • 在汇编中调用C语言中的函数
  • 直接在C语言中嵌入汇编
阅读全文 »

漏洞简介

CVE-2019-13954MikroTik RouterOS中存在的一个memory exhaustion漏洞。认证的用户通过构造并发送一个特殊的POST请求,服务程序在处理POST请求时会陷入”死”循环,造成memory exhaustion,导致对应的服务程序崩溃或者系统重启。

该漏洞与CVE-2018-1157类似,是由于对漏洞CVE-2018-1157的修复不完善造成。下面通过搭建MikroTik RouterOS仿真环境,结合漏洞CVE-2018-1157PoC脚本及补丁,对漏洞CVE-2019-13954进行分析。

阅读全文 »

漏洞简介

CVE-2018-1158MikroTik路由器中存在的一个stack exhaustion漏洞。认证的用户通过构造并发送一个特殊的json消息,处理程序在解析该json消息时会出现递归调用,造成stack exhaustion,导致对应的服务崩溃重启。

该漏洞由TenableJacob Baines发现,同时提供了对应的PoC脚本。另外,他的关于RouterOS漏洞挖掘的议题《Bug Hunting in RouterOS》非常不错,对MikroTik路由器中使用的一些自定义消息格式进行了细致介绍,同时还提供了很多工具来辅助分析。相关工具、议题以及PoC脚本可在gitrouteros获取,强烈推荐给对MikroTik设备感兴趣的人。

阅读全文 »

前言

最近在安全客上看到一篇文章PIE保护详解和常用bypass手段,里面提到了3种绕过PIE保护机制的方式:partial write泄露地址vdso/vsyscall。由于之前对vdso/vsyscall机制了解的不多,于是花了点时间动手实践,以下是对题目1000levels的简单分析。

1000levels

程序分析

该程序提供的功能如下。

阅读全文 »

前言

通常,在对IoT设备的固件进行分析时,固件中与提供服务如HTTPTelnetRTSPUPnP等相关的二进制程序是重点分析的对象。因为一旦在这些程序中发现漏洞,其很有可能会被远程利用,进而带来严重的安全隐患。

对固件二进制程序进行分析,常见的分析方法包括模糊测试补丁比对工具静态扫描人工审计等。其中,模糊测试方法具备简单易用的特点,通常也比较有效,其在业界已被广泛使用。

阅读全文 »

前言

在对IoT设备进行安全分析时,通常设备对我们而言像个”黑盒子”,通过给它提供输入然后观察它的反馈输出,而对设备的”内部”并不了解。如果能够通过某种方式进入设备”内部”,获取到设备的shell,则会对后续的分析提供极大的便利。

阅读全文 »

漏洞简介

CVE-2018-0296是思科ASA设备Web服务中存在的一个拒绝服务漏洞,远程未认证的攻击者利用该漏洞可造成设备崩溃重启。该漏洞最初由来自Securitum的安全研究人员Michal Bentkowski发现,其在博客中提到该漏洞最初是一个认证绕过漏洞,上报给思科后,最终被归类为拒绝服务漏洞。据思科发布的安全公告显示:针对部分型号的设备,该漏洞可造成设备崩溃重启;而针对其他型号的设备,利用该漏洞可获取设备的敏感信息,造成信息泄露。

阅读全文 »

re1

使用file命令查看文件类型,如下:

1
2
$ file re1.exe
re1.exe: PE32 executable (console) Intel 80386, for MS Windows

运行该程序,提示输入flag,随机输入内容后程序退出。

利用IDA Pro加载程序进行分析,main()函数的主要逻辑如下:读取输入的flag(长度为22),然后对flag内容进行一系列判断,如strcmp()check()以及调用v10v11v12指向的函数等。

阅读全文 »

前言

最近看了@小黑猪的一篇关于TP-Link wr886nv7固件初步分析的文章,由于之前很少分析基于VxWorks系统的固件,所以按照文章的思路动手重现了一下整个过程。

使用binwalk 初步分析

从TP-Link官网下载wr886的固件,由于没有找到v7版本的固件,所以下载的是v6版本的固件。对下载的压缩包进行解压,然后使用binwalk对文件wr886nv6.bin进行分析,如下。

阅读全文 »

off-by-one 原理

严格来说,off-by-one漏洞是一种特殊的溢出漏洞,指程序向缓冲区中写入时,写入的字节数超过了缓冲区本身的大小,并且只越界了一个字节。这种漏洞的产生往往与边界验证不严或字符串操作有关,当然也有可能写入的size正好就只多了一个字节:

  • 使用循环语句向缓冲区中写入数据时,循环的次数设置错误导致多写入一个字节
  • 字符串操作不合适,比如忽略了字符串末尾的\x00
阅读全文 »