首页 > 其他分享 >moe图床

moe图床

时间:2023-10-03 17:12:14浏览次数:35  
标签:文件 const 图床 moe file php 上传 png

打开链接就文件上传,直接文件上传题目

而且只能上传后缀为png的文件

 

 刚好最近学了文件上传漏洞的各种形式复现,刚好这把就来试试不找源码直接破解

1. 先F12看看有没有客户端检查函数

 发现没有。看来并不是简单的前端检测

 

2. bp抓包改后缀名

 检测出来了

 

 

3. 文件后缀加“.”绕过,失败

 

 

4. Windows与PHP双态叠加绕过,即加.php:.png,还是上传失败

 

 

……

试了很多都失败了……

算了不试了,看看能不能在别的地方有突破吧

继续查看网页原代码

 进行翻译

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8">
 5     <title>moe图床</title>
 6 </head>
 7 <body>
 8     <input type="file" id="fileInput">
 9     <button onclick="uploadFile()">上传</button>
10     <div id="uploadResult"></div>
11     <script>
12         // 上传文件的函数
13         function uploadFile() {
14             // 获取文件输入框和选择的文件
15             const fileInput = document.getElementById('fileInput');
16             const file = fileInput.files[0];
17             
18             // 检查是否选择了文件
19             if (!file) {
20                 alert('请选择一个文件进行上传!');
21                 return;
22             }
23             
24             // 检查文件后缀名是否为png
25             const allowedExtensions = ['png'];
26             const fileExtension = file.name.split('.').pop().toLowerCase();
27             if (!allowedExtensions.includes(fileExtension)) {
28                 alert('只允许上传后缀名为png的文件!');
29                 return;
30             }
31             
32             // 创建一个 FormData 对象,将文件添加到其中
33             const formData = new FormData();
34             formData.append('file', file);
35 
36             // 使用 fetch 发送 POST 请求上传文件
37             fetch('upload.php', {
38                 method: 'POST',
39                 body: formData
40             })
41             .then(response => response.json())
42             .then(result => {
43                 // 处理上传结果
44                 if (result.success) {
45                     const uploadResult = document.getElementById('uploadResult');
46                     const para = document.createElement('p');
47                     para.textContent = ('地址:');
48                     const link = document.createElement('a');
49                     link.textContent = result.file_path;
50                     link.href = result.file_path;
51                     link.target = '_blank';
52                     para.append(link);
53                     uploadResult.appendChild(para);
54 
55                     alert('文件上传成功!');
56                 } else {
57                     alert('文件上传失败:' + result.message);
58                 }
59             })
60             .catch(error => {
61                 console.error('文件上传失败:', error);
62             });
63         }
64     </script>
65 </body>
66 </html>
View Code
获取用户选择的文件。
检查是否选择了文件以及文件后缀名是否为 .png,如果不符合要求,会弹出相应的警告对话框。
创建一个 FormData 对象并将选中的文件添加到其中,以便于之后的上传操作。
使用 fetch 函数发送 POST 请求到 upload.php,将文件数据作为请求体(body)发送。
处理上传结果:当上传成功时,将文件地址显示在页面上,同时弹出成功的提示对话框;当上传失败时,弹出失败的提示对话框,并将错误信息显示在其中。
请注意,这段代码中使用了一个名为 upload.php 的文件来处理文件上传的后台逻辑。在实际使用时,需要编写 upload.php 文件来接收并处理文件上传请求,并返回相应的结果。

 

从里面可以得知有一个upload.php的文件在规范上传的规则,直接获取看看会不会有结果(用GET方式上传也会显示该代码)

 获取成功,直接分析函数

 1 首先定义了变量 $targetDir,该变量指定了上传文件的目标目录,即 uploads/ 目录。注意,这个目录路径是相对于当前脚本文件所在的目录。
 2 定义了数组 $allowedExtensions,包含允许上传的文件扩展名。在该示例中,只允许上传扩展名为 png 的文件。
 3 通过 $_SERVER['REQUEST_METHOD'] 判断是否为 POST 请求,并且判断是否存在一个名为 file 的文件字段。
 4 如果满足上传条件,则获取上传的文件相关信息,包括临时路径 $tmp_path 和文件名 $fileName。
 5 使用 $file['type'] 检查文件类型是否为 'image/png',如果不是,则返回错误消息。
 6 使用 filesize() 函数检查文件大小是否超过 512KB 的限制,如果超过,则返回错误消息。
 7 使用 explode() 函数将文件名 $fileName 拆分为多个部分,并检查第二个部分是否为 'png',如果不是,则返回错误消息。这样做是为了避免伪装成 PNG 文件的恶意文件。
 8 使用 dirname(__FILE__) 获取当前脚本文件所在的目录,并将目标目录和文件名拼接起来,得到上传后的文件路径 $uploadFilePath。
 9 使用 move_uploaded_file() 函数将临时文件移动到目标目录,如果移动成功,则返回成功的 JSON 响应。否则,返回文件上传失败的错误消息。
10 如果不是 POST 请求或未提供文件字段,则使用 highlight_file() 函数将当前脚本文件的源代码展示出来。
11 总而言之,这段代码负责接收通过 POST 请求上传的 PNG 格式图片文件,并进行一系列验证,包括文件类型、文件大小和文件名后缀等,然后将文件移动到指定的目录。最后,根据上传结果返回相应的 JSON 响应。如果不是上传请求,就展示代码本身。

关键判断在这里,这里只判断文件的后缀是否为png,那我们就可以用xxx.png.php的方式来绕过了

 试一下

 上传成功

 

 

连接蚁剑

 连接不了就只能直接访问了

后面发现是文件路径错了

 在根目录找到flag

 

 

标签:文件,const,图床,moe,file,php,上传,png
From: https://www.cnblogs.com/lhqrusht0p/p/17741305.html

相关文章

  • MoeCTF2023 wp--pwn篇
    五、Pwn1.Pwn入门指北CHALLENGE:Pwn入门指北DESCRIPTION:建议:萌新朋友不要看完指北交上flag就扔掉!!Tips:本指北附件在“通知栏”内的“比赛客服群”中,请加群了解更多信息2.test_ncCHALLENGE:test_ncDESCRIPTION:你知道nc是什么吗3.baby_caculatorCHALLENGE:baby_calcul......
  • AI系统论文:Janus(MoE)(continuing)
    tag:AIsystemcategory:系统论文abstructall-to-allcommunication:(expert-centric)让专家位于原地,数据在专家之间进行交换。作者提出了一种”data-centric“的范式:让数据位于原地,在GPU之间移动专家。(因为专家的规模小于数据)。——Janus主要适用于thesizeofexper......
  • 论文阅读:SmartMoE
    tag:AIcategory:系统论文2BackgroundandMotivationMoE:Misture-of-ExpertsnFFN为MoE模型中的专家,多个FFN和一个Gating组成了基本的MoE模型。2.2混合和自动并行化训练密集型深度学习网络的常见的三种并行方式:DataParallelism(DP)每个worker均存储一个完整的参数副本......
  • Typora插入图片上传到图床ImgBB
    注册图床有很多对象存储服务可以作为图床。以imgbb举例(https://imgbb.com/)进入imgbb注册账号并登录。点击关于进入API界面找到并点击“AddAPIkey”复制key。下载和安装PicGo选择PicGo的路径配置PicGo--安装imgbb的插件选择imgbb粘贴APIkey选择配置的图床......
  • 使用Cpolar+ CFImagehost,搭建简洁易用的私人图床
    @[TOC]1.前言图片服务器也称作图床,可以说是互联网存储中最重要的应用之一,不仅网站需要图床提供的外链调取图片,个人或企业也用图床存储各种图片,方便随时访问查看。不过由于图床很不挣钱,各互联网大厂正在逐步关停所属的图床服务器,这也导致用户只能自己想办法,搭建自己的图床服务器。今......
  • 群晖作为图床服务器
    群晖默认是不提供文件的http直链的,如何使用群晖作为图床服务器呢?1、群晖api2、群晖安装docker,在docker安装lsky等图床程序3、群晖安装docker,在docker里安装nginx,nginx开启autoindex列举文件功能 综合对比之下,方案1比较麻烦,方案2太吃性能,群晖硬件不太足够支撑。方案3简单、配......
  • MoeCTF 2023
    0x01text64v1可以由用户操控,直接造成栈溢出。同时程序里存在分开的system函数和"/bin/sh"字符串,所以就是简单的ret2libc1。Exploit为frompwnimport*o=process("./pwn")bin_sh=0x404050system_plt=0x401090pop_rdi=0x4011BEret=0x4012A4o.sendline(b"200")......
  • 使用Cpolar内网穿透与Lightpicture组合将个人电脑改造成能随时上传、下载或访问,并能生
    1.前言现在的手机越来越先进,功能也越来越多,而手机的摄像功能也愈发强大,所拍摄的照片越来越清晰,但也让数码照片的体积暴涨。对于像笔者这样经常拍照的人来说,手机容量经常告警,因此笔者将家里的电脑改造成能随时上传下载和访问的图片服务器。今天,笔者就为大家展示,如何使用Cpolar内网......
  • 无限空间的免费图床!!!
    首先我们来看一下效果一、创建项目1、打开github,Fork项目登录github,搜索代码仓库Telegraph-Image,或者直接打开链接,点击Fork2、创建项目跳转页面,直接点击图中箭头所指就行,等待一会即可这样就好了二、Cloudflare配置登录之后,点击Workers和Pages,出现如下页面......
  • Steam++加速github,会导致github图床上传失败
    PicGo日志报错信息"message":"unabletoverifythefirstcertificate",原因软件:PIcGO图床:github加速器:Steam++(又称:WattToolkit)由于Steam++安全证书问题,会导致unabletoverifythefirstcertificate,无法验证第一证书问题。关闭加速器即可解决......