关于任意文件下载及上传漏洞

您所在的位置:网站首页 java任意文件下载漏洞修复方法 关于任意文件下载及上传漏洞

关于任意文件下载及上传漏洞

2024-07-15 17:56:43| 来源: 网络整理| 查看: 265

目录任意文件读取下载1、原理2、利用方式3、漏洞修复4、实例任意文件上传1、原理2、分类3、基本思路4、基本绕过方式1、客户端检测绕过(javascript 检测)2、服务端验证绕过(MIME 类型检测)3、代码注入绕过--getimagesize()4、路径/扩展名绕过5、安全防范6、图片二次渲染7、绕过方法总结补充:解析漏洞(上传的文件通过解析漏洞达到执行的目的)1、IIS5.x-6.x2、apache解析漏洞3、Nginx解析漏洞4、IIS7.5解析漏洞5、Ewebeditor漏洞6、fckeditor漏洞

任意文件读取下载 1、原理

一些网站由于业务需求,往往需要提供文件查看或文件下载功能,但若对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载任意敏感文件,这就是文件查看与下载漏洞。

2、利用方式

一般链接形式:

download.php?path= down.php?file= data.php?file=

或者包含参数:

&Src= &Inputfile= &Filepath= &Path= &Data=

当遇到一个任意文件下载时,我们的一般利用思路:

(1)下载常规的配置文件,例如: ssh,weblogic,ftp,mysql等相关配置

(2)下载各种.log文件,从中寻找一些后台地址,文件上传点之类的地方,如果运气好的话会获得一些前辈们的后门。

(3)下载web业务文件进行白盒审计,利用漏洞进一步攻入服务器。 尝试读取/root/.bash_history看自己是否具有root权限。如果没有的话。我们只能按部就班的利用../来回跳转读取一些.ssh下的配置信息文件,读取mysql下的.bash_history文件。来查看是否记录了一些可以利用的相关信息。然后逐个下载我们需要审计的代码文件,但是下载的时候变得很繁琐,我们只能尝试去猜解目录,然后下载一些中间件的记录日志进行分析。

如果我们遇到的是java+oracle环境

可以先下载/WEB-INF/classes/applicationContext.xml 文件,这里面记载的是web服务器的相应配置,然后下载/WEB-INF/classes/xxx/xxx/ccc.class对文件进行反编译,然后搜索文件中的upload关键字看是否存在一些api接口,如果存在的话我们可以本地构造上传页面用api接口将我们的文件传输进服务器

如果具有root权限

在linux中有这样一个命令 locate 是用来查找文件或目录的,它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db。这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次。当我们不知道路径是什么的情况下,这个可以说是一个核武器了,我们利用任意文件下载漏洞mlocate.db文件下载下来,利用locate命令将数据输出成文件,这里面包含了全部的文件路径信息。

locate 读取方法: locate mlocate.db admin //可以将mlocate.db中包含admin文件名的内容全部输出来

(4)常见利用文件 /root/.ssh/authorized_keys /root/.ssh/id_rsa /root/.ssh/id_ras.keystore /root/.ssh/known_hosts //记录每个访问计算机用户的公钥 /etc/passwd /etc/shadow /etc/my.cnf //mysql配置文件 /etc/httpd/conf/httpd.conf //apache配置文件 /root/.bash_history //用户历史命令记录文件 /root/.mysql_history //mysql历史命令记录文件 /proc/mounts //记录系统挂载设备 /porc/config.gz //内核配置文件 /var/lib/mlocate/mlocate.db //全文件路径 /porc/self/cmdline //当前进程的cmdline参数

3、漏洞修复

(1)过滤".",使用户在url中不能回溯上级目录

(2)正则严格判断用户输入参数的格式

(3)php.ini配置open_basedir限定文件访问范围

(4)设置白名单,即只能下载/访问某个目录下的文件,权限给到最低

4、实例 http://192.168.18.54:78/pikachu/vul/unsafedownload/execdownload.php?filename=../down_nba.php http://192.168.18.54:78/pikachu/vul/unsafedownload/execdownload.php?filename=../../../../../admin.php http://192.168.18.54:78/pikachu/vul/unsafedownload/execdownload.php?filename=..%2F..%2F..%2F..%2F..%2Fadmin.php

本来是图片,现在下载源代码了。

注:Linux的../打的很多也最多只跳转到网站根目录下,不会出现问题,但是Windows下不行,。 一般来说,都是程序员没有指定下载文件变量对应路径的地址,就会造成跳转。

在这里插入图片描述

任意文件上传

(http://192.168.18.62:99/upload/include.php?file=./upload/test.jpg

当我们传入图片马的时候,想要连接这个图片马就需要结合文件包含漏洞才可以连接。

因为文件包含"include()函数"会将包含进去的所有内容当做"程序"执行,要是有一句话就执行了。

也就是说,上传的任何东西除了中间件本身的文件能够直接执行,其他的要想执行都得需要文件包含漏洞

1、原理

大多数网站都有文件上传的接口,但如果在后台开发时并没有对上传的文件进行安全考虑或采用了有缺陷的措施,导致攻击者可以通过一些手段绕过安全措施从而上传一些恶意文件,从而通过该恶意文件的访问来控制整个后台

2、分类

在这里插入图片描述

3、基本思路

在这里插入图片描述

4、基本绕过方式 一句话: 1、客户端检测绕过(javascript 检测)

首先观察到提示只允许上传图片文件,那么前端的查看代码,当页面发生改变时,会调用这个checkFileExt函数来检查上传的是不是图片,我们只需要在前端将checkFileExt函数删除,就能上传一个一个非图片文件。

在这里插入图片描述

效果不是太好,那么直接用burp效果好:

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

2、服务端验证绕过(MIME 类型检测)

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。 常见的MIME类型(通用型): 超文本标记语言文本 .html text/html xml文档 .xml text/xml XHTML文档 .xhtml application/xhtml+xml 普通文本 .txt text/plain RTF文本 .rtf application/rtf PDF文档 .pdf application/pdf Microsoft Word文件 .word application/msword PNG图像 .png image/png GIF图形 .gif image/gif JPEG图形 .jpeg,.jpg image/jpeg au声音文件 .au audio/basic MIDI音乐文件 mid,.midi audio/midi,audio/x-midi RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio MPEG文件 .mpg,.mpeg video/mpeg AVI文件 .avi video/x-msvideo GZIP文件 .gz application/x-gzip TAR文件 .tar application/x-tar 任意的二进制数据 application/octet-stream 通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。 第一个参数是表单的 input name,第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error"。就像这样: $_FILES["file"]["name"] - 被上传文件的名称 $_FILES["file"]["type"] - 被上传文件的类型 $_FILES["file"]["size"] - 被上传文件的大小,以字节计 $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称 $_FILES["file"]["error"] - 由文件上传导致的错误代码 详细可参考:http://www.w3school.com.cn/php/php_file_upload.asp 分析代码逻辑:首先会获取到前端的提交请求,然后定义了一个数组(定义图片上传指定类型),然后通过upload_sick函数对上传的文件进行一定的检查。 分析upload_sick函数存在漏洞的的原因是因为 $ _FILES() 这个全局的方法是通过浏览器http头去获取的content-type,content-type是前端用户可以控制的。容易被绕过。 上传一张正常的符合标准的图片,对其content-type进行抓包操作。可见正常上传符合要求的图片中数据包中content-type为image/png对比符合条件,而php文件则不符合条件返回文件类型错误。

演示:在这里插入图片描述 在这里插入图片描述

3、代码注入绕过--getimagesize() getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息,如果用这个涵数来获取类型,从而判断是否是图片的话,会存在问题。 语法格式: array getimagesize ( string $filename [, array &$imageinfo ] ) getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。

方法:————————>>>>>文件包含漏洞之文件上传漏洞利用 方法一:直接伪造头部GIF89A 方法二:CMD方法,copy /b test.png+1.php muma.png 方法三:直接使用工具增加备注写入一句话木马。

即:一句话变为图片格式test.jpg,同时再反十六进制修改文件头标识。

或者用真图片进行合并

或者直接在真图片中写入一句话

效果如下:

在这里插入图片描述

上面的方法已经显示不行了,那么就用修改格式头的方式:

GIF89A

在这里插入图片描述

在这里插入图片描述

在正常文件里面添加一句话:

在这里插入图片描述

在这里插入图片描述

依然可以达到效果

4、路径/扩展名绕过 1、白名单 0x00截断或test.asp%00.jpg MIME绕过 2、黑名单 (1)文件名大小写绕过 (2)名单绕过 用黑名单里没有的名单进行攻击,比如黑名单里没有.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa|.asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf|.htaccess后缀文件之类 (3)特殊文件名或文件夹绕过(windows) 还有比如发送的http 包里把文件名改成test.asp. 或test.asp_(下划线为空格),这种命名方式在windows 系统里是不被允许的,所以需要在burp 之类里进行修改,然后绕过验证后,会被windows 系统自动去掉后面的点和空格,但要注意Unix/Linux 系统没有这个特性。 (4)0x00截断 name = getname(http request) //假如这时候获取到的文件名是test.asp .jpg(asp 后面为0x00) type = gettype(name) //而在gettype()函数里处理方式是从后往前扫描扩展名,所以判断为jpg if (type == jpg) SaveFileToPath(UploadPath.name, name) //但在这里却是以0x00 作为文件名截断 //最后以test.asp 存入路径里 (5)把文件名改成test.asp. 或test.asp_(下划线为空格),这种命名方式在windows 系统里是不被允许的,所以需要在burp 之类里进行修改,然后绕过验证后,会被windows 系统自动去掉后面的点和空格,但要注意Unix/Linux 系统没有这个特性。 (6)双后缀名绕过 (7)::$DATA绕过 是Windows下NTFS文件系统的一个特性,即NTFS文件系统的存储数据流的一个属性 DATA 时,就是请求 a.asp 本身的数据,如果a.asp 还包含了其他的数据流,比如 a.asp:lake2.asp,请求 a.asp:lake2.asp::$DATA,则是请求a.asp中的流数据lake2.asp的流数据内容。 5、安全防范

​ 针对文件上传漏洞的特点和必须具备的三个条件,我们阻断任何一个条件就可以达到组织文件上传攻击的目的: 1、最有效的,将文件上传目录直接设置为不可执行,对于Linux而言,撤销其目录的'x'权限;实际中很多大型网站的上传应用都会放置在独立的存储上作为静态文件处理,一是方便使用缓存加速降低能耗,二是杜绝了脚本执行的可能性; 2、文件类型检查:强烈推荐白名单方式,结合MIME Type、后缀检查等方式(即只允许允许的文件类型进行上传);此外对于图片的处理可以使用压缩函数或resize函数,处理图片的同时破坏其包含的HTML代码; 3、使用随机数改写文件名和文件路径,使得用户不能轻易访问自己上传的文件; 4、单独设置文件服务器的域名;

6、图片二次渲染

原理:将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。具体实现需要自己编写Python程序,人工尝试基本是不可能构造出能绕过渲染函数的图片webshell的。

即:说白了就是原本的图片上传到了服务器,服务器对其进行了再次编码,这时候我们只需要进行一个对比测试,找出渲染后与原图片相同的部分进行替换代码即可。

7、绕过方法总结

(一定要注意这个函数:

$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;

它不保证我们上传的文件还是不是上传的原名)

客户端js限制绕过(将php文件重命名为jpg/png满足页面要求,抓包之后将其改回php文件名)

对文件MIME类型进行了验证判断(直接上传php文件,抓包,将原数据包中Content-type的值改为image/png,)

黑名单验证,即否定如array('.asp','.aspx','.php','.jsp')这样的后缀名(我们可上传php3,php5...等这样可以被服务器解析的后缀名)

$deny_ext = array('.asp','.aspx','.php','.jsp');

黑名单限制不完全,如.htaccess文件没有被限制,或者说:

$deny_ext = array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf");

另外一种方法就是利用PHP 和 Windows环境的叠加特性,以下符号在正则匹配时的相等性:

利用PHP 和 Windows环境的叠加特性,以下符号在正则匹配时的相等性:

双引号" = 点号. 大于符号> = 问号? 小于符号< = 星号*

先上传一个名为4.php:.jpg的文件,上传成功后会生成4.php的空文件,大小为0KB.

然后将文件名改为4.>

保存后,重命名为cmd.jpg 文件

再次进行访问 在这里插入图片描述

5、Ewebeditor漏洞

编辑器漏洞,看文档资料,就不再多解释了

思路就是登录了一个编辑器站点,增加一个样式,看能不能增加上传图片的方式上传加入脚本文件达到控制服务器的能力

6、fckeditor漏洞

对编辑器来说,一般使用者很少有人去改默认路径,毕竟涉及到的链接都需要改,不懂开发的都不会改,这里直接访问编辑器的默认路径就可以传东西了。

几乎所有的编辑器都是文件、目录解析漏洞或者进入后头修改文件格式自定义文件上传格式进行绕过,或者注入、或者00截断(php低于5.3.4且没有魔术符号)

注意上传图片后右键看链接地址有没重命名、二次渲染等

白名单代码没问题那就是运维的问题

解析漏洞很重要!!!!(低版本型,高版的函数都不一样的,不过解析漏洞都是通杀,像政府、医疗等等都用的老版的)

即:能否通过上传图片然后传入脚本的方式拿webshell

任意文件下载任意文件读取原理都一样:没有控制访问权限、没有过滤../等

判断有无漏洞:客户端服务端、黑白名单、解析漏洞等等(方法给了,黑盒测试就是用这些方法去尝试测)

电脑的cmd永远只会以原来的格式执行(muma.exe改为muma.jpg,cmd中执行.jpg仍然可以)

发的都不会改,这里直接访问编辑器的默认路径就可以传东西了。

几乎所有的编辑器都是文件、目录解析漏洞或者进入后头修改文件格式自定义文件上传格式进行绕过,或者注入、或者00截断(php低于5.3.4且没有魔术符号)

注意上传图片后右键看链接地址有没重命名、二次渲染等

白名单代码没问题那就是运维的问题

解析漏洞很重要!!!!(低版本型,高版的函数都不一样的,不过解析漏洞都是通杀,像政府、医疗等等都用的老版的)

即:能否通过上传图片然后传入脚本的方式拿webshell

任意文件下载任意文件读取原理都一样:没有控制访问权限、没有过滤../等

判断有无漏洞:客户端服务端、黑白名单、解析漏洞等等(方法给了,黑盒测试就是用这些方法去尝试测)

电脑的cmd永远只会以原来的格式执行(muma.exe改为muma.jpg,cmd中执行.jpg仍然可以)



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭