目录遍历漏洞

目录遍历漏洞

一、定义:

​ ⽬录遍历Directory traversal(也称⽂件路径遍历、⽬录穿越、路径遍历、路径穿越)是⼀种允许攻击者在未授权的状态下读取应⽤服务上任意⽂件的安全漏洞。这包括应⽤代码、数据、凭证以及操作系统的敏感⽂件。在有些情况下,攻击者还可能对服务器⾥的⽂件进⾏任意写⼊,更改应⽤数据甚⾄完全控制服务器。

二、漏洞成因:

​ 程序系统在实现上没有过滤⽤⼾输⼊的.../之类的⽬录跳转符,允许攻击者通过提交⽬录跳转符来遍历服务器上的任意⽂件。 ⽐如:http://www.test.com/index.php?file=image1.jpg 当服务器处理传送过来的image1.jpg⽂件名后,Web应⽤程序会⾃动添加完整的路径,eg://test/static/imgs/image1.jpg,

​ 然后web系统将读取的内容返回给攻击者。 若对⽂件名称的安全性验证不⾜,攻击者会使⽤.../.../.../ect/passwd的⽂件名,将会导致访问⾮授权⽂件资源。

三、常见的目录跳转命令

windows:

  • 根目录:C:
  • 当前目录:.
  • 当前用户目录:C:\USERS
  • 跳转:../

linux:

  • 根目录:/
  • 当前目录:.
  • 当前用户目录:~
  • 跳转:../

四、基础绕过方法:

  1. 使用双写绕过,应对防御措施将".../"替换为空

    复制代码
    http://www.test.com/index.php?file=../....//....//....//windows/win.ini
  2. 加密型传递的参数

    http://www.test.com/index.php?file=aW1hZ2UxLmpwZw==参数file的数据采⽤Base64加密,⽽攻击中只需要

    将数据进⾏相应的解密即可⼊侵,采⽤⼀些常⻅、规律性的加密⽅式也是不安全的。

  3. 编码绕过

    采⽤不同的编码进⾏过滤型绕过,⽐如通过对参数进⾏url编码提交来绕过。 . => %2e / => %2f % => %25(双重编码) 注意:服务器会先进⾏url解码,再加上get协议本⾝会进⾏⼀次url解码,所以进⾏两次url编码

  4. 目录限定绕过

    有些web软件通过限定目录权限来分离,攻击者可以通过某些特定的符号来绕过。比如:根目录"/"被限定了权限,但是可以通过"~"来进入根目录下的目录

    常见系统文件路径

    Windows:

    • C:\boot.ini //查看系统版本
    • C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件
    • C:\Windows\System32\drivers\etc\hosts //本地DNS解析记录
    • C:\Windows\repair\sam //存储系统初次安装的密码
    • C:\Program Files\mysql\my.ini //Mysql配置
    • C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
    • C:\Windows\php.ini //php配置信息
    • C:\Windows\my.ini //Mysql配置信息

    Linux:

    • /etc/passwd #查看⽤⼾⽂件

    • /etc/shadow #查看密码⽂件,如果能读取该⽂件说明是root权限

    • /etc/httpd/conf/httpd.conf #查看apache的配置⽂件

    • /root/.bash_history #查看历史命令

    • /var/lib/mlocate/mlocate.db #本地所有⽂件信息

    • /etc/ssh/sshd_config #ssh配置⽂件,如果对外开放可看到端⼝

    • /proc/self/fd/fd0-9*(⽂件标识符)

    • /proc/mounts

    • /root/.ssh/known_hosts

      程序配置文件

      apache:

      • /etc/httpd/conf/httpd.conf
      • /etc/apache2/httpd.conf
      • /etc/apache2/apache2.conf

      nginx:

      • /etc/nginx/nginx.conf
      • /usr/local/nginx/conf/nginx.conf
      • /usr/local/etc/bginx/nginx.conf

      redis:

      • /etc/redis.conf

      五、防范方法

      1. 对传来的参数做过滤

        需对用户提交的内容进行严格的过滤,这主要指过滤目录跳转符、字符截断符、dir命令等如".../"和"~/"

      2. 采用白名单的形式,验证所有的输入

        也就是限制用户请求资源,对于少量文件(例如都是图像),写正则表达式批量规范请求资源的白名单

      3. 文件名参数统一编码,标准化所有字符

        对用户传过来的文件名参数进行统一编码,将所有字符转换成URL编码,这样服务器不会解析成.../,对包含恶意字符或者空字符的参数进行拒绝

      4. id随机数命名,持久化id:path数据库

        文件路径保存至数据库,用户提交文件对应id访问数据库,路径识别拼接都在后端

      5. 下载文件前做权限判断,设置目录权限

        控制返回数据,保证返回数据不会泄露任何和服务器相关的隐私数据

      6. 合理配置web服务器的目录权限

      7. 添加WAF规则

相关推荐
砚凝霜2 小时前
软考网络工程师|第 5 章 广域网基础技术完整备考笔记
网络·笔记
oier_Asad.Chen2 小时前
【OI学习笔记】Floyed-Warshall算法解决传递闭包问题
c++·笔记·学习·算法·图论·最短路·传递闭包
鱼听禅2 小时前
C#学习笔记-添加编译参数到程序集自动更新程序编译时间
笔记·学习·c#
香菜TTT2 小时前
LangChain框架_学习笔记
笔记·学习·langchain
春水碧于天,画船听雨眠2 小时前
LangChain学习笔记(二)
笔记·学习·langchain
210Brian3 小时前
STM32学习笔记(四)OLED显示屏与Keil调试
笔记·stm32·学习
笑一下蒜了.4 小时前
DNS 原理与 BIND 权威服务器实操笔记
运维·服务器·笔记
2301_809051145 小时前
STM32 GPIO控制器及其应用 学习笔记-2
笔记·stm32·学习
影视飓风TIM5 小时前
C++ STL 完整入门笔记[9]:C++ 仿函数、priority_queue与STL算法底层笔记
数据结构·c++·笔记