站在巨人肩膀上复现CVE-2023-34644
前言
winmt 师傅之前挖到了一个锐捷的未授权 RCE
漏洞,影响了该厂商下的众多路由器、交换机、中继器等设备。winmt 师傅已经发布了 相关的挖掘经历,对仿真的搭建和漏洞分析已经写的比较详细。本篇文章主要是自己对该漏洞调用链进行一个完整的梳理,以及在 winmt 师傅文章中未提到的部分我会进行记录。
这算第二次复现 IOT
漏洞,第一次是很老的 DIR-815
,第二次直接复现的是 winmt 师傅今年挖到的一个思科漏洞 CVE-2023-20073 。年份上跨越不算小,就导致了复现过程中屡屡遇到问题而没什么解决的办法,而网上除了 winmt 师傅本人做了漏洞的分析之外,也没有找到其他资料。这里发自内心的感谢 winmt 师傅给予我提供的指导和帮助,否则可能要走更多的弯路甚至会对很多地方一知半解的就完成了所谓的 “复现” ,写这篇文章的一个重要目的就是想帮助之后复现这个漏洞的师傅提供一些参考,毕竟不是每个人都能遇见一个万能的 winmt QAQ。本文对于 CVE-2023-20073 复现过程做了详尽的记录,其中包括了遇见过的各种坑和解决问题的方法及思路。再次对 winmt 师傅表示感谢!
Cisco RV340
,RV340W
,RV345
和 RV345P
四款型号的路由器中最新固件均存在一个未授权任意文件上传漏洞 (且目前尚未修复),攻击者可以在未授权的情况下将文件上传到 /tmp/upload
目录中,然后利用 upload.cgi
程序中存在的漏洞,最终造成存储型 XSS
攻击。
近期在初步入门工控安全,进行了第一次协议分析,本文将介绍如何对 S7COMM
协议进行从零到一的分析。
网上关于 D-Link DIR-815
路由器漏洞复现的文章还是蛮多的,因此第一次的复现选择了这个软柿子🤔。因为相关文章很多的缘故,所以我尽可能来写一些大多文章没有提到的点。
漏洞描述 :DIR-815 固件中的 Hedwig.cgi 脚本中,在处理 HTTP 头时,如果 Cookie 字段中含 uid= 的值则存在栈溢出漏洞,从而获得路由器远程控制权限
影响版本 :DIR-815/300/600/645等
说下学习 MIPS
汇编基础的思路,作为一个接触新知识面的小白,我首先去查了一下如何编译 MIPS
架构的程序,然后自己写了一个简单的代码,放入 IDA
后开始进行汇编代码的学习,遇见一条指令就学习一条指令,为了观察更细致的内存变化同时还要学习如何用 gdb
来进行 MIPS
架构程序的调试。在这个过程中记录见到的汇编指令和寄存器等等,接着是函数调用约定的学习,参考着网上的文章再结合 gdb
调试基本就能理解透彻。感觉对 MIPS
汇编基础和函数调用约定已经得心应手,就可以做一些 PWN
题以此来稳固打下的基础,最后尝试来手写各种的 shellcode
。希望这个思路能给之后自学者一点借鉴。
今年国赛的华中分区赛一共放了两道 PWN
,一个一解,一个零解。零解的是 LLVM PASS PWN
,这个没有研究过,暂且先复现另一个题目(考察的是 house of muney
)还有一个 AWD
环节的 PWN
(考察的格式化字符串漏洞)
通过 2019STARCTF hackeme
这道题目的学习,了解到了在内核中内存具有任意地址读写的能力后,可以利用的手法。
内核态的 ROP
和用户态的思路和做法是一样的,都是利用 gadget
来不断控制执行流,进行任意的函数调用。不过获取基地址还有搜索 gadget
等一些小细节发生了变化,但思想不变,所以理解起来应该还是很快的
Double Fetch
从漏洞原理上属于条件竞争漏洞,是一种内核态与用户态之间的数据访问竞争。在 Linux 等现代操作系统中,虚拟内存地址通常被划分为内核空间和用户空间。内核空间负责运行内核代码、驱动模块代码等,权限较高。而用户空间运行用户代码,并通过系统调用进入内核完成相关功能。通常情况下,用户空间向内核传递数据时,内核先通过通过
copy_from_user
等拷贝函数将用户数据拷贝至内核空间进行校验及相关处理,但在输入数据较为复杂时,内核可能只引用其指针,而将数据暂时保存在用户空间进行后续处理。此时,该数据存在被其他恶意线程篡改风险,造成内核验证通过数据与实际使用数据不一致,导致内核代码执行异常。一个典型的
Double Fetch
漏洞原理如下图所示,一个用户态线程准备数据并通过系统调用进入内核,该数据在内核中有两次被取用,内核第一次取用数据进行安全检查(如缓冲区大小、指针可用性等),当检查通过后内核第二次取用数据进行实际处理。而在两次取用数据之间,另一个用户态线程可创造条件竞争,对已通过检查的用户态数据进行篡改,在真实使用时造成访问越界或缓冲区溢出,最终导致内核崩溃或权限提升。