文件上传检测与绕过——服务器检测与绕过

一、检测原理:

对于文件上传,如果只在Web前端进行检测,显然是防护不足的,服务器也需要进行检测

服务器端通过函数pathinfo()获取文件后缀,将后缀转换成小写,看看是不是要求上传的文件格式

二、绕过方法

1、后缀名检测与绕过

后缀名检测的绕过方法也有很多,常见的有:

1. 黑名单--大小写绕过
2. 黑名单--名单列表绕过
3. 黑名单--Windows特性(末尾的点【.】)绕过
4. 黑名单--Windows特性(空格【 】)绕过
5. 黑名单--Windows特性(::$DATA)绕过
6. 白名单(需要结合文件包含漏洞或者Web服务器解析漏洞)
7. .htaccess文件攻击--匹配文件内容
8. .htaccess文件攻击--配皮文件名中的关键字
9. .htaccess文件攻击--匹配文件名
10. Apache解析漏洞
黑名单--大小写绕过

1、登录:http://ip/upfile/2/upload1.html

2、在操作机上准备要上传的文件(脚本文件),比如新建1.php文件

3、点击“选择文件”按钮,选中要上传的文件

4、点击“submit”按钮,文件上传失败,不允许的后缀名

5、尝试利用大小写绕过,将脚本文件1.php更改为1.pHp,再次选择脚本文件

 6、点击“submit”按钮,上传文件,脚本文件成功上传

7、访问http://ip/upfile/2/upload/1.pHp,上传的脚本文件成功解析


名单列表绕过

原理:有些中间件允许解析其他文件后缀名,如asp、cer、这类的或在httpd.conf中配置以下代码,则能解析php、php3、phtml文件。所以当php后缀名被拦截,则可以用php3、phtml试试

前面4个步骤一样的,参考前面的步骤

5、尝试利用大小写绕过,将脚本文件1.php更改为1.pHp,再次选择脚本文件

6、点击“submit”按钮,上传文件,依然失败,不允许的后缀名

7、尝试寻找黑名单列表之外可允许上传的文件后缀名进行绕过,将脚本文件1.php更改为1.php3或者1.phtml,再次选择脚本文件

8、点击“submit”按钮,继续上传文件,脚本文件成功上传

9、访问http://ip/upfile/2/upload/1.php3,上传的脚本文件成功解析


Windows特性(末尾的点【.】)绕过

前面的4个步骤还是一样的,参考第一个

5、尝试利用大小写绕过,将脚本文件info.php更改为info.pHp,以及尝试寻找黑名单列表之外可允许上传的文件后缀名进行绕过,将脚本文件info.php更改为info.php3或者info.phtml,再次选择脚本文件上传,依然失败,此文件不允许上传

6、打开桌面的的“Burp”文件夹,双击“BURP.cmd”启动Burp Suite抓包工具,进行抓包,设置代理什么的参考前面的文章

7、点击“submit”按钮,再次上传文件,Bp成功抓取数据包

 8、利用Windows特性,给文件名加“.”绕过服务端后缀名的检测,将数据包中的后缀名info.php改为info.php.

9、点击“Forward”,转发数据包,切换到浏览器,脚本文件成功上传

 10、关闭浏览器代理、访问http://ip/upfile/2/upload/info.php.(访问http://ip/upfile/2/upload/info.php也可以),上传的脚本文件成功解析


Windows特性(空格【 】)绕过

前面的4个步骤是一样的,

5、尝试利用大小写绕过,将脚本文件info.php更改为info.pHp,以及尝试寻找黑名单列表之外可允许上传的文件后缀名进行绕过,将脚本文件info.php更改为info.php3或者info.phtml,再次选择脚本文件上传,依然失败,此文件不允许上传

6、打开桌面的的“Burp”文件夹,双击“BURP.cmd”启动Burp Suite抓包工具,进行抓包,设置代理什么的参考前面的文章

7、点击“submit”按钮,再次上传文件,Bp成功抓取数据包

8、利用Windows特性,给文件名加“.”绕过服务端后缀名的检测,将数据包中的后缀名info.php改为info.php.

9、点击“Forward”,转发数据包,切换到浏览器,依然上传失败,后缀名不允许“.”出现

10、关闭浏览器代理,重新选择脚本文件

11、再次打开浏览器代理,点击“submit”按钮,上传文件并抓取数据包

12、利用Windows特性,给文件名加“(空格)”绕过服务端后缀名的检测,将数据包中的后缀名info.php改为info.php

13、点击“Forward”,转发数据包,切换到浏览器,脚本文件成功上传

 14、关闭浏览器代理,访问http://ip/upfile/2/upload/info.php (访问http://ip/upfile/2/upload/info.php也可以),上传的脚本文件成功解析


Windows特性(::$DATA)绕过

前面的步骤是一样的

我们试大小写、名单列表,利用windows特性,在后缀名加. 或者空格都不行,我们尝试利用另外一个特性

还是需要用到Bp抓包改包,步骤跟上面差不多一样的,下面只列出几个不一样的步骤

1、利用Windows特性,给文件名加“(::$DATA)”绕过服务端后缀名的检测,将数据包中的后缀名info.php改为info.php

2、点击“Forward”,转发数据包,切换到浏览器,脚本文件成功上传

3、关闭浏览器代理

4、访问http://ip/upfile/2/upload/info.php::$DATA,解析失败,未找到上传的文件,因为Windows的特性会自动去掉“::$DATA”,info.php::$DATA文件会变为info.php

5、访问http://ip/upfile/2/upload/info.php,上传的脚本文件成功解析


.htaccess文件攻击

原理:

.htaccess文件是Apache服务器中的分布式配置文件(IIS中不存在该文件),该配置文件会覆盖Apache服务器的全局配置,作用于当前目录及其子目录。在httpd.conf配置文件中,AllowOverride参数就是指明Apache服务器是否去找.htacess文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件;如果设置为All,那么将启用.htaccess文件,所有在.htaccess文件里的指令都将被重写,即允许.htaccess文件覆盖掉Apache的配置。

如果一个Web应用允许上传.htaccess文件,且.htaccess文件启用,那就意味着攻击者可以更改Apache的配置,这是十分危险。
.htaccess文件攻击有三种方式:

  • 当.htaccess文件内容如下,会将内容符合php语法规则的文件当作php文件解析

  • 匹配文件名中的关键字(比如:当文件名[info.php.png] 中包含关键字[.php],并且.htaccess文件内容如下,info.php.png中的代码会被执行)

  • 匹配文件名,当.htaccess文件内容如下,可以将匹配到的文件名的文件中的代码执行

1、登录地址:http://ip/upfile/2/upload6.html

2、在操作机上准备要上传的文件(脚本文件),比如新建info.php文件

3、点击“选择文件”按钮,选中要上传的文件

4、点击“submit”按钮,文件上传失败,此文件不允许上传

5、尝试大小写绕过、Windows特性,依然失败,此文件不允许上传

6、新建.htaccess文件

7、选择.htaccess文件,点击“submit”按钮,上传.htaccess文件,成功上传

8、将脚本文件info.php修改后缀名为可允许上传得info.jpg,再选择文件

9、点击“submit”按钮,再次上传文件,成功上传

10、访问http://ip/upfile/2/upload/info.jpg,上传的脚本文件成功解析


为了不让这篇文章篇幅过长,其他内容接下一篇文章

猜你喜欢

转载自blog.csdn.net/weixin_54055099/article/details/126968445