抓取和分析西门子S7COMM协议
近期在初步入门工控安全,进行了第一次协议分析,本文将介绍如何对 S7COMM
协议进行从零到一的分析。
近期在初步入门工控安全,进行了第一次协议分析,本文将介绍如何对 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
漏洞原理如下图所示,一个用户态线程准备数据并通过系统调用进入内核,该数据在内核中有两次被取用,内核第一次取用数据进行安全检查(如缓冲区大小、指针可用性等),当检查通过后内核第二次取用数据进行实际处理。而在两次取用数据之间,另一个用户态线程可创造条件竞争,对已通过检查的用户态数据进行篡改,在真实使用时造成访问越界或缓冲区溢出,最终导致内核崩溃或权限提升。
终于来到了关于内核的学习,目前打算浅尝一下内核的基础知识和漏洞。之后每个学习的新漏洞都单独写一篇文章,每篇学到的新的前置知识都放到对应的文章中吧,暂时先不做汇总。
前一段 VNCTF 2023
正好有一道非常入门 qemu
逃逸的题目,正好以此为契机进行 qemu
逃逸的入门学习,在这部分的学习中,要感谢 winmt 和 roderick 师傅解答我的一些困惑。
QEMU
是纯软件实现的虚拟化模拟器,可以模拟多种不同的计算机系统和硬件设备。虽然 QEMU
可以模拟出硬件或虚拟环境,但它本质上只是一个程序,所谓 qemu
逃逸是指攻击者利用 QEMU
实现的有漏洞的 PCI
设备来获取主机的权限。从虚拟机中 “逃出来”,其利用方式和平常用户程序执行 system
函数是一样的,只不过平常 PWN
题的触发方式是通过用户的输入进行触发,而 QEMU
虚拟机的设备漏洞通过运行在虚拟机上的用户程序对设备的 IO
交互来间接触发。