一、漏洞原理
漏洞来源:count()函数漏洞。
现自定义一个数组 arr[],定义arr[0]=1,arr[3]=2, 此时count(arr)的值为2,则arr[count[arr]]即为arr[2],但是arr[2]未定义,即为一个空值,若使用count()函数的本意是指向arr数组的最后一个元素,此时却指向arr[2],形成数组漏洞。
二、代码审计
我们发现源代码进行了多处防御,设置了Content-Type白名单,需要进行抓包绕过。
并且将不是以数组形式存在的文件名划分为数组,取数组最后一个元素为后缀进行白名单判断。
三、通关操作
1、首先上传 test.php 文件,利用 Burpsuite 进行抓包,发现save_name是利用_POST形式上传的,利用count()函数漏洞手动将 save_name改为数组形式,绕过白名单,并且合法化$image_path路径。
2、放包上传,新标签页中打开,成功执行php代码。
---通关。