2021-7-5目录穿越ssrf配合RFI漏洞学习笔记转
目录
什么是目录遍历?
漏洞原理
实验
0x00 基础目录遍历
0x01 绝对路径
0x02 双写../绕过
0x03 URL编码绕过
0x04 绝对路径配合../
0x05 截断文件后缀
防御
什么是目录遍历?
目录遍历(目录穿越)是一个Web安全漏洞,攻击者可以利用该漏洞读取运行应用程序的服务器上的任意文件。 这可能包括应用程序代码和数据,后端系统的登录信息以及敏感的操作系统文件。
在某些情况下,攻击者可能能够在服务器上写入任意文件,(如,FFFTP是一款小型的FTP客户端软件。FFFTP客户端没有正确地验证FTP服务器所返回的LIST命令响应中包含有目录遍历序列(斜线)的文件名,如果用户受骗从恶意的FTP服务器下载的目录包含有带有恶意文件名的文件的话,就可能导致向用户系统的任意位置写入文件)从而允许他们修改应用程序数据或行为,并最终完全控制服务器。
漏洞原理
若web要显示一个商品的图像,有时候开发者会用通过HTML加载,如:
<img src="/loadImage?filename=214.png">
使用filename参数加载图像文件,图片文件位置可能映射在 /var/www/images/ 上,所以真实的路径是 /var/www/images/214.png
这就导致了攻击者可以读取服务器上的任意文件:
https://www.*****.com/loadImage?filename=../../../etc/passwd
filename的参数值与真实路径组合起来就是:
/var/www/images/../../../etc/passwd
其等价于:
/etc/passwd
在Unix操作系统上,../ 是一个标准的返回上一级路径的语法;
在Windows操作系统上, ../ 和 ..\ 都是返回上一级的语句。
实验
0x00 基础目录遍历
查看商品的图片,可以看到是通过filename参数来确定图片的:
右键打开图片,同时抓包,可以修改filename参数值,利用 ../ 返回上一级来遍历任意文件:
filename=../../../etc/passwd
0x01 绝对路径
web网站有时候会采取目录遍历的防御措施,如过滤 ../ 上一级等关键字,然后简单的过滤通常会被绕过。有时候可以直接采用绝对路径,无须../返回上一级目录遍历:
filename=/etc/passwd
0x02 双写../绕过
有时候,防御措施是直接将 ../ 替换为空,可以直接采用双写/复写直接绕过:
filename=....//....//....///etc/passwd
如果在....//中,将../替换为空,最后的路径就变成:
....// => ../
0x03 URL编码绕过
也可以采用URL编码来绕过服务器对 . 或者 / 的检测:
. => %2c
/ => %2f
% => %25 (双重URL编码)
先尝试编码 / ,失败:
全编码,失败:
双重编码,即将%编码,成功:
0x04 绝对路径配合../
有些web在获取filename图片文件的时候,会首先判断是否以一个固定的路径开头:
那么就可以配合../来返回上一级遍历任意文件:
filename=/var/www/images/../../../etc/passwd
0x05 截断文件后缀
某些web对filename的文件类型作了限制,只有当后缀为图片时才解析
这时候就可以利用 %00 来截断:
总之,目录遍历漏洞不会仅限于一个绕过姿势,通常会配合多个姿势进行组合攻击。
防御
防止文件路径遍历漏洞的最有效方法是避免将用户提供的输入完全传递给文件系统API。
如果认为不可避免的是将用户提供的输入传递给文件系统API,则应同时使用两层防御,以防止受到攻击:
- 应用程序应在处理之前验证用户输入。理想情况下,验证应与允许值的白名单进行比较。如果所需的功能无法做到这一点,则验证应验证输入内容仅包含允许的内容,例如纯字母数字字符。
- 验证提供的输入后,应用程序应将输入附加到基本目录,并使用平台文件系统API规范化路径。验证规范化路径以预期的基本目录开头。
以下是一些简单的Java代码示例,用于根据用户输入来验证文件的规范路径:
- File file = new File(BASE_DIRECTORY, userInput);
- if (file.getCanonicalPath().startsWith(BASE_DIRECTORY)) {
- // process file
- }
2021-7-5目录穿越ssrf配合RFI漏洞学习笔记转相关推荐
- 目录穿越/遍历漏洞 -- 学习笔记
目录 什么是目录遍历? 漏洞原理 实验 0x00 基础目录遍历 0x01 绝对路径 0x02 双写../绕过 0x03 URL编码绕过 0x04 绝对路径配合../ 0x05 截断文件后缀 ...
- 游戏技能系统(Gameplay Ability System,简称GAS)配合GASDocumentation阅读学习笔记
本篇文章是针对游戏技能系统(Gameplay Ability System,简称GAS)的学习计划目录,主要记录到目前位置自身在该系统上的学习笔记. GAS是虚幻引擎官方推出的一套针对"技能 ...
- log4j linux如果日志目录不存在,Java日志库学习笔记
(未完成,待修改) 一.安装Log4j log4j的库文件可以在官方网站下载: 二.log4j.properties的目录搜索规则 在src/目录下创建一个log4j.properties文件,即LC ...
- python目录和文件的基本操作_python学习笔记(七)——文件和目录操作
目录和文件操作 语言只有和外部连起来操作才会实现更强大的功能,比如操作文件.数据库等,这样数据可以有一块单独存储的地方,而不是存放在内存中.更强大的是网络编程,当然这些后续都会学习.接下来学习pyth ...
- 2021年3月8日:MyBatis框架学习笔记02:利用MyBatis实现CRUD操作
MyBatis框架学习笔记02:利用MyBatis实现CRUD操作 在第一节课中我们在UserMapper.xml里定义了两个查询语句:findById和findAll,对应的在UserMapper接 ...
- 36篇博文带你学完opencv :python3+opencv学习笔记汇总目录(基础版)
经过几天的学习,opencv基础部分学习完啦.整理出来. OpenCV opencv学习笔记1:图片读入,显示与保存(有代码) opencv学习笔记2:图像处理基础 opencv学习笔记3:像素处理 ...
- 机器学习框架ML.NET学习笔记【1】基本概念与系列文章目录
一.序言 微软的机器学习框架于2018年5月出了0.1版本,2019年5月发布1.0版本.期间各版本之间差异(包括命名空间.方法等)还是比较大的,随着1.0版发布,应该是趋于稳定了.之前在园子里也看到 ...
- 《王道计算机组成原理》学习笔记和总目录导航
<王道计算机组成原理>学习笔记和总目录导读 本篇文章是阅读和学习<王道计算机组成原理>后总结的理论知识笔记导航,专门用于遗忘后复习 下面的文章是我在学习了<王道计算机组成 ...
- Linux 高并发学习笔记 - Linux 目录操作函数
1.6.4 Linux 目录操作函数 Linux 高并发学习笔记 - 笔记索引 文章目录 1.6.4 Linux 目录操作函数 前言 切换工作目录 查看工作目录 创建目录 重命名目录 移除目录 遍历目 ...
最新文章
- NVIDIA GPU卷积网络的自动调谐
- 5、catch中发生了未知异常,finally代码块如何应对?
- python strip
- python要学多久才可以去找工作-Python学到什么程度才可以去找工作?掌握这4点足够了!...
- Python-OpenCV-- 台式机外接摄像头pyTesseract文本框实时检测
- Exception: com.mchange.v2.c3p0.impl.NewProxyConnection cannot be cast to com.mysql.jdbc.Connection
- 数列分块入门3(查询前驱)
- ES5、ES6、ES7、ES8
- CERC2017 Gambling Guide,最短路变形,期望dp
- linux下的C语言开发(线程互斥)
- FPGA开平方的实现(三种方法)
- Codeup100000609问题 A: Jugs
- 江苏大学正版Windows和Office全家桶--UJS微软正版化服务平台
- 企业数智化升级的四个“拦路虎”
- Android studio:Button 按钮英文字符自动大写的解决方法
- Java设计一个类代表二维空间的一个点,设计一个类代表二维空间的一个圆,计算面积,,并写程序验证计算一个点(Point对象)是否在圆(Cricle对象)内
- Day 07-常用Composition API_watch监听器 和 watchEffect高级监听器
- [转]太阳致敬式瑜伽
- 国科大计算机学院推免,电子科技大学2020届保研率17.8%,主要保研本校、国科大、北大、中科大...
- android获取包名的几种方法