【精选】上传漏洞的攻击与防御 您所在的位置:网站首页 文件包含漏洞的成因有哪些 【精选】上传漏洞的攻击与防御

【精选】上传漏洞的攻击与防御

2023-10-24 18:36| 来源: 网络整理| 查看: 265

一、实验名称

上传漏洞的攻击与防御

二、实验环境(详细说明运行的系统、平台及代码等)

1、攻击机系统环境:Windows 7/8/10

2、浏览器:Firefox 53.0.2(64位)

3、浏览器插件HackBar 1.6.3.1

4、中国菜刀20160620版

5、BurpSuite 1.7.11

三、实验步骤及结果

1、上传之利用PHP5.6.6截断漏洞绕过

漏洞地址:http://222.18.158.243:8007/

漏洞代码:

if(!empty($_FILES['file']['name'])){

             $upload_name=$_FILES['file']['name'];

              $type=substr($upload_name,strrpos($upload_name,'.')+1);

              if($type == "jpg" || $type == "png" || $type == "gif"){

      $address=$_POST['address'].".".$type;

      if (move_uploaded_file($_FILES['file']['tmp_name'],"uploads/".$address)) {

            echo "图片地址:uploads/".$address;  }}

提示:服务器用的PHP版本为5.6.6,存在0x00截断漏洞。漏洞代码中的type变量获得上传文件的后缀名,address变量是在HTML表单中获取的时间。将会以时间给文件重命名。

一句话木马的文件名为yijuhua.jpg,文件内容为:

打开BurpSuite,抓包。如下图所示:

        

    因为最后的文件名是以address变量命名的,所以此处截断1400324078

首先将其后边加上.php空格,然后切换到BurpSuite 的HEX页面,如下图所示:

 

    因为空格的HEX为20,所以容易查找和修改,将20改为00进行截断,则文件名如下图所示:

Screenshot from 2017-02-28 18-26-27.png

    服务器上的文件名为1488324078.php0x00.jpg,以为存在截断漏洞,最后的文件名即为1488324078.php,从而绕过实现了上传

编写一句话木马程序

Burpsuit拦截修改address参数为cmd.php0x00

3.成功将木马文件上传

4.成功访问木马文件

6.用蚁剑连接

7.成功连接

实验心得

通过实验了解上传漏洞的攻击和防御

思考题

1、为什么结合文件包含漏洞可以实现对单纯验证文件名后缀的利用?

答:因为php的文件包含函数会将传入的文件当做php进行解析,无论它的后缀名是什么,而通过url直接访问则需是php文件才会被服务器解析。

2、目前上传漏洞攻击和防御的最新技术有哪些?

1.apache 1.x 2.x解析漏洞(实验环境:wamp2.0)

漏洞原理

Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如 test.php.a.b的“.a”和”.b” 这两种后缀是apache不可识别解析,apache就会把test.php.a.b解析成test.php。

漏洞形式:

www.test.com/test.php.a

其余配置问题导致漏洞

如果在 Apache 的配置文件中有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php. 即使文件名是 test2.php.jpg 也会以 php 来执行

如果在 Apache 的配置文件中有这样一行配置 AddType application/x-httpd-php .jpg 即使扩展名是 jpg,一样能以 php 方式执行

如何查看Apache的版本

在phpinfo中查看

2.IIS6.0解析漏洞

目录解析

原理: 服务器默认会把xx.asp目录下的文件都解析成asp文件

形式:www.xxx.com/xx.asp/xx.jpg

文件解析

原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了

形式:www.xxx.com/xx.asp;.jpg

3.nginx解析漏洞( 实验环境:Nginx1.4.6 )

漏洞原理

Nginx拿到文件路径(更专业的说法是URI)/test.jpg/test.php后,一看后缀是.php,便认为该文件是php文件,转交给php去处理。php一看/test.jpg/test.php不存在,便删去最后的/test.php,又看/test.jpg存在,便把/test.jpg当成要执行的文件了,又因为后缀为.jpg,php认为这不是php文件,于是返回“Access denied.”

这其中涉及到php的一个选项:cgi.fix_pathinfo,该值默认为1,表示开启。开启这一选项PHP可以对文件路径进行“修理”。举个例子,当php遇到文件路径“/1.jpg/2.txt/3.php”时,若“/1.jpg/2.txt/3.php”不存在,则会去掉最后的“/3.php”,然后判断“/1.jpg/2.txt”是否存在,若存在,则把“/1.jpg/2.txt”当做文件“/1.jpg/2.txt/3.php”,若“/1.jpg/2.txt”仍不存在,则继续去掉“/2.txt”,以此类推

漏洞形式

www.xxxx.com/UploadFiles/image/1.jpg/1.php

www.xxxx.com/UploadFiles/image/1.jpg%00.php

www.xxxx.com/UploadFiles/image/1.jpg/%20\0.php

4.IIS7.5解析漏洞

IIS7.5的漏洞与nginx的类似,都是由于php配置文件中,开启了cgi.fix_pathinfo,而这并不是nginx或者iis7.5本身的漏洞

漏洞形式

www.xxxx.com/UploadFiles/image/1.jpg/1.php

5.windows系统解析漏洞

旧版Windows Server中存在空格和dot漏洞类似于 a.php. 和 a.php[空格] 这样的文件名存储后会被windows去掉点和空格,从而使得加上这两个东西可以突破过滤,成功上传,并且被当作php代码来执行

漏洞形式

test.asp.

test.asp(空格)

test.php:1.jpg

test.php:: $DATA

6.条件竞争

条件竞争漏洞是一种服务器端的漏洞,由于服务器端在处理不同用户的请求时是并发进行的,因此,如果并发处理不当或相关操作逻辑顺序设计的不合理时,将会导致此类问题的发生



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有