01-2目录遍历

2021-06-16  本文已影响0人  测试有话说

一、漏洞描述

攻击者能够在web应用程序所在的根目录以外的文件夹上,任意地获取数据

二、攻击场景及形成原因

攻击场景

常见于展示系统配置信息等场景,该场景下需要通过文件名参数来获取对应配置文件的这类功能设计。

形成原因

没有过滤用户输入的../和./之类的目录跳转符

image.jpeg

三、危害性

攻击者能够获取敏感数据,继而攻陷整个服务器。例如获取linux下的/etc/passwd文件后可能会破解出root用户的密码等。

四、攻击案例

某应用程序后台脚本中包含如下loader.php文件:


if(isset($_GET[‘js’]))

{

    $js = explode(‘;’, $_GET[‘js’]);

    foreach($js as $val)

    {

        $ext = substr($val,strrpos($val,’.’)+1);

        If($ext == ‘js’ || $ext==’css’)

        {

            if(is_file($val))

            {

                echo file_get_contents($val);

                echo “\n”;

            }

        }

    }

}

该页面没有对用户提交的js参数的文件路径进行过滤,攻击者可通过目录跳转字符“../”进行目录遍历攻击。虽然程序将读取的文件类型限制为“js”和“css”,但是由于PHP 5.3.4之前的版本中存在空字符截断漏洞,同时程序也未对截断符“%00”进行过滤,攻击者可借助截断符读取任意类型文件。构造如下参数即可访问linux服务器下的/etc/passwd文件。

http://vulhost/loader.php?js=../../../../../../../etc/passwd%00.js

五、漏洞评级及处理

等级:严重

给出安全漏洞警告,12小时内必须进行修复。未修复漏洞之前禁止对外发布。

六、防御方法

使用相应的函数把特殊的字符(.、/、%等)给过滤掉


<?php

if(isset($_GET["file"]))

   {

       $file = $_GET["file"];

       //

      if(sizeof(explode("..",$file)) >1 || sizeof(explode("./", $file))>1 || sizeof(explode(".\\", $file))>1)

      {

          //正常文件名不会有两个以上的.

          echo "filename error";

      }

      else

      {

          $ext = substr($file,strrpos($file,".")+1);

          //通常文件下载会在这里加入文件后缀的判断

          if(is_file($file))

              {

                //$file_type = mime_content_type($val);

                header("Content-Type:".$ext);

                echo file_GET_contents($file);

                //echo "<br>";

              }

      }

   }

?>

七、测试方法

如demo为以下代码


if(isset($_GET["file"]))

   {

       $file = $_GET["file"];

       $ext = substr($file,strrpos($file,".")+1);

       //通常文件下载会在这里加入文件后缀的判断

       if(is_file($file))

                header("Content-Type:".$ext);

                echo file_GET_contents($file);

        }     

   }

使用../../../../../etc/passwd 或针对windows系统使用 ../../../../../跳转至一个确定存在文件的路径,若展示目录内容,或对应目录结构内容,即存在目录遍历问题。

若提示错误或显示空白内容,则不存在目录遍历风险。

上一篇下一篇

猜你喜欢

热点阅读