文件上传漏洞?

文件上传漏洞?,第1张

文件上传漏洞是指:由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上传可执行的动态脚本文件。如常见的

头像上传,图片上传,oa办公文件上传,媒体上传,允许用户上传文件的地方如果过滤不严格,恶意用户利用文件上传漏洞,上传有害的可以执行脚本文件到服务器中,可以获取服务器的权限,或进一步危害服务器。

非法用户可以上传的恶意文件控制整个网站,甚至是控制服务器,这个恶意脚本文件,又被称为webshell,上传webshell后门之后可查看服务器信息、目录、执行系统命令等。

文件上传的类型:

1、前端js绕过

在文件上传时,用户选择文件时,或者提交时,有些网站会对前端文件名进行验证,一般检测后缀名,是否为上传的格式。如果上传的格式不对,则d出提示文字。此时数据包并没有提交到服务器,只是在客户端通过js文件进行校验,验证不通过则不会提交到服务器进行处理。

2、修改content-type绕过

有些上传模块,会对http类型头进行检测,如果是图片类型,允许上传文件到服务器,否则返回上传失败,因为服务端是通过content-type判断类型,content-type在客户端可被修改。

3、绕黑名单

上传模块,有时候会写成黑名单限制,在上传文件的时获取后缀名,再把后缀名与程序中黑名单进行检测,如果后缀名在黑名单的列表内,文件将禁止文件上传。

4、htaccess重写解析绕过

上传模块,黑名单过滤了所有的能执行的后缀名,如果允许上传.htaccess。htaccess文件的作用是:可以帮我纤物们实现包括:文件夹密码保护、用户自动重定向、自定义错误运竖郑页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。

在htaccess里写入SetHandler

application/x-httpd-php则可以文件重写成php文件。要htaccess的规则生效,则需要在apache开启rewrite重写模块,因为apache是多数都开启这个模块,所以规则一般都生效。

5、大小写绕过

有的上传模块 后缀名采用黑名单判断,但是没有对后缀名的大小写进行严格判断,导致可以更改后缀大小写可旁颂以被绕过,如PHP、Php、phP、pHp。

文件上传原理

在文件上传的功能处,若服务端脚本语言未对上传的文件进行严格验证和过滤,导致恶意用户上传恶意的脚本文件时,就有可能获取执行服务端命令的能力,这就是文件上传漏洞。

文件上传漏洞高危触发点

相册、头像上传

视频、照片分享

附件上传(论坛发帖、邮箱)

文件管理器

存在文件上传功能的地方都有可能存在文件上传漏洞,比如相册、头像上传,视频、照片分享。论坛发帖和邮箱等可以上传附件的地方也是上传漏洞的高危地带。另外像文件管理器这样的功能也有可能被攻击者所利用值得注意的是,如果移动端也存在类似的 *** 作的话,那么相同的原理,也存在文件上传漏洞念缺的风险。

为了防御文件上传漏洞的产生,需要在服务端做严格的防护,因为浏览器、客户端传回的数据并不可信任。首先是第一道防线,文件类型检测,上传的文件需要经过严格的文件类型检测防止上传的文件是恶意脚本。

上传之后的文件要进行重命名。

如果上传的文件是图片类型,可以选择使用重绘图的方式对图片进行保存,但是这种方式会对服务端性能稍有影响

最后,文件上传的目录不可赋予可执行权限洞悄,可以使仔颤辩用BOS这样的云存储服务,当然最方便的还是使用BOS这样现成的云存储服务

简单上传下载实例(/*....*/为注释):

先假设有一FTP服务器,FTP服务器:qint.ithot.net,用户名:username 密码:user1234。在本地电脑D:盘创建一个文件夹"qint"。将要上传的文件复制到d:\qint里。通过FTP命令将文件从本地上传,从服务器下载的步骤如下:

1.“开始”-“运行”-输入“FTP”

2.open qint.ithot.net /*这一步可以与第一步合并,在“运行”里直接输入"ftp qint.ithot.net"。如果你的FTP服务器不是用的21默认端口,假如端口是昌敏扒2121,那么此步的命令应在后面空格加2121,即“open qint.ithot.net 2121”*/

3.username /*提示你输入用户拿运名*/

4.user1234 /*提示你输入密码,密码不顶础侈飞侬读畴嫂川讥回显,打完密码后回车即可。如果你的密码输入错误,将不会提示你重新输入,这时你要键入“user”命令,将会出现第三步,你可以重新输入用户名和密码。*/

5.dir /*你成功登陆后就可以用dir查看命令查看FTP服务器中的文件及目录,用ls命令只可以查看文件。*/

6.mkdir qint /*在FTP服务器上根目录下建立qint目录。*/

7.cd qint /*进入目录qint,用“cd 你的目录名”可以进入当前目录的下一级目录,这跟DOS一样。*/

8.bin /*采用二进制传输。如果你要上传下载,这一步很重要,不先执行这个命令,上传下载会很慢。*/

9.lcd d:\qint /*定位本地默认文件夹,在前面我事先在D:盘创建的。*/

10.!dir /*查看本地文件夹中的文件及目录*/

11.put i001.jpg /*将当前目录(d:\qint)中的文件i001.jpg上传到FTP服务器默认目录。可以用"mput *.*"将所有文件上传到FTP服务器上。*/

12.get d123.jpg /*将耐昌FTP服务器默认目录中的文件d123.jpg下载到当前目录下(d:\qint)。可以用"mget *.*"将所有文件下载到d:\qint*/

13.delete *.* /*删除目录qint中的所有文件。*/

14.cd .. /*返回至上一级目录,即根目录。返回上一级目录用“cd ..”要注意,中间有空格。返回根目录用“cd \”。*/

15.mrdir qint /*删除目录qint。删除目录,在此目录下不能有文件及目录,不然将无法删除。*/

16.bye /*退出FTP服务器*/

上传下载时特别要注意服务器及本地电脑的当前目录,文件是从哪里到哪里的问题。查看FTP服务器的当前目录命令为pwd,可以用cd命令定位服务器的目录。可以用lcd命令定位本地电脑的目录。以上实例应用到了采用FTP命令行方式上传下载的最常用命令,你还可以用命令“?”查看更多的命令。

你让我看看你的文件


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

原文地址: http://outofmemory.cn/tougao/8217403.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存