在写过的上篇文章【谈高效漏洞挖掘之Fuzz的艺术】中最后说到的黑盒测试与代码审计中的组合利用链Fuzz问题,刚好看到evil7师傅的文章中也提到了类似的组合利用的有关思想,借用师傅"点亮"一词及本人曾经遇到过的一些实例也展开谈一下。
上篇文章最后说到可以组合利用压缩与解压的问题进行getshell。但是若解压的时候对压缩包中的文件内容进行了检测与校验。就不是简单的在压缩包中构造一个php文件了。
如,某插件安装时,上传及解压流程中,在对压缩包校验了包中的文件内容,校验了manifest的配置信息,以及manifest.xml文件且配置信息中的alias名称不能和之前重复才能解压安装成功。那么我们在审计中时就要发现其中的问题。
只要压缩包中存在manifest.xml文件且配置信息中的alias名称不和之前重复即可解压安装成功,因此攻击者可以伪造包含manifest.xml文件的zip包,zip包除了伪造的manifest.xml还包含php后面文件,安装成功后木马即存在自解压的模板目录下,直接getshell。原文可参考代码审计之PHPWind
审计时遇到这样一个业务功能,对应的代码下载文件时虽然有对文件名是否存在目录穿越符号../的检查但是if为真时却未退出结束程序的执行,而是继续执行将文件filename进行了移动到/ist/ist/web/data/hit_ips_pcap下,然后下载传入的/ist/ist/web/data/hit_ips_pcap目录下文件名为传入的filename,该下载不能够跨目录。直接传入payload../../../etc/passwd
并不能下载任意文件读取成功。
但是,由于该下载默认信任了该目录下的文件。细心的我们可以找到切入点。该下载包含两个操作
1)下载前会进行文件移动,移动到指定安全不可访问的目录下
2)默认信任了该目录下的文件,没有校验文件内容
切入点移动的文件可控。那么我们可以发送两个包来进行任意文件读取。
1)移动动想要读取的文件
2)下载读取的该文件名。
第一个包:
第二个包
攻击者就可以任意读取/下载系统上的任意文件。
题中点亮的思想在于将看似没有危害的bug、报错、回显的路径信息组合构造可行的漏洞利用链,这一点不管在黑盒测试还是白盒审计我觉得都是值得深入研究的一点。
注:关于[代码审计中的组合利用链]问题,若想深入理解,也可继续参考evil7作者关于《拿WordPress开刀——点亮代码审计技能树》的译文所谈及到的思想。