zl程序教程

您现在的位置是:首页 >  其他

当前栏目

文件上传漏洞小结(脱水版)

2023-03-20 14:43:20 时间

漏洞简介:

文件上传,顾名思义就是上传文件的功能行为,之所以会被发展为危害严重的漏洞,是程序没有对访客提交的数据进行检验或者过滤不严,可以直接提交修改过的数据绕过扩展名的检验。文件上传漏洞是漏洞中最为简单猖獗的利用形式,一般只要能上传获取地址,可执行文件被解析就可以获取网站或者服务器的权限。

漏洞原理

网站WEB应用都有一些文件上传功能,比如文档、图片、头像、视频上传,当上传功能的实现代码没有严格校验上传文件的后缀和文件类型时,就可以上传任意文件甚至是可执行文件后门。

产生原因:

  • 服务器配置不当
  • 开源编辑器的上传漏洞(eweb,fck,ckfinder等)
  • 本地文件上传限制被绕过
  • 过滤不严或被绕过
  • 文件解析漏洞导致文件执行
  • 文件路径截断

常见上传点

  • 上传头像
  • 上传相册
  • 上传附件
  • 添加文章图片
  • 前台留言资料上传
  • 编辑器文件上传
  • 文件管理处文件上传
  • 前台用户发表文章处文件上传

漏洞危害

恶意文件传递给解释器去执行,之后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理,服务器命令执行等恶意操作。根据网站使用及可解析的程序脚本不同,可以上传的恶意脚本可以是PHP、ASP、JSP、ASPX文件等。直接上传后门建立连接控制网站,可以得到web权限(网站,服务器);

思路:

凡是有上传的地方均可进行安全测试; 注意上传文件后的位置搜集

常见上传漏洞类型

1.文件上传校验

  • - [1、客户端校验(javascript校验)](#1javascript_2)- [2、服务器端校验(Content-Type检验)](#2ContentType_12)- [3、服务端校验(黑名单)](#3_25)- [4、服务端校验:%00截断(0x00),也就是空字符](#4000x00_48)- [5、服务端校验(白名单)](#5_66)- [6、服务端校验(文件内容头校验)](#6_72)- [7、竞争上传](#7_80)- [8、可以参考我写的upload-labs通关wp](#8uploadlabswp_86) #### 1、客户端校验(javascript校验)

(1)判断方法:

点击上传会会直接显示是否可以上传,并且burp无法抓到POST的包

(2)绕过方法:

① 禁用JS

② F12修改

③ 抓包改包(上传允许上传的后缀,然后修改包)

2、服务器端校验(Content-Type检验)

注:就是判断MIME类型

(1)判断方法:

上传文件时,提示该后缀无法上传,且burp可以抓到POST包

(2)绕过方法:

①上传不允许的后缀文件时,抓包修改MIME类型(如果文件名可解析则不需用改,不能解析,则需要改)

②上传允许的后缀文件时,抓包后修改为可解析的文件名

③常见的MIMEI类型

注:上传后的MIME类型是根据你上传时的文件名后缀决定的

3、服务端校验(黑名单)

绕过方法:

①大小写绕过

②上传黑名单中没有的,但是能够被php解析的后缀,例如可以尝试上传php2/php3/php4/php5/phpt/phtml/phps后缀进行绕过

③上传.htaccess文件

文件内容例1:SetHandler application/x-httpd-php,这行配置表示将所有后缀名都解析为php

文件内容例2:AddType application/x-httpd-php .jpg,指定后缀名解析为php

文件内容例3:指定以php解析的文件
<FilesMatch "xx.gif">
SetHandler application/x-httpd-php
</FilesMatch>

注:

(1)能解析的配置文件在httpd-php.conf

(2)利用.htaccess前提条件:

  • httpd.conf中要AllowOverride All,AllowOverride None不行
  • 需要加载mod_rewrite模块,LoadModule rewrite_module modules/mod_rewrite.so

4、服务端校验:%00截断(0x00),也就是空字符

(1)截断条件:

  • php版本必须小于5.3.4php.ini中的magic_quotes_gpc设置为Off

(2)%00(0x00)截断原理:在有些函数执行时,会把这个字符(%00或0x00)当做结束符

注:GET请求使用%00,POST请求使用0x00

源码可参考如下:

①上传允许上传的后缀

②在目录后面添加截断

(3)实际类似于如下所示

</li>

5、服务端校验(白名单)

(1)apache解析漏洞

6、服务端校验(文件内容头校验)

例如:根据getimagesize()函数的返回值判断目标文件

绕过方法:在恶意脚本的头部加上允许上传文件的头标识

最常使用:GIF89a

7、竞争上传

原理:后端代码检测上传后的文件是否合法,不合法就删除

利用:尽管不合法的文件会被删除,但它还是存在过服务器中,只是存在的时间很短,所以我们通过竞争上传(多线程),达到上传的速度比它服务器删除的速度快即可