披着狼皮的羊——寻找惠普多款打印机中的RCE漏洞(15)
2023-06-03 来源:旧番剧
快速审查这段代码,我们怀疑这里可能会出现一些问题。在第11行,从DLL文件的第60个字节读取了一个数,在第14行和第15行,从DLL文件读取了另外两个数字读入变量int32_2和int32_3。在第19-22行,这两个新变量用于指定一部分加载到名为numArray2的数组中的DLL文件。从第22行开始,其余代码在numArray2上运行。
仔细检查上述过程,我们怀疑可能可以这种方式操作读入int32_2和int32_3的数字,因为验证签名的DLL文件部分可以与打印机上运行的实际可执行代码分离。
七、构建恶意解决方案
打破惠普对DLL文件的数字签名验证
为了验证上述怀疑,我们用C#重新实现了打印机上执行签名验证的算法的一个接近完全副本。然后,该程序在Visual Studio调试器中运行,并使用由惠普签名的有效DLL文件作为输入。在上面“ValidatePeSignature”的代码示例(下面新程序中的第65行)中,执行在第22行中断了,这是从DLL文件中读取numArray2的位置:
请注意,这时我们可以在上面的调试窗口中看到int32_1,int32_2,int32_3和numArray2的值,numArray2的内容被转储到磁盘上的文件“Foo.txt”中:
我们的计划不需要了解这些内容的实际含义,因此没有分析。
接下来,在HxD十六进制编辑器中复制粘贴,将文件“Foo.txt”追加到名为“HPwn.dll”的自定义未签名的.NET DLL的末尾,红色字体的字节是新加的: