BUUCTF--[HarekazeCTF2019]Avatar Uploader 1

 name随便输一个,进入之后看到是让上传头像,这个应该是一个文件上传漏洞

BUUCTF--[HarekazeCTF2019]Avatar Uploader 1_第1张图片

接下来分析所给的源码 

 256000) {
  error('Uploaded file is too large.');
}

// check file type
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$type = finfo_file($finfo, $_FILES['file']['tmp_name']);
finfo_close($finfo);
if (!in_array($type, ['image/png'])) {
  error('Uploaded file is not PNG format.');
}

// check file width/height
$size = getimagesize($_FILES['file']['tmp_name']);
if ($size[0] > 256 || $size[1] > 256) {
  error('Uploaded image is too large.');
}
if ($size[2] !== IMAGETYPE_PNG) {
  // I hope this never happens...
  error('What happened...? OK, the flag for part 1 is: ' . getenv('FLAG1') . '');
}

// ok
$filename = bin2hex(random_bytes(4)) . '.png';
move_uploaded_file($_FILES['file']['tmp_name'], UPLOAD_DIR . '/' . $filename);

$session->set('avatar', $filename);
flash('info', 'Your avatar has been successfully updated!');
redirect('/');

在检查文件类型时,finfo_file()函数检测上传图片的类型是否是image/png
在检查文件长宽时,getimagesize() 函数用于获取图像大小及相关信息,成功将返回个数组

根据源码可以知道,需要满足文件头为image/png,但是结构又不能为png

所以将一张图片十六进制的第一行保留,把剩下的内容删除即可满足上述条件

BUUCTF--[HarekazeCTF2019]Avatar Uploader 1_第2张图片

 上传成功后即可成功获得flag

BUUCTF--[HarekazeCTF2019]Avatar Uploader 1_第3张图片

你可能感兴趣的:(BUUCTF--[HarekazeCTF2019]Avatar Uploader 1)