目录遍历漏洞

Posted 浪久1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了目录遍历漏洞相关的知识,希望对你有一定的参考价值。

一、前言

目录遍历(路径遍历)是由于Web服务器或者Web应用程序对用户输入的文件名称的安全性验证不足而导致的一种安全漏洞,是针对Windows IIS和 Apache 的一种常见攻击。使得攻击者通过利用一些特殊字符就可以绕过服务器的安全限制,访问任意的文件(可以是Web根目录以外的文件即受限文件),甚至执行系统命令 cmd.exe /c 提取目录信息或在Web服务器的根目录外执行命令。该漏洞常常出现在文件读取或者展示图片等对文件读取交互的功能块。

二、原理

目录遍历是一种允许攻击者在未授权的状态下读取应用服务上任意文件的安全漏洞。这包括应用代码、数据、凭证以及操作系统的敏感文件。在有些情况下,攻击者还可能对服务器里的文件进行任意写入,更改应用数据甚至完全控制服务器。

程序在实现上没有充分过滤用户输入的目录跳转符(如../),导致用户可以恶意提交目录跳转,实现服务器上的任意文件遍历。

三、攻击手法

比如:http://www.test.com/index.php?file=image1.jpg,服务器拼接成c://test/static/imgs/image1.jpg

1、直接使用../

payload:
http://www.test.com/index.php?file=../imgs/image1.jpg
http://www.test.com/index.php?file=../../../../windows/win.ini
http://www.test.com/index.php?file=../../../../windows/win.ini%00.jpg

2、使用绝对路径

payload:
http://www.test.com/index.php?file=/etc/passwd
http://www.test.com/index.php?file=/etc/passwd%00.jpg

3、使用双写

payload:
http://www.test.com/index.php?file=....//imgs/image1.jpg
http://www.test.com/index.php?file=....//....//....//....//windows/win.ini
http://www.test.com/index.php?file=....//....//....//....//windows/win.ini%00.jpg

4、加密参数

http://www.test.com/index.php?file=aW1hZ2UxLmpwZw== 参数file的数据采用Base64加密,而攻击中只需要将数据进行相应的解密即可入侵,采用一些常见、规律性的加密方式也是不安全的。

5、二次编码

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

6、截断绕过

当程序系统设置了后缀名检测的时候,可以通过"%00"截断来绕过。 比如:../windows/win.ini%00.jpg等价于../windows/win.ini;在Unix的系统中也可以使用Url编码的换行符%0a,也可以尝试%20。

四、常见系统文件路径

Windows:

C:\\boot.ini //查看系统版本

C:\\Windows\\System32\\inetsrv\\MetaBase.xml           //IIS配置文件

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/fd[0-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/nginx/nginx.conf

redis:

/etc/redis.conf

五、防御措施

1. 限制用户输入的路径在某一个范围内。

2. 标准化所有字符

当用户请求访问文件/目录时,直接标准化所有字符,将所有字符转换成 url 编码,这样做之后,到了服务器手上不会解析成../,就不存在目录遍历了。

3. 验证用户的输入是否在白名单那内

也就是限制用户请求资源,对于少量的文件(例如都是图像),写正则表达式批量规范请求资源的白名单,这样可以做到完美防御目录遍历漏洞。

风险通告SaltStack命令执行和目录遍历漏洞



2020年5月3日,金山云安全应急响应中心监控到国外安全团队发布了关于SaltStack的两个高危漏洞,命令执行漏洞(CVE-2020-11651)和目录遍历漏洞(CVE-2020-11652),建议受影响用户及时安装最新补丁,采取相关防护措施,避免损失。


漏洞编号

CVE-2020-11651

CVE-2020-11652

漏洞名称

SaltStack命令执行和目录遍历漏洞


危害等级

高危


漏洞描述

CVE-2020-11651:攻击者利用该漏洞构造恶意请求,可以绕过正常的Salt Master验证逻辑,调用相关未授权函数的功能,从而实现远程命令执行。

CVE-2020-11652:攻击者利用该漏洞构造恶意请求,可以获取服务器目录结构,读取任意文件。


影响版本

SaltStack < 2019.2.4

SaltStack < 3000.2


修复方案

1. 升级至最新安全版本,升级前注意进行快照备份。

2. 设置Salt Master的默认监听端口(4505 和 4506)禁止对公网开放,或仅对可信IP开放。



参考链接:

https://labs.f-secure.com/advisories/saltstack-authorization-bypass


北京金山云网络技术有限公司

2020/05/03



以上是关于目录遍历漏洞的主要内容,如果未能解决你的问题,请参考以下文章

web基础漏洞-目录遍历漏洞

如何解决 Apache Tomcat 目录遍历漏洞

Web安全篇学习笔记3

安全运维 - Windows系统应急响应

第2阶段 web安全篇 2019网络安全训练营 第六阶段 漏洞利用 6-12漏洞利用-枚举smtp用户名

WEB安全基础入门—目录遍历(路径遍历路径穿越攻击)