漏洞之目录遍历漏洞

目录遍历漏洞

目录遍历, 也叫路径遍历, 由于web服务器或者web应用程序对用户输入的文件名称的安全性验证不足而导致的一种安全漏洞,使得攻击者通过利用一些特殊字符就可以绕过服务器的安全限制,访问任意的文件 (可以是web根目录以外的文件),甚至可以执行系统命令。

 

原理

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

比如:http://www.***.com/index.php?file=image.jpg

当服务器处理传送过来的image.jpg文件名后,Web应用程序即会自动添加完整路径,形如“d://site/images/image.jpg”,将读取的内容返回给访问者。

如果程序对文件名称的安全性验证不足, 攻击者会采用../../../ect/passwd的文件名, 导致访问非法文件。

 

漏洞产生环境(原因)

网站应用提供文件下载, 其中文件储存在服务器, 网站脚本利用代码获取本网站的目录文件并将其显示在网站界面上, 如果对代码没有相关的安全验证, 将导致文件目录泄露漏洞。

 

分类

1. 加密型传递的参数

在web程序中, 对于传递的数据进行加密后再提交, 比如:

http://www.***.com/downfile.jsp?file=ZmfdWq==

其中参数file的数据采用Base64加密, 而攻击中只需要将数据进行相应的解密即可入侵

也就是, 采用一些规律性的加密方式也是不安全的

 

2. 编码绕过

采用不同的编码进行过滤型绕过, 比如通过对参数进行url编码提交来绕过:

http://www.***.com/downfile.jsp?file=%66%1E%23%16%5A

 

3. 目录限定绕过

有些web软件通过限定目录权限来分离, 当然这样也是不可取的, 攻击者可以通过某些特定的符号来绕过

比如, 根目录/被限定了权限, 但是可以通过~来进入根目录下的目录 (假设~家目录有权限):

~/../boot   等价于  /boot

 

4. 绕过文件后缀过滤 (截断上传原理)

当web程序设置了后缀名检测(黑名单或白名单)的时候, 可以通过%00截断来绕过:

../../../boot.ini%00.jpg   ==>  ../../../boot.ini

 

5. 绕过来路验证

来路验证, 也可以理解为跳转验证,  即当前页面的打开是由于哪里的操作生成的, 确保用户在自己的网站上下载, 防止盗链(接)

比如,  直接打开baidu.com, 这时候的来路是null;

如果从baidu.com的网页中打开hao123.com, 那么hao123.com的来路就是baidu.com

很多网站都有来路验证, 就像我们经常在下载文件的时候遇到:  

点击下载链接之后, 由于需要跳转到新的下载页面, 浏览器或者web程序处于安全考虑, 会提示是否确认跳转到未知链接。

 Http Refer:  是header的一部分, 当游览器向web服务器发送请求的时候, 一般会带上Refer, 告诉服务器是从那个页面跳转过来的

如在php中, 通过$_SERVER['SERVER_REDERER']获取当前页面的来路。

 

 

修复以及预防

1. 对传来的参数做过滤

2. 文件ID使用随机数命名

3. 文件路径保存至数据库,用户提交文件对应ID下载文件,路径识别拼接都在后端,黑客无法操作

4. 下载文件之前做权限判断,设置好目录权限。

虽然给定引用未提及Nginx目录遍历漏洞,但一般而言,Nginx目录遍历漏洞的原理、危害与修复方法如下: ### 漏洞原理 Nginx目录遍历漏洞通常是由于对用户输入的URL路径缺乏严格的过滤和验证。当用户请求的URL包含特殊字符(如../)时,攻击者可以利用这些字符来突破应用程序原本设定的目录限制,访问服务器上其他目录的文件。例如,正常情况下用户只能访问网站根目录下的文件,但攻击者可以通过构造包含../的URL,向上遍历目录,访问到系统的敏感文件。 ### 危害 - **敏感信息泄露**:攻击者可以利用该漏洞读取服务器上的敏感文件,如配置文件(包含数据库连接信息、密钥等)、用户数据文件等,从而获取重要的商业信息或用户隐私数据。 - **服务器被入侵**:如果攻击者能够读取到关键的系统文件,可能会进一步利用这些信息进行攻击,如通过修改配置文件来获取服务器的控制权,或者上传恶意脚本在服务器上执行。 - **数据篡改**:攻击者还可能通过该漏洞修改服务器上的文件内容,例如篡改网站页面,植入恶意代码或广告,影响网站的正常运营和用户体验。 ### 修复方法 - **输入验证**:对用户输入的URL路径进行严格的验证和过滤,确保不包含恶意的目录遍历字符(如../)。可以使用正则表达式来检查输入的合法性。以下是一个简单的Python示例代码用于验证URL路径: ```python import re def validate_url_path(path): pattern = r'^[a-zA-Z0-9_/. -]+$' return bool(re.match(pattern, path)) url_path = '/example/path' if validate_url_path(url_path): print("Valid URL path") else: print("Invalid URL path") ``` - **配置Nginx**:在Nginx配置文件中,可以通过设置正确的目录权限和访问规则来防止目录遍历攻击。例如,使用`alias`或`root`指令时,确保路径的安全性。同时,可以使用`try_files`指令来控制文件的访问,避免直接暴露文件系统路径。 ```nginx location /example { alias /var/www/example; try_files $uri $uri/ =404; } ``` - **更新Nginx版本**:及时更新Nginx到最新版本,因为新版本通常会修复已知的安全漏洞。Nginx官方会不断改进其安全机制,修复可能存在的目录遍历漏洞
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值