路径遍历漏洞

漏洞定义及产生原因

定义

路径遍历也称目录遍历,这些漏洞使攻击者能够读取运行应用程序的服务器上的任意文件,这可能包括:应用程序代码和数据,后端系统的凭据,敏感的操作系统文件,在某种情况下,攻击者可能写入服务器上的任意文件,从而允许他们修改应用程序和行为,并最终完全控制服务器

原因

程序在实现上没有充分过滤用户输入的../之类的目录跳转符

例子

在这里插入图片描述

如图所示:在某一网站上访问正常思路为点击某一张图片,会将filename后面的文件名提取,拼凑完整路径,
所以如果网站对于用户输入代码无安全过滤时,我们就可以将45.jpg改为../../../etc/passwd,此时拼凑的路径就会打开该路径,获取用户信息--bp有免费靶场

常见绕过方式

1.当程序禁止路径遍历序列,可以使用绝对路径
例如:../../../../etc/passed被禁止,可以去掉../,直接访问/etc/passwd
2.非递归过滤时使用嵌套绕过--当程序过滤../时,使用....//来绕过
3.使用编码绕过,在某些情况下,在URL请求,web服务器可能会在将输入传递给应用程序之前过滤掉有关目录遍历的字符,此时就可以使用url编码甚至双重编码来绕过(编码可以使用bp的decoder模块)
4.当程序限制路径及文件夹可以构造特定遍历序列来绕过
例如:filename = /var/www/images/5.jpg,限定死目录前方,此时可以在bp中将5.jpg删掉,加../../../../etc/passwd
5.如果扩展名有限制,可采用空字节截断绕过
例如,加http/2后缀,可添加空子节来使其失效,如果在bp中找不到指定链接,可以在repeater搜索,找image后缀

防御方式

路径遍历攻击的根本原因在于应用程序设计和实施的不安全性,以及对用户输入和文件路径操作的不正确处理
防御方式:
1.输入验证和输出过滤:
   对于用户提供的输入,如文件名,URL,或包含文件路径信息的数据,使用输入验证和过滤来删除和转义任何潜在的危险字符
   如"../","..",或其他路径分隔符 ,使用正则表达式或字符串替换函数来执行删除操作,熟练掌握不同语言
 python:使用正则表达式函数如re.sub()来过滤不安全字符。re.sub(r'[V:" *?< >|]',", user_input)将前面字符串替换位空
 java:可以使用String.replace()或Pattern类来过滤不安全字符。
   String pattern = " <.* >|[& <.. />]";
   #匹配HTML标签、HTML实体字符以及包含相对路径 .. /的文本
   Pattern regex = Pattern.compile(pattern);
   Matcher matcher = regex.matcher(input);
   String sanitized = matcher.replaceAII("");
   #将匹配到的字符替换为空字符串
php:使用 str_replace()函数来过滤特殊字符。
   $safe_input = str_replace(array('/, 1',':', " ** , '?', '<', '>','l'),",$user_input);   
2.规范化文件路径
	在构建文件路径之前,规范化用户输入。这可以通过将路径分隔符替换为标准分隔符(如使用斜杠”/“而不是反斜杠"\“),
	并确保路径的开始点在应用程序的根目录之下。
	使用路径规范化函数,如os.path.normpath()(Python)或Path.GetFullPath()(C#),确保路径分隔符正确,并位于应用程序的根目录之下。
3.使用白名单,只允许特定文件或目录的访问
4.使用安全的文件路径
  避免使用用户输入直接构建文件路径,可以使用参数化查询或预编译语句来处理
5.设置安全的文件和目录权限
  对于敏感文件和目录,设置最小必要的权限,比如:只允许文件所有者或特定的用户组访问敏感文件,并且定期检查
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值