目录遍历(Directory traversal)
笔者burpsuite的在线安全学院的目录遍历学习笔记。限于本人水平,笔记质量不是很高,假如有看到的大佬轻喷,很多地方是Google翻译的。
文章目录
- 什么是目录遍历?
- 通过目录遍历读取任意文件
- Lab: File path traversal, simple case
- 利用文件路径遍历漏洞的常见障碍
- Lab: File path traversal, traversal sequences blocked with absolute path bypass
- Lab: File path traversal, traversal sequences stripped non-recursively
- Lab: File path traversal, traversal sequences stripped with superfluous URL-decode
- Lab: File path traversal, validation of start of path
- Lab: File path traversal, validation of file extension with null byte bypass
- 如何防范目录遍历攻击
什么是目录遍历?
目录遍历(也称为文件路径遍历)是一个Web安全漏洞,攻击者可以利用该漏洞读取运行应用程序的服务器上的任意文件。这可能包括应用程序代码和数据,后端系统的凭据以及敏感的操作系统文件。在某些情况下,攻击者可能能够在服务器上写入任意文件,从而允许他们修改应用程序数据或行为,并最终完全控制服务器。
通过目录遍历读取任意文件
考虑一个显示要出售商品图像的购物应用程序。图像通过一些HTML加载,如下所示:<img src="/loadImage?filename=218.png">
该loadImage网址将filename参数,返回指定的文件的内容。映像文件本身存储在该位置的磁盘上/var/www/images/。为了返回图像,应用程序将请求的文件名附加到此基本目录,并使用文件系统API读取文件的内容。在上述情况下,应用程序将从以下文件路径读取:/var/www/images/218.png
该应用程序没有针对目录遍历攻击采取任何防御措施,因此攻击者可以请求以下URL从服务器的文件系统中检索任意文件:https://insecure-website.com/loadImage?filename=../../../etc/passwd
这将导致应用程序从以下文件路径读取:
/var/www/images/../../../etc/passwd
该序列…/在文件路径中有效,并且意味着在目录结构中上一级。三个连续的…/序列从/var/www/images/
文件系统根目录开始,因此实际读取的文件是:/etc/passwd
在基于Unix的操作系统上,这是一个标准文件,其中包含在服务器上注册的用户的详细信息。
在Windows上,…/和和…\都是有效的目录遍历序列,而检索标准操作系统文件的等效攻击将是:
https://insecure-website.com/loadImage?filename=..\..\..\windows\win.ini
Lab: File path traversal, simple case
- 抓一个图片请求,payload
../../../etc/passwd
利用文件路径遍历漏洞的常见障碍
许多将用户输入置于文件路径中的应用程序实施了某种针对路径遍历攻击的防御措施,通常可以绕开这些防御措施。
如果应用程序从用户提供的文件名中剥离或阻止目录遍历序列,则可能可以使用多种技术绕过防御。
您可能可以使用文件系统根目录的绝对路径(例如)filename=/etc/passwd直接引用文件,而无需使用任何遍历序列。
Lab: File path traversal, traversal sequences blocked with absolute path bypass
- 同上,抓一个图片请求,这个lab是需要绝对路径,所以payload为
/etc/passwd
您可能可以使用嵌套的遍历序列,例如....//
或....\/
,当内部序列被剥离时,它们将还原为简单的遍历序列。
Lab: File path traversal, traversal sequences stripped non-recursively
- 因为通过非递归的方式过滤特殊字符,所以可以双写过。payload
....//....//....//etc//passwd
您可能可以使用各种非标准编码(例如..%c0%af
或..%252f
)来绕过过滤
Lab: File path traversal, traversal sequences stripped with superfluous URL-decode
- payload
..%252f..%252f..%252fetc/passwd
如果应用程序要求用户提供的文件名必须以所需的基本文件夹(例如)开头/var/www/images,则可以包括所需的基本文件夹,后跟适当的遍历序列。例如:
filename=/var/www/images/../../../etc/passwd
Lab: File path traversal, validation of start of path
- payload
/../../../etc/passwd
如果应用程序要求用户提供的文件名必须以预期的文件扩展名(例如)结尾.png,则可能可以使用空字节有效地终止所需扩展名之前的文件路径。例如:
filename=../../../etc/passwd%00.png
Lab: File path traversal, validation of file extension with null byte bypass
- payload
../../../etc/passwd%00.jpg
如何防范目录遍历攻击
防止文件路径遍历漏洞的最有效方法是避免将用户提供的输入完全传递给文件系统API。可以重写许多执行此操作的应用程序功能,以更安全的方式提供相同的行为。
如果认为不可避免的是将用户提供的输入传递给文件系统API,则应同时使用两层防御来防止攻击:
- 应用程序应在处理之前验证用户输入。理想情况下,验证应与允许值的白名单进行比较。如果所需的功能无法做到这一点,则验证应验证输入内容仅包含允许的内容,例如纯字母数字字符。
- 验证提供的输入后,应用程序应将输入附加到基本目录,并使用平台文件系统API规范化路径。它应验证规范化路径以预期的基本目录开头。
以下是一些简单的Java代码示例,用于根据用户输入来验证文件的规范路径:
File file = new File(BASE_DIRECTORY, userInput);
if (file.getCanonicalPath().startsWith(BASE_DIRECTORY)) {// process file
}
目录遍历(Directory traversal)相关推荐
- 【常见Web应用安全问题】---4、Directory traversal
Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见的一些. 常见Web应用安全问题安全性问题的列表: 1.跨站脚本攻击(CSS or XSS, Cross Si ...
- 3 Directory traversal
3 Directory traversal目录遍历攻击 目录 3 Directory traversal目录遍历攻击 一.What 二.通过目录遍历读取任意文件 Lab: File path trav ...
- Zip Slip目录遍历漏洞已影响多个Java项目
\ 看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料! \ \\ 近日,专注于开源及云安全监控防范工作的 Snyk 公司披露了一种可能会造成任意文件被覆写的安 ...
- python遍历文件目录_python目录遍历
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我曾经写了c语言的遍历目录.php的遍历目录,今天来说一下python遍历目录, ...
- 聊聊directory traversal attack
序 本文主要研究一下directory traversal attack及其防范 directory traversal attack 又称Path Traversal attack,即目录遍历攻击, ...
- python open 函数漏洞_python和django的目录遍历漏洞
(20210205学习笔记) 攻击者通过请求 http://220.181.185.228/../../../../../../../../../etc/sysconfig/network-scrip ...
- python和django的目录遍历漏洞(任意文件读取)
1. 什么是目录遍历漏洞 "目录遍历漏洞"的英文名称是Directory Traversal 或 Path Traversal.指攻击者通过在URL或参数中构造 ../ ..%2F ...
- 目录遍历工具DotDotPwn安装使用
1. DotDotPwn介绍 DotDotPwn是一个模糊测试工具,用于发现软件中的遍历目录漏洞,例如HTTP/FTP/TFTP服务器,Web平台的应用程序(如CMS,ERP,博客等). DotDot ...
- C++目录遍历:使用第三方库boost.filesystem等
1. opencv 目录文件遍历 注释:2014 0814 这个代码是基于java的,Java使用托管代码进行目录管理,C++就不那么跨平台了. 原文链接:http://blog.csdn.net/z ...
最新文章
- 让你IDA Pro 快速上手使用
- 阮一峰react demo代码研究的学习笔记 - demo7 debug - event handling
- 刷新本地的DNS缓存数据
- 彻底理解被称为二叉树神级遍历的莫里斯(Morris)算法
- Ubuntu20.04下使用C++ OpenCV单应性矩阵
- WDM驱动安装和卸载
- 计算机诗人 原理,自动作诗器,藏头诗软件生成器原理是什么?
- 如何将照片裁剪为圆形?教你一招图片裁剪的技巧
- win7计算机闪屏,win7电脑闪屏是什么原因
- HP光影精灵3 TPN-Q193显卡驱动安装不上,鲁大师检测不到显卡
- Java实战项目《瑞吉外卖》
- html 纵向滚动条,css设置纵向滚动条
- vConsole:H5控制台调试工具
- ArcGIS教程:曲率
- RGB565转换为RGB88,并作线性补偿
- python中pass语句的出现是为了保持程序结构的完整性_pass语句的出现是为了保持程序结构的完整性。( )_学小易找答案...
- java 后端开发技能_Java 后端开发,应该重点学习哪些知识/技能?
- php 时间戳转化为日期,PHP 时间戳转换为时间(多久前)
- mysql delete语句非常耗时_解决项目中MySQL数据库执行删除语句时间太长的问题
- 计算机系统2022期末
热门文章
- 关于AD与KiCad绘制PCB的一点看法
- 微型计算机8字节,八位字节是什么意思
- Unity SpriteAtlas实战使用
- Sparrow操作系统的回顾与总结
- 大数据小项目之电视收视率企业项目03
- JAVA使用RXTX编写串口调试工具-代码分析
- Ember.js如何与后端服务交互?adapter、store、ember data关系揭秘 1
- android+5.1+root,最新的安卓5.1.1 ROOT教程(不需要刷第三方内核)
- TopoJSON格式规范说明
- 微信小程序获取二维码scene报错40129