这题进去登陆就一个上传。光看文字。得到以下信息
PNG图像。那么后缀名和mime得修改下
并且小于256KB.这个没啥关系
图像像素得小于256px*256px
php中常用getimagesize函数来获取图像宽和高。本地测试下。随手截了一个小图片
输出它的宽高
得到int(24) int(21)
结果发现。上传这个图片。拿不到flag。。为啥。
然后扫描器。没扫到。去看了下github源码
先是进行大小判断。基本没影响。
然后用finfo去判断图片类型。必须是image/png
接着用getimagesize去判断图片大小
并且图片类型不能是PNG????
。首先得过finfo判断。又不能是PNG。一般就条件竞争。或者PHP的特性。差异等
PNG的宽高是由它的文件格式决定的。
假设我把数据全删掉。只包含第一行。getimagesize是否还能读取出来
可以看到。把图片破坏后。只留下一个文件头。getimagesize就读取不到它的文件宽高和类型了
那么就可以绕过getimagesize的判断
而finfo_file照样可以识别出这是个PNG图片
PS:猜测。finfo_file是通过文件头判断文件类型。而getimagesize是通过文件结构。来获取信息。
上传得到flag