66,【6】buuctf web [HarekazeCTF2019]Avatar Uploader 1

打印 上一主题 下一主题

主题 970|帖子 970|积分 2910


进入靶场



习惯性输入admin


还想用桌面上的123.png

发现不行

看看给的源码

  1. <?php
  2. // 关闭错误报告,可能会隐藏一些错误信息,在开发阶段可考虑开启(例如 error_reporting(E_ALL))
  3. error_reporting(0);
  4. // 引入配置文件,可能包含一些常量和配置信息
  5. require_once('config.php');
  6. // 引入工具类文件,可能包含一些常用的工具函数
  7. require_once('lib/util.php');
  8. // 引入会话管理类文件,可能包含安全会话相关的功能
  9. require_once('lib/session.php');
  10. // 创建一个新的 SecureClientSession 对象,使用预定义的 CLIENT_SESSION_ID 和 SECRET_KEY 作为参数
  11. $session = new SecureClientSession(CLIENT_SESSION_ID, SECRET_KEY);
  12. // 检查是否有文件被上传,如果文件不存在或不是通过 HTTP POST 上传的文件,输出错误信息
  13. if (!file_exists($_FILES['file']['tmp_name']) ||!is_uploaded_file($_FILES['file']['tmp_name'])) {
  14.   error('No file was uploaded.');
  15. }
  16. // 检查文件大小,如果文件大小超过 256000 字节,输出错误信息
  17. if ($_FILES['file']['size'] > 256000) {
  18.   error('Uploaded file is too large.');
  19. }
  20. // 检查文件类型
  21. $finfo = finfo_open(FILEINFO_MIME_TYPE);
  22. // 获取文件的 MIME 类型
  23. $type = finfo_file($finfo, $_FILES['file']['tmp_name']);
  24. finfo_close($finfo);
  25. // 如果文件类型不是 image/png,输出错误信息
  26. if (!in_array($type, ['image/png'])) {
  27.   error('Uploaded file is not PNG format.');
  28. }
  29. // 检查文件的宽高
  30. $size = getimagesize($_FILES['file']['tmp_name']);
  31. // 如果文件的宽度或高度大于 256 像素,输出错误信息
  32. if ($size[0] > 256 || $size[1] > 256) {
  33.   error('Uploaded image is too large.');
  34. }
  35. // 如果文件的类型不是 IMAGETYPE_PNG,输出错误信息并显示 FLAG1(可能是用于调试或意外情况)
  36. if ($size[2]!== IMAGETYPE_PNG) {
  37.   // I hope this never happens...
  38.   error('What happened...? OK, the flag for part 1 is: <code>'. getenv('FLAG1'). '</code>');
  39. }
  40. // 生成一个随机的文件名,使用 bin2hex(random_bytes(4)) 生成一个 8 位的十六进制字符串并添加.png 后缀
  41. $filename = bin2hex(random_bytes(4)). '.png';
  42. // 将上传的文件移动到 UPLOAD_DIR 目录下,并使用生成的随机文件名
  43. move_uploaded_file($_FILES['file']['tmp_name'], UPLOAD_DIR. '/'. $filename);
  44. // 在会话中存储文件名
  45. $session->set('avatar', $filename);
  46. // 显示一个成功的消息
  47. flash('info', 'Your avatar has been successfully updated!');
  48. // 重定向到根目录
  49. redirect('/');
复制代码


  • 利用 finfo_open(FILEINFO_MIME_TYPE) 和 finfo_file 函数获取文件的 MIME 类型,并利用 in_array 函数查抄是否为 image/png 类型,确保只允许上传 PNG 图像。
  • if (!file_exists($_FILES['file']['tmp_name']) ||!is_uploaded_file($_FILES['file']['tmp_name'])):查抄文件是否存在且是通过 HTTP POST 上传的文件,防止文件不存在或非法上传。
又能用到010了
只保留文件头就好

提交

flag{f54fa779-9db5-4743-a47a-6b67212736ff}



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

温锦文欧普厨电及净水器总代理

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表