网络安全-文件上传漏洞的原理、攻击与防御

目录

介绍

分类

上传-javascript检测

简介

原理

攻击

防御

上传-MIME检测

简介

攻击

 防御

上传-后端文件格式检测

简介

原理

攻击

 防御

上传-文件截断

简介

攻击

解析-Apache文件解析

解析-IIS文件解析

解析-PHP CGI路径解析

防御


介绍

文件上传漏洞是指用户上传了一个可执行的脚本文件(php、jsp、xml、cer等文件),而WEB系统没有进行检测或逻辑做的不够安全。文件上传功能本身没有问题,问题在于上传后如何处理及解释文件。

分类

根据简介,主要分为上传(客户端)、解析(服务端)两大类。

上传-javascript检测

简介

通过js代码,对文件后缀进行判断。

原理

一般使用白名单或黑名单的方式,判断文件后缀,根据后缀决定用户是否上传。

攻击

Firebug插件删除判断函数

使用靶机pikachu做例子,直接通过F12修改。

tupian.php

    echo phpinfo();
?>

网络安全-文件上传漏洞的原理、攻击与防御_第1张图片 js检测到不符合要求

 F12查看代码

网络安全-文件上传漏洞的原理、攻击与防御_第2张图片 checkFileExt

 客户端通过onchange实践的checkFileExt函数进行检测,我们删除掉调用这个函数的部分。

网络安全-文件上传漏洞的原理、攻击与防御_第3张图片 删除后

我们再次上传tupian.php

网络安全-文件上传漏洞的原理、攻击与防御_第4张图片 文件上传成功

可以看路径,我们修改上方的url,进行访问。

网络安全-文件上传漏洞的原理、攻击与防御_第5张图片 代码已运行

可以看到代码已经运行。

中间人攻击-burpsuite拦截

文件名符合规则,使用burpsuite拦截后,修改文件后缀即可。方法类似下方MIME攻击

防御

上传无法防御,可以进行文件重命名。

上传-MIME检测

简介

js的检测基本没有了,开始使用后端代码进行检测,虽然进行MIME检测是使用的后端代码,但是,依然是从客户端获取的,可以从客户端修改,我还是归于上传这一类了。

简单来说,在请求头中Content-Type:type/subtype来表明类型,常见的有

text/plain
text/html
image/jpeg
image/jpg
image/png
audio/mpeg
audio/ogg
audio/*
video/mp4
application/*
application/json
application/javascript
application/ecmascript
application/octet-stream

攻击

中间人攻击-burpsuite拦截

网络安全-文件上传漏洞的原理、攻击与防御_第6张图片 burpsuite拦截
网络安全-文件上传漏洞的原理、攻击与防御_第7张图片 修改Content-Type
网络安全-文件上传漏洞的原理、攻击与防御_第8张图片 Forward

 可以看到发送过去了,后序验证同上,不再重复截图。

 防御

上传无法防御,可以进行文件重命名。

上传-后端文件格式检测

简介

一些后端代码含有一些函数,能够判断文件类型,获取文件的一些信息。以php为例,php的getimagesize函数可以获取图像的一些信息,如果不是图像,那么无法获取信息,就会报错。

原理

如果你学过图像相关的课程,比如信息隐藏这门课,会使用Matlab读取图像,进行信息隐藏,你就会知道图像的一些格式,符合格式的话就是那个类型的文件,一般是头部的一些字节。我们通过将恶意代码前面添加其他类型文件的头部就可以伪造成另一个类型,进而绕过检测。

攻击

我们修改tupian.php为tupian.php.jpg,进行上传。

网络安全-文件上传漏洞的原理、攻击与防御_第9张图片 图片格式检测

 可以看到,图片没有办法上传,虽然后缀对,但是内部是不正确的。

我们使用Linux中的xxd或od命令来查看.PNG或.png图片的信息(博主虽然是在Windows中,但是使用的是cygwin)。

网络安全-文件上传漏洞的原理、攻击与防御_第10张图片 2.PNG
网络安全-文件上传漏洞的原理、攻击与防御_第11张图片 ca.png

可以看到文件前面是一样的。

使用cmd命令 copy /b CA.png + tupian.php tupian.png

生成新图片

目录下会生成新图片tupian.png,而且符合png格式,但是在图片后面是php代码。

网络安全-文件上传漏洞的原理、攻击与防御_第12张图片 上传成功
网络安全-文件上传漏洞的原理、攻击与防御_第13张图片 打开

图片上传成功,但是打开后还是图片。

我们再使用之前的文件包含漏洞就可以了,注意url。

网络安全-文件上传漏洞的原理、攻击与防御_第14张图片 php代码运行成功

 防御

若没有文件包含漏洞,问题不大,否则无法防御。

上传-文件截断

简介

php %00截断,由于00代表结束符,00后面的所有字符都会删除掉,发生在php5.3.4之前版本,php的magic_quotes_gpc为OFF状态。

攻击

网络安全-文件上传漏洞的原理、攻击与防御_第15张图片 php版本调整为5.3.29

 

网络安全-文件上传漏洞的原理、攻击与防御_第16张图片 参数设置

正好被水印挡住了,挡住的部分就是参数magic_quotes_gpc。

解析-Apache文件解析

一个文件可以有多个后缀,如:lady_killer.txt.png.mp3,在Windows中自然是认为这是mp3文件,也就是说最后的后缀生效。但是,Apache却是从右向左读后缀,不认识的跳过继续读,前面的文件就认为是图片,如果没有配置mp3后缀的话。因此,对于

tupian.php.xxx就会认为这是php文件。类型的定义在Apache/conf/mime.types中

解析-IIS文件解析

IIS 6也出现截断攻击,截断字符为";"。由于phpStudy没有这个版本,太老了,不想去实现了,知道下就行了。

解析-PHP CGI路径解析

没找到了2010年的cve,可能是提交的bug吧,就是路径为evil.jpg/1.php时,Nginx会把evil.jpg当做php文件交给php运行。

https://www.laruence.com/2010/05/20/1495.html

防御

1.文件类型判断

后缀白名单,MIME类型判断结合

2.文件重命名

3.文件上传目录设置为不可执行

更多内容查看:网络安全-自学笔记

喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力。

你可能感兴趣的:(网络安全)