披着狼皮的羊——寻找惠普多款打印机中的RCE漏洞(12)
2023-06-03 来源:旧番剧
进一步调查在打印机调试日志文件中发现了以下内容:
很明显,当ZIP文件被替换时,还有额外的CRC校验和被损坏。经过调查,包括编写自定义python脚本以识别文件中的CRC-32校验和后,ThinPrint BDL文件中推导出了以下字段:
0x14-0x17 = CRC32 of 0x929 to 0x938 (IPKG header)
0x931-0x934 = Length of IPKG structure
0x94d-0x950 = CRC32 of 0xd76 to 0xe89 (ZIP header)
0x929-0x92a = Distance of IPKG structure from the start of the BDL file
0xe76-0xe77 = Distance of ZIP from IPKG header
0xe7e-0xe81 = Length of ZIP file
0xe86-0xe89 = CRC32 of 0xe8b-EOF (ZIP file binary)
有以上知识还是不够的,当BDL文件上传到打印机时,更新上面列出的所有校验和、长度,仍然导致某种校验和失败。
在这里我们决定采取替代路径,理论上可以创建一个和原始ZIP文件同样长度和CRC-32校验和的ZIP文件,如果创建完成,就不需要更新BDL文件中的任何字段!
我们用Python编写了一个自定义工具来完成这项工作,放在我们Github的知识库(https://github.com/foxglovesec/HPwn)中。这个工具允许修改原始BDL文件,通过替换一个相同长度和CRC-32校验和但任意不同内容的ZIP文件。这个工具有点破解,可能只适用于ThinPrint BDL。
以这种方式修改的BDL文件上传到了打印机并确认可用,但是还没对代码进行恶意更改。当我们试图替换任何ZIP中的DLL文件时,我们得到了DLL签名验证错误。