不安全的文件上传漏洞概述
文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。

所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:
1.验证文件类型、后缀名、大小;
2.验证文件的上传方式;
3.对文件进行一定复杂的重命名;
4.不要暴露文件上传后的路径;
5.等等...

文件上传漏洞测试流程

1.对文件上传的地方按照要求上传文件,查看返回结果(路径、提示等)

2.尝试上传不同类型的“恶意”文件,比如1.php,分析结果。

3.查看html源码,是否通过js在前端做了限制,如果有的话可以绕过

4.尝试使用不同方式进行绕过:黑白名单绕过/MIME类型绕过/目录0x00截断绕过等

5.猜测或者结合其他漏洞(比如敏感信息泄露等)得到木马路径,连接测试。

client check

这里可以观察源码,是通过js判断是否上传的文件为png,jpg,gif的类型

如果不是会进行弹窗提示。操作完全是通过前端js限制的,所以就很容易绕过

可以直接F12将onchange调用的函数删掉,上传.php文件

比如文件里用 <?php @eval($_POST['cmd']); ?>经典的一句话木马配合菜刀就可以

拿到webshell。

因为我们最终还要访问这个文件,所以一定要知道上传文件所保存的路径,

如果前端没有显示,就需要我们自己去判断,进而通过上传的木马文件拿到webshell

服务端验证绕过之MIME

什么是MIME?

MIME(Multipurpose Internet Mail Extensions)多用途互连网右键扩展类型

当一个浏览器对一个文件进行识别的时候,他会给文件定义一个类型,放在

http的头部的content-type里面,比如上传图片,就会自动识别是jpg或者png等

php中$_FILES()函数

 这里的源码就是利用$_FILES()函数获取前端http头部传来的content-type

用来验证是否与mime中的格式一致,因为前端的content-type是用户可以控制的

所以很危险。

上传一个图片和.php文件抓包看一下,图片格式的成功了,而php的没有。

虽然我的图片格式的文件只是改了扩展名的php文件,但是后台没有做过滤,所以

也会成功。

可以看到成功的这里MME类型是jpeg

发送到repeater,把php文件的MIME类型改为 image/jpeg即可绕过

服务端绕过之getimagesize()

这个函数返回结果中有文件大小和文件类型,如果用这个函数来获取类型,从而判断是否是

图片的话会存在问题,因为图片头可以被伪造。

比如png图片固定字符串为 8950 4e47 (可用xxd命令在Linux下查看图片格式)

图片木马制作:

1.直接伪造头部GIF89A

2.在cmd中:copy /b test.png + muma.php cccc.png 将代码插入到图片文件里面

3.使用GIMP(开源的图片修改软件),通过增加备注,写入执行命令

其实第二种方法也可以记事本打开图片将代码直接粘贴在最后面

之后要利用文件包含解析出图片格式文件中的php代码

复制文件路径,然后在文件包含模块中让后台识别这个路径并处理

../../../../unsafeupload/uploads/2020/04/01/6336195e846dc76f7b1937151279.png

之后连接中国菜刀即可获得webshell

文件上传漏洞防范措施

1.不要在前端JS上做限制,不靠谱

2.进行多条件组合查询:文件类型,大小,扩展名

3.对上传的文件在服务器上存储时进行重命名

4.对上传上来的文件进行权限控制,比如只读,至少不能去执行

pikachu Unsafe Fileupload的更多相关文章

  1. Unsafe Fileupload - Pikachu

    概述: 文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像.上传附件等等.当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型.后缀名.大小等等,然后将其按照设计 ...

  2. pikachu Unsafe Filedownload 不安全的文件下载

    不安全的文件下载概述文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件 ...

  3. Unsafe Filedownload - Pikachu

    概述: 文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后会开始执行下载代码,将该文件名对应的文件r ...

  4. Pikachu-File Inclusion, Unsafe file download & Unsafe file upload

    Pikachu-File Inclusion, Unsafe file download & Unsafe file upload 文件包含漏洞 File Inclusion(文件包含漏洞)概 ...

  5. Pikachu漏洞练习平台实验——SQL注入(四)

    1.概述 1.1发生原因 SQL注入漏洞,主要是开发人员在构建代码时,没有对输入边界进行安全考虑,导致攻击者可以通过合法的输入点提交一些精心构造的语句,从而欺骗后台数据库对其进行执行,导致数据库信息泄 ...

  6. 任意文件下载(pikachu)

    任意文件下载漏洞 很多网站都会提供文件下载功能,即用户可以通过点击下载链接,下载到链接所对应的文件. 但是,如果文件下载功能设计不当,则可能导致攻击者可以通过构造文件路径,从而获取到后台服务器上的其他 ...

  7. .JavaWeb文件上传和FileUpload组件使用

    .JavaWeb文件上传 1.自定义上传 文件上传时的表单设计要符合文件提交的方式: 1.提交方式:post 2.表单中有文件上传的表单项:<input type="file" ...

  8. unsafe

    今天无意中发现C#这种完全面向对象的高级语言中也可以用不安全的指针类型,即要用到unsafe关键字.在公共语言运行库 (CLR) 中,不安全代码是指无法验证的代码.C# 中的不安全代码不一定是危险的, ...

  9. go-使用 unsafe 修改 struct 中的 field 的值

    以下是方法,不要纠结原理,等东西积累多了,你才有能力纠结原理: 首先,你需要有一个这样的函数,这是在 nsq 的源码里直接抄过来的: func unsafeValueOf(val reflect.Va ...

随机推荐

  1. php mkdir 创建多级目录以及修改权限

    mkdir() 用法:mkdir($path,0777,true); 第一个参数:必须,代表要创建的多级目录的路径:第二个参数:设定目录的权限,默认是 0777,意味着最大可能的访问权:注意:mode ...

  2. PHP经典算法之背包问题

    问题:假设有一个背包的负重最多可达8公斤,而希望在背包中装入负重范围内可得之总价物品,假设是水果好了,水果的编号.单价与重量如下所示: 1 栗子 4KG $4500 2 苹果 5KG $5700 3 ...

  3. 如何使用Linux lsblk命令列出块设备信息

    译至:http://linoxide.com/linux-command/linux-lsblk-command/ lsblk命令(列出块设备)用于列出所有可用的块设备的信息,但是, 它并没有列出有关 ...

  4. kong的管理UI选择-konga

    目录 npm方式安装 1. 准备依赖环境 2. 安装konga 3. 配置 4. 环境变量(more) 5. 数据库 配置 初始化/迁移 6. 运行 Docker方式安装 关于Kong-Dashboa ...

  5. FreeRTOS-00-基础知识+任务创建删除

    1 说明 本文仅作为学习FreeRTOS的记录文档,作为初学者肯定很多理解不对甚至错误的地方,望网友指正. 1.1 简介 FreeRTOS是一个RTOS(实时操作系统)系统,支持抢占式.合作式和时间片 ...

  6. ZSH主题

    All the current themes can be found in the themes/ directory in the oh-my-zsh distribution. See list ...

  7. CF1458D Flip and Reverse[题解]

    Flip and Reverse 题目大意 给定一个 \(01\) 字符串,有机会进行若干次操作,对于每一次操作: 选择该字符串的子串,要求是该子串内包含数量相同的 \(0\) , \(1\) 字符. ...

  8. Linux常用基础命令(二)

    Linux常用基础命令 一.-ls--列表显示目录内容 二.-alias--设置别名 三.-du--统计目录及文件空间占用情况 四.-mkdir--创建新目录 五.-touch--创建空文件 六.-l ...

  9. 关于 IPv6 国家有大动作啦!快来瞅瞅行动计划都说了什么~

    随着进入三伏天开始,杭州就像突然被丢上了炭火炉,没有空调的高温厕所,彻底断绝了二狗子带薪摸鱼的快乐.深感绝望的二狗子只能痛苦地把自己的摸鱼地点改成了空调大开的零食角."哎,真的很不喜欢零食角 ...

  10. C语言:基本数据类型及表示范围

    类型名称 标识符 printf()标志 占据 范围 无符号 unsigned 范围 类型名称 类型标识符    printf标志   占字节数           表示范围              ...