文件上传技术总结

发布时间:2024年01月24日

语言可解析的后缀

(前提:在Apache httpd.conf?配置文件中有特殊语言的配置

AddHandler application/x-httpd-php .php

搭配大小写、双重、空格来进行

其中:

phtml、pht、php3、php4和php5都是Apache和php认可的php程序的文件后缀

常见的MIME类型

  超文本标记语言文本?.html,.html text/html

  普通文本?.txt text/plain

  RTF文本?.rtf application/rtf

  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

windows特性

Windows下文件名不区分大小写,Linux下文件名区分大写欧西;

Windows下ADS流特性,导致上传文件xxx.php::$DATA = xxx.php;

Windows下文件名结尾加入.,空格,<,·>,>>>,0x81-0xff等字符,最终生成的文件均被windows忽略。

00截断

0x00截断是将上传文件名或路径名中使用ascll码值为0的字符(也就是null)来进行截断,%00一般用在URL中用于截断url来进行文件包含,两者原理都一样,都是ascll为0的字符,只是形式不同

?

使用%00截断,需要两个条件
(1)php版本小于5.3.4(2)php的magic_quotes_gpc为OFF状态

例如:1.asp%00.jpg

post型:post不会像get对%00进行自动解码,所以先添加一个+号,

然后找到2b

使用0x00截断

先在文件尾添加一个空格,点开hex,将其对应的20改成00即可,就可以绕过后缀名的过滤

文件头检查

改后缀为php上传,还是失败

合成图片马,再修改后缀php再上传

?如果是检测gif的话,可以在内容前添加GIF89a,例如

二次渲染

上传的图片会被修改部分内容,此时要对比未上传和已上传的图片对比出没有被修改的部分,在未修改的部分插入一句马子

例如上传前,把马子插入gif图片的底部

上传后,发现马子不见了

需要找到渲染前后没有变化的位置,然后将php代码写进去 例如:

.htaccess绕过

.htaccess(apache的配置文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。)

前提是:httpd.conf,启用AllowOverride(将该值改为all)

<Directory />
    Options FollowSymLinks
    AllowOverride All
    AddType application/x-httpd-php .jpg	#将.jpg后缀的文件作为PHP文件解析
</Directory>

上传一个.htaccess内容如下的文件

<FilesMatch "2.jpg">

SetHandler application/x-httpd-php

</FilesMatch>

.htaccess文件的内容的意思是 对2.jpg使用php重新解析

如果只是单纯如下语句,它会把所有上传文件当成php来解析

SetHandler application/x-httpd-php

<Directory />
    Options FollowSymLinks
    AllowOverride All
    AddType application/x-httpd-php 	#将.jpg后缀的文件作为PHP文件解析
</Directory>

Apache解析漏洞

一:

其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过

例如:

正常上传.php文件上传不成功,burp抓包后发送到Repeater然后hex在置右键-Insert byte,在0d、0a前加一个0a,然后send,即可绕过上传

在页面访问http://192.168.0.99:8080/feng.php%0a

二:

Apache多后缀解析

如果运维人员给.php后缀增加了处理器:

AddHandler application/x-httpd-php .php

那么,在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。

影响版本Apache 1.xApache 2.x

Apache在解析文件时有一个原则:当碰到不认识的扩展名时,将会从后面向前解析,直到碰到认识的扩展名为止。

例如feng.php.QWE.ABC

Apache在处理时,先读取最后一个后缀,为ABC不认识,继续往左读取QWE不认识,读到php能识别这个后缀,于是就把feng.php.QWE.ABC当成是feng.php文件来解析,若是所有后缀都看完了没有一个认识怎么办?此时就会把该文件当做默认类型进行处理了,一般来说,默认类型是text/plain。

?

phtml、pht、php3、php4和php5都是Apache和php认可的php程序的文件后缀

?IIS?解析漏洞

????目录解析

/xx.asp/xx.jpg

若文件夹的名字后缀为?.asp、.asa,其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。

例如创建目录?abc.asp,那么

/abc.asp/1.jpg

1.jpg将被当作1.asp文件来执行。不管你上传后你的图片改不改名都能拿shell了。

????文件解析

在IIS6.0下,分号后面的不被解析,例如

abc.asp;.jpg

会被服务器看成是abc.asp

原理大抵是IIS 5.x/6.0在从文件路径中读取文件后缀时,遇到一个“.”后,便进入了一种截断状态,在该状态下遇到特殊符号?“/”和“;”,都会进行截断,只保留特殊符号前的部分,即“.asp”,从而认为文件后缀为“.asp”。

????默认解析

IIS6.0?默认的可执行文件除了asp还包含这三种默认解析:/xx.asa /xx.cer /xx.cdx

原因:由于在?IIS?默认配置中,这几个后缀默认由?asp.dll?来解析,所以执行权限和?.asp?一摸一样,你可在配置中自行删除该后缀,以防止安全隐患

此处可联系利用目录解析漏洞?/xx.asa/xx.jpg?或?/xx.cer/xx.jpg?或?xx.asa;.jpg

????IIS 7.0/IIS 7.5/ Nginx <8.03畸形解析漏洞

前提:默认Fast-CGI开启状况下,在一个文件路径(/xx.jpg)后面加上/xx.php会将

/xx.jpg/xx.php?解析为?php?文件。

在某些使用有漏洞的网站中,访问http://xxx.xxx.xxx/1.jpg/1.php,此时的1.jpg会被当作PHP脚本来解析,但是1.php是不存在的。

这就意味着攻击者可以上传合法的“图片”(图片木马)然后在URL后面加上“/1.php”,就可以获得网站的WebShell,菜刀连接:http://xxx.xxx.xxx/1.jpg/1.php

?java的空字节截断

\u0000.jpg

文章来源:https://blog.csdn.net/2301_76786857/article/details/135763852
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。