data:image/jpeg;base64,CropperUpload小心了

图片上传时有很多会使用base64编码在本地完成,有可能会造成上传任意文件漏洞哦;不多说给出几个参数一看就懂了;

https://127.0.0.1/index.php?g=user&m=center&a=upload_pic 这是一个上传地址,ui使用的是 CropperUpload993720170111

可能有朋友使用过这个上传插件;

在源代码 index.html

133行

//生成base64图片数据
						var dataUrl = canvas.toDataURL("image/jpeg");
						var newImg = document.createElement("img");
						newImg.src = dataUrl;
						imagesAjax(dataUrl)
HTMLCanvasElement.toDataURL() 方法返回一个包含图片展示的 data URI 。可以使用 type 参数其类型,默认为 PNG 格式。图片的分辨率为96dpi。

如果画布的高度或宽度是0,那么会返回字符串“data:,”。
如果传入的类型非“image/png”,但是返回的值以“data:image/png”开头,那么该传入的类型是不支持的。
Chrome支持“image/webp”类型。
语法
canvas.toDataURL(type, encoderOptions);
参数

type 可选
图片格式,默认为 image/png
encoderOptions 可选
在指定图片格式为 image/jpeg 或 image/webp的情况下,可以从 0 到 1 的区间内选择图片的质量。如果超出取值范围,将会使用默认值 0.92。其他参数会被忽略。
var dataUrl = canvas.toDataURL("image/jpeg");

抓包上传之后得到这样的请求

img=data:image/jpeg;base64,PD9waHAgZWNobyBwaHBpbmZvKCk7Pz4%3D…

data:image/jpeg修改成data:image/php 发送出去之后上传文件就变成了XXXX.php

这个时候我们只需要把代码以base64编码之后添加在base64,后面就可以生成我们想要执行的代码

编码之后上传

有些时候php文件会被转换成url编码。这样就需要你先把代码转成base64然后转成url之后就可以了;

 

解决方法:后台严格设置过滤文件内容编码,权限最小化设置上传目录不允许执行文件;

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注