真难得文件上传这么通俗易懂

Posted 跳楼梯企鹅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了真难得文件上传这么通俗易懂相关的知识,希望对你有一定的参考价值。

文件上传漏洞

一、1.什么是文件上传

(1)定义

文件上传漏洞是指用户上传了一个可以执行的脚本文件,并且可以通过该文件获得服务器的权限的一种漏洞。
图片来源:链接: 图片来源地址.

(2)原理

大部分网站都有上传的功能,比如说上传pdf,上传png、php、exe等文件,一些文件会被网站所过滤,但是大部分web的过滤不够严格,导致在上传的位置上,用户可以上传一些带有脚本的文件,web端对脚本文件进行php解析,可以任意执行脚本文件。

2.文件上传漏洞的危害

图片来源:链接: 图片来源地址.

(1) 危害

上传文件是web脚本语言,一般来说都是php,也会有其他的js等,服务器都是有一个解析方式的,在没有做过滤的情况下,上传的脚本语言会被服务器的解析方式当作代码来执行,恶意代码的话,我们可以想象这个危害的严重性。(数据的增删改查都是最基本的)

(2)产生危害的原因

最直接的原因就是写网页的开发人员对脚本的过滤不严格所导致的。其他还有一些版本不适配的漏洞、文件解析漏洞等等。

二、文件上穿漏洞分类

图片来源:链接: 图片来源地址.

1.客户端校验

js检查: 随便上传一个文件看是否会有提示,只允许什么格式的文件进行上传。

2.黑名单绕过


链接: 图片来源.

(1)扩展名绕过

这个就很简单就是利用burp 抓包改包。
先对web上传一个含有木马的txt文本,通过抓包改成后缀名为jsp/php/asp后缀的文件,这就是客户端校验。

(2)后缀大小写绕过

后缀名会显示非法的时候,有时候可以尝试大小写进行绕过 例如:PhP、pHP等等

例如:

text.php
改为
text.Php
text.PhP.......

(3)双层后缀绕过

web代码中会将可能存在漏洞的脚本文件后缀名进行过滤,大部分情况下只能过滤一层,所以可以尝试双写后缀名进行绕过
例如:

text.php
改为
text.pphphp

(4)空格绕过

这个要了解ur编码,文件上传过程中,有时候会遇到一些情况,正常的php脚本不可以绕过,但是后面加上一个空格即可绕过,所以利用这个特性,可以进行上传。

例如:

1.php
改为
1.php (这里有一个空格,为了更直观的看到我在这里备注一下)

(5)点绕过

这个要了解ur编码,文件上传过程中,有时候会遇到一些情况,正常的php脚本不可以绕过,但是后面加上一个点(.)即可绕过,所以利用这个特性,可以进行上传。

例如:

1.php
改为
1.php.(这里有一个空格,为了更直观的看到我在这里备注一下)

(6)上传.htaccess

.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法,
即,在一个特定的文档目录中放置一个包含一个或多个指令的文件,
以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。

方法:直接上传这个文件,看是否可以获得权限。

(7)::$DATA绕过

在window的时候如果文件名+":: D A T A " 会 把 : : DATA"会把:: DATA"::DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名.

方法:抓包改包
例如:

1.php
改为
1.php::DATA

3.白名单绕过

(1)web解析绕过

1.IIS
这里服务器人员进常用的是宝塔IIS
下载连接: IIS.

(1) 当建立.asa、.asp格式的文件夹时,其目录下的任意文件都将被IIS当作为asp文件解析。 (2) 当上传文件.asp;*.jpg
IIS6.0会将文件当做asp文件解析。

2.Apache

如果对方中间件是apache属于低版本,我们可以利用文件上传,上传一个不识别的文件后缀,利用解析漏洞规则成功解析文件,其中的后门代码被执行。例如:x.php.aaa.bbb.ccc.ddd,可以被当作php文件进行解析,从最后一个.ddd开始,apache不认识,就往前走,一直到.php,这样即绕过了验证,有可以进行解析。

3.nginx

上传可以上传的文件,在文件地址后加上/x.php,可以让文件以php代码去执行。

这里其实我个人的理解还是要多了解中间件的特性,另外需要多看一些技术帖,多复现一些漏洞。
这里参考了大佬的博客。
链接: 地址.

(2)00截断绕过

0x00截断原理:

0x00是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符。系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束。这个可以用在对文件类型名的绕过上。但要注意是文件的16进制内容里的00,而不是文件名中的00.就是说系统是按16进制读取文件(或者说二进制),遇到ascii码为零的位置就停止,而这个ascii码为零的位置在16进制中是00,用0x开头表示16进制,也就是所说的0x00截断。%00是被服务器解码为0x00发挥了截断作用。

(3)mime文件绕过

方法:抓包改包
客户端软件,区分不同种类的数据,例如web浏览器就是通过MIME类型来判断文件是GIF图片,还是可打印的PostScript文件。web服务器使用MIME来说明发送数据的种类,
web客户端使用MIME来说明希望接收到的数据种类。

三、条件竞争

链接: 来源.

什么是条件竞争

网站允许上传文件,然后检查上传文件是否包含webshell、是否是指定的文件类型。如果不是,那么删除该文件。在删除之前访问上传的php文件,从而执行上传文件中的php代码。
绕过方法: 先进行文件上传,后进行判断与删除。利用时间差进行webshell上传。

四、二次渲染

1.什么是二次渲染

简单来说就是:上传两次,通过上传同一个文件,进行对比,在相同点添加脚本代码
这里利用这个工具:010EditorChange
下载地址: 二次渲染.

2.二次渲染演示

这是一个合成的图片文件,后缀为jpeg,可以看到有一句话添加了进去,这是我们需要上传的第一个文件,将上传后的文件也页面中下载下来,通过改软件打开,进行对比,在下载的图片中与源文件相同的地方再次进行添加一句话代码,改好之后再次上传。

五、漏洞修复

1.漏洞修复的方法

(1)服务器配置问题
解决方法:重新配置服务器。

(2)开源编辑器问题
解决方法:如果新版本已经修复,直接升级新版本即可

(3)本地上传文件限制绕过
解决方法:在服务器后端对可以实现绕过的文件进行过滤
(4)设置文件上传的目录为不可执行
解决方法:只要web无法解析目录,那马即使攻击者上传了脚本也没什么作用,服务器不受任何影响

(5)判断文件后缀的漏洞
解决方法:在判断文件类型的时候,利用MIME,Type后缀检查,其中对图片的处理可以使用,压缩函数,或者resize函数,在处理图片时破坏图片中包含额html代码。
(6)使用随机数改写文件名和文件漏洞
解决方法:文件上传要执行代码的情况下,则需要用户访问到这个文件才可以(在这里加入限制)。在一些情况下,文件可以上传,但是无法访问
(7)单独设置文件服务器的域名
解决方法:由于不同浏览器的策略不一样,客户端攻击就会失效。

六、小结

** 我个人认为文件上传还是很简单的,找到上传点还是需要多多思考,多琢磨。
这里友情提示各位技术友不可做违法乱纪的事情,请牢记网络安全法。**

以上是关于真难得文件上传这么通俗易懂的主要内容,如果未能解决你的问题,请参考以下文章

第一次这么通俗易懂的讲Paxos算法

终于有大佬把软件测试的元素定位总结得这么通俗易懂了!

华为资深网工用600幅图表把计算机网络变得通俗易懂

实在是秒啊,我还从来没见过把Spring之AOP讲的这么通俗易懂的,安排!

解决‘GNN’中‘over—smoothing’问题(通俗易懂)

关于js中的回调函数callback,通俗易懂