这次审计的代码存在这样一个功能点

image.png

很明显的文件上传,但是上传后文件名重新编辑过了,跟踪到move

image.png

这存在文件上传,但因为前端功能已经被删除,所以这里是拿不到文件的具体位置的

继续 跟到buildSaveName

image.png

这里进来后会触发

$savename = date('Ymd') . DS . md5(microtime(true));

这样就可以知道他文件上传的大致位置是/public/uploads/[年月日]/md5(microtime(true)),如此只需要猜测最后的md5

其中的microtime只精确到后四位小数,没有太夸张存在预测可能

image.png

照此,就可以在上传的时候确定当前的时间,定位时间窗口计算出窗口内的所有md5变量,不过数量依旧很大,如果时间窗口定位前后5秒,则会有10000个请求,所以本地测试我稍微缩短了窗口

image.png