目录穿越
原理:
目录穿越(也被称为目录遍历/directory traversal/path traversal)是通过使用 ../ 等目录控制序列或者文件的绝对路径来访问存储在文件系统上的任意文件和目录,特别是应用程序源代码、配置文件、重要的系统文件等。
在Unix操作系统上,../ 是一个标准的返回上一级路径的语法;
在Windows操作系统上, ../ 和 ..\ 都是返回上一级的语句。
攻击:
1、利用 ../ 返回上一级来遍历任意文件: (最常用)
../文件名 (../ 的个数不定)
2、使用绝对路径
3、双写../绕过
有时候,防御措施是直接将 ../ 替换为空,可以直接采用双写/复写直接绕过:
filename=....//....//....///etc/passwd
4、URL编码绕过
. => %2e / => %2f % => %25 (双重URL编码)
5、绝对路径配合../
filename=/var/www/images/../../../etc/passwd
6、%00截断文件后缀
目录穿越绕过方案
1)进行URL编码: 点–> %2e 反斜杠–> %2f 正斜杠–> %5c 2)进行16为Unicode编码:点–> %u002e 反斜杠–> %u2215 正斜杠–> %u2216 3)进行双倍URL编码: 点–> %252e 反斜杠–> %u252f 正斜杠–> %u255c 4)进行超长UTF-8 Unicode编码: . 点–>%c0%2e %e0$40%ae %c0ae / 反斜杠–>%c0af %e0%80af %c0%af \ 正斜杠–>%c0%5c %c0%80%5c
目录穿越修复方案
1)在URL内不要使用文件名称作为参数 2)检查使用者输入的文件名是否有“…”的目录阶层字符 3)在php.ini文件中设置open_basedir来指定文件的目录 4)使用realpath函数来展开文件路径中的“./”、 “…/”等字符,然后返回绝对路径名称 5)使用basename函数来返回不包含路径的文件名称
参考:
https://blog.csdn.net/angry_program/article/details/107855078
https://blog.csdn.net/weixin_45007073/article/details/113466902
任意文件读取和下载漏洞
注:
本文几乎是搬运网上各位作者的部分文章,组成了我想要了解和学习的知识点;每一小节都有标明出处,建议阅读原文(网页原文更加详细)
标签:...,..,文件,CC,URL,穿越,斜杠,RCE,目录 From: https://www.cnblogs.com/yiyajinluo/p/16704340.html