0


文件上传漏洞

简介

主要简单介绍下文件上传和文件下载的一些漏洞,
及个人实验过程以及学习心得
学习链接:Web渗透技术零基础入门
学习链接:信息系统安全与对抗实践第四单元——文件上传漏洞


文章目录


一、文件下载漏洞

用户发起下载请求,网站向服务器请求资源,此时会带有请求资源所在的地址。网站收到请求后,就会根据地址执行下载操作。
如果后台不对收到的地址进行安全检测,而是直接下载。这个地址就可以被攻击者利用。例如下载一些敏感文件等。

这里用pikachu简单地演示一下

在这里插入图片描述
D盘下有一个名为aa.txt的文件,我们首先需要通过目录遍历方法到达该路径。这里我们使用最简单的方法。

方法:目录遍历

在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再执行其对应的文件。
在这个过程中,如果后台没有对前端传进来的值进行严格的安全考虑,则攻击者可能会通过“…/”这样的手段让后台打开或者执行一些其他的文件。 从而导致后台服务器上其他目录的文件结果被遍历出来,形成目录遍历漏洞。

在这里插入图片描述
但是经过测试发现,D盘的文件访问不了
在这里插入图片描述
而C盘下的文件可以任意访问
在这里插入图片描述
我猜测可能和源代码有关,导致通过目录遍历这个方法我们只能访问C盘下的文件
在这里插入图片描述

知道目录遍历这个方法后,我们开始利用文件下载漏洞下载我们希望得到的东西

随便点击一个名字
在这里插入图片描述
使用burpsite抓包
在这里插入图片描述
当前我们要下载的图片是kb.png,现在我们做一下修改。在已知的情况下,我们知道这张图片所属目录下还有一张名为ai.png的图片。
在这里插入图片描述
下载的是ai.png这张图片
在这里插入图片描述
搞清楚原理后,我们可以通过目录遍历下载我们想要的文件
在这里插入图片描述
在这里插入图片描述
看来根目录是D盘
在这里插入图片描述
放包。关闭拦截。
在这里插入图片描述
网页开始下载我们指定的文件
在这里插入图片描述
查看
在这里插入图片描述
在这里插入图片描述

防范措施:
1.对传入的文件名做严格的过滤和限制
2.对文件下载的目录进行严格的限定

二、文件上传漏洞

2.1 文件上传漏洞原理及绕过

什么是文件上传漏洞?

现代互联网的web应用程序中,文件上传是一种常见的要求,因为它有助于提高业务效率。现在很多社交网络的Web应用程序中都有文件上传功能。
但是,如果应用程序对用户的上传文件没有控制或者存在缺陷,攻击者就可以利用应用上传功能存在的缺陷,上传木马和病毒等有危害的文件到服务器,进而控制服务器。

  • 所以,造成文件上传漏洞的主要原因是:应用存在上传功能,但上传的文件没有经过严格的合法性检验或者检验函数存在缺陷,导致可以上传木马文件到服务器上。
  • 文件上传漏洞危害极大,因为可以直接上传恶意代码到服务器上,可能会造成服务器的网页篡改、网站被挂木马、服务器被远程控制和被安装后门等严重后果。

文件上传漏洞原理?

  • 它主要是通过前端JS绕过等几种方式进行恶意代码上传。在网站运营过程中,不可避免地对网站的某些页面或者内容进行更新,这个时候就需要使用到网站的文件上传功能。如果不对上传的文件进行限制或者限制被绕过,该功能就可能会被利用上传可执行文件、脚本到服务器上,进而导致服务器进一步沦陷
  • 前端JS:JavaScript简称JS,是一种主要应用在前端开发过程中的编程语言。前端JS绕过可以简单理解为,绕过JS对用户的输入的检测

文件上传漏洞测试流程

在这里插入图片描述

测试

切换到pikachu 客户端check界面

在这里插入图片描述
随便上传一个php文件
在这里插入图片描述
查看源码
在这里插入图片描述
在这里插入图片描述

burpsite开启拦截,然后文件上传,上传木马文件。删除onchane。点击文开始上传。然后关闭拦截。
在这里插入图片描述
这里显示了保存的路径,实际情况下,我们需要自己去找文件保存的路径。
在这里插入图片描述
这是木马文件的内容
在这里插入图片描述
执行木马文件
在这里插入图片描述
在这里插入图片描述

2.2 服务端验证绕过

2.2.1 MIME

在这里插入图片描述

$_FILES()

通过使用PHP的全局数组$_FILES,你可以从客户计算机向远程服务器上传文件。
第一个参数是表单的input name,第二个下标可以是"name",“type”,“size”,"temp_name"或"error"等。
例如

$_FILES['file']['name']    :被上传文件的名称
$_FILES['file']['type']    :被上传文件的类型
$_FILES['file']['size']    :被上传文件的大小,单位是字节
$_FILES['file']['tmp_name']    :存储在服务器上文件的临时副本的名称
$_FILES['file']['error']    :由文件上传导致的代码

示例

在pikachu平台上有一个MIME type的案例
在这里插入图片描述
不能上传php文件
在这里插入图片描述
部分源码

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

我们上传一张正常的jpg图片,由于图片格式刚好符合$mime中的值,所以能够上传成功。文件的类型在http头部显示为
在这里插入图片描述
如果我们上传php文件
在这里插入图片描述
因为content-type不符合类型,所以无法上传
在这里插入图片描述
修改content-type类型
在这里插入图片描述
上传成功!
在这里插入图片描述
测试
在这里插入图片描述

2.2.2 getimagesize()

Getimagesize()返回结果中有文件大小和类型,如果用这个函数来获取类型,进而判断是否是图片的话,会存在问题
不同图片的二进制格式头部和尾部都不一样,例如,jpeg文件以二进制形式打开,其首部是FF D8,结尾为FF D9
在这里插入图片描述
换一张jpeg图片
在这里插入图片描述

PNG图片的首部则是:89 50 4E 47
在这里插入图片描述

这里使用的查看器是010 Editor

制作图片木马
在这里插入图片描述
现在桌面有一张111.jpg图片和一个1.php木马文件
现在使用copy命令,将它们合成为11.jpg
binary形式和ascii形式
在这里插入图片描述
在这里插入图片描述
这张图片既包含了原jpg图片的二进制数据,也包含了木马文件的数据
在这里插入图片描述

上传成功(因为图片太大了,有限制。我换了张小的。方法和上面一样)
在这里插入图片描述

虽然上传成功了,但这段代码实际上不会被执行
在这里插入图片描述

这里我们需要利用文件包含漏洞

后台使用包含函数include()处理文件中的代码时,如果发生错误,也会继续往下执行。也就是说,虽然前面的二进制代码无法执行,但是最后的php代码是可以被执行的

在这里插入图片描述

这是路径:
unsafeupload/uploads/2022/05/13/929413627e307ad9d8a965910378.png

我们进入文件包含漏洞界面
在这里插入图片描述
修改filename的值,进行目录遍历。由于已经知道文件路径,这里我们向上返回两层,然后定位响应的路径

filename=…/…/unsafeupload/uploads/2022/05/13/929413627e307ad9d8a965910378.png
在这里插入图片描述
这是最简单的php代码,我们还可以上传更加复杂的木马(这里就不演示了)
在这里插入图片描述

2.3 文件上传漏洞的防范

  • 不要在前端使用JS实施上传限制策略
  • 通过服务端对上传文件进行限制:
  1. 进行多条件组合检查:比如文件的大小,路径,扩展名,文 件类型,文件完整性等
  2. 对上传的文件在服务器上存储时进行重命名(制定合理的命名规则)
  3. 对服务端上传文件的目录进行权限控制(比如只读),限制执行权限带来的危害
标签: 安全 web安全 前端

本文转载自: https://blog.csdn.net/qq_50673174/article/details/124747918
版权归原作者 三月樱 所有, 如有侵权,请联系我们删除。

“文件上传漏洞”的评论:

还没有评论