文件上传漏洞

文件上传漏洞,第1张

简介

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


文章目录 简介一、文件下载漏洞二、文件上传漏洞2.1 文件上传漏洞原理及绕过2.2 服务端验证绕过2.2.1 MIME2.2.2 getimagesize() 2.3 文件上传漏洞的防范


一、文件下载漏洞

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

这里用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实施上传限制策略通过服务端对上传文件进行限制: 进行多条件组合检查:比如文件的大小,路径,扩展名,文 件类型,文件完整性等对上传的文件在服务器上存储时进行重命名(制定合理的命名规则)对服务端上传文件的目录进行权限控制(比如只读),限制执行权限带来的危害

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/926016.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存