草庐IT

路径穿越(Path Traversal)详解

烟雨醉沉浮 2024-07-19 原文

前言

本文主要是对路径穿越漏洞进行学习总结,本身这个漏洞也并不常见,主要是多产生于php的程序。

这种类型的攻击强制访问文件、目录、 以及位于 Web 文档根目录之外的命令 或 CGI 根目录。

常用来其他读取、写入类漏洞结合。

路径穿越漏洞的分类

我个人给这种漏洞形成的原因可以分为两类
错误配置

由于带有中间代理转发性质的功能配置错误

程序本身代码存在问题

这一点十分好理解,就是代码写的有问题,逻辑简单,没有验证。

漏洞容易出现的位置

第一类:文件类参数

请求参数似乎包含文件或目录名称的,例如include=main.inc或template=/en/sidebar。

第二种:常见参数

cat,dir,action,board,date,detail,file,download,path,folder,prefix

include,page,inc,locate,show,doc,site,type,view,content,document

layout,mod,conf

第三种:域名根部

根据推测这种应该是由于配置问题导致的。

www.test.com/../../../../../../../../../../../etyc/passwd

攻击技巧

通过…/ 到上一层目录

这个是最基本,最常用的。

绝对路径遍历

以下 URL 可能容易受到此攻击:

https://testsite/get.php?f=list 
https://testsite/get.cgi?f=5 
https://testsite/get.asp?f=test

攻击者可以像这样执行此攻击:

https://testsite/get.php?f=/var/www/html/get.php 
https://testsite/get.cgi?f=/var/www/html/admin/get.inc 
https:// testsite/get.asp?f=/etc/passwd

当网络服务器返回有关网络应用程序错误的信息时,攻击者更容易猜测正确的位置(例如,带有源代码的文件的路径,然后可能会显示)。

相对路径遍历

相对路径遍历见的较多

http://example.com/index.php?page=../../../etc/passwd

利用技巧

权限探测

如果可以读取以下文件,那么至少的管理员组的用户,当然前提是有administrator这个用户,没有的话,就要猜测用户了。

    c:/documents and settings/administrator/ntuser.ini
    c:/documents and settings/administrator/desktop/desktop.ini
    c:/users/administrator/desktop/desktop.ini
    c:/users/administrator/ntuser.ini

如果可以读取以下文件,则读取文件的进程拥有LocalSystem权限;

    c:/system volume information/wpsettings.dat
    C:/Windows/CSC/v2.0.6/pq
    C:/Windows/CSC/v2.0.6/sm
    C:/$Recycle.Bin/S-1-5-18/desktop.ini

关于LocalSystem:LocalSystem是预设的拥有本机所有权限的本地账户,这个账户跟通常的用户账户没有任何关联,也没有用户名和密码之类的凭证。这个服务账户可以打开注册表的HKEY_LOCAL_MACHINE\Security键,当LocalSystem访问网络资源时,它是作为计算机的域账户使用的。

绕过

16 位 Unicode 编码

. = %u002e
/ = %u2215
\ = %u2216

UTF-8编码

. = %c0%2e, %e0%40%ae, %c0ae
/ = %c0%af, %e0%80%af, %c0%2f
\ = %c0%5c, %c0%80%5c

UTF-7编码

UTF-7(7 位 Unicode 转换格式)是一种可变长度字符编码,

超长的 UTF-8 统一码编码

.: %c0%2e, %e0%40%ae, %c0ae
\: %c0%af, %e0%80%af, %c0%2f
/: %c0%5c, %c0%80%5c

双层url编码

. = %252e
/ = %252f
\ = %255c

非常规组合
“.”、“/”、“”,三个符号随意的组合多次(随机0-3次比较好感觉,因为看到的很多例子大概就是这样),进行绕过,如必要还可以添加其他符号进行尝试。下面是示例。也就是有点进行FUzz的意思

....//....//etc/passwd
..///....//etc/passwd
/%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../etc/passwd
..././
...\.\
..;/

%00截断

有些程序会在读取内容是添加指定后缀,使用%00可以进行截断,忽视后面的内容

http://example.com/index.php?page=../../../etc/passwd%00

PHP 修复了该问题 在版本 5.3.4 中。

"?"截断

跟上诉情况相同,在最后添加?也许同样会有效果

修复

  1. 限制目录访问
  2. 检查用户输入

参考

https://code.google.com/archive/p/teenage-mutant-ninja-turtles/wikis/AdvancedObfuscationPathtraversal.wiki

有关路径穿越(Path Traversal)详解的更多相关文章

  1. ruby-on-rails - Rails - 使用/自定义 URL : '/dashboard' 指定根路径 - 2

    如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b

  2. ruby - 如何根据长度将路径数组转换为嵌套数组或散列 - 2

    我需要根据字符串路径的长度将字符串路径数组转换为符号、哈希和数组的数组给定以下数组:array=["info","services","about/company","about/history/part1","about/history/part2"]我想生成以下输出,对不同级别进行分组,根据级别的结构混合使用符号和对象。产生以下输出:[:info,:services,about:[:company,history:[:part1,:part2]]]#altsyntax[:info,:services,{:about=>[:company,{:history=>[:part1,:pa

  3. ruby-on-rails - 如何播种图像的路径? - 2

    Organization和Image具有一对一的关系。Image有一个名为filename的列,它存储文件的路径。我在Assets管道中包含这样一个文件:app/assets/other/image.jpg。播种时如何包含此文件的路径?我已经在我的种子文件中尝试过:@organization=...@organization.image.create!(filename:File.open('app/assets/other/image.jpg'))#Ialsotried:#@organization.image.create!(filename:'app/assets/other/i

  4. Ruby 和指南针路径与 yeoman 项目 - 2

    我安装了ruby​​、yeoman,当我运行我的项目时,出现了这个错误:Warning:Running"compass:dist"(compass)taskWarning:YouneedtohaveRubyandCompassinstalledthistasktowork.Moreinfo:https://github.com/gruUse--forcetocontinue.Use--forcetocontinue.我有进入可变session目标的路径,但它不起作用。谁能帮帮我? 最佳答案 我必须运行这个:geminstallcom

  5. 对象的 Ruby 方法查找路径 - 2

    是否有内置的Ruby方法或众所周知的库可以返回对象的整个方法查找链?Ruby查看一系列令人困惑的类(如thisquestion中所讨论)以查找与消息对应的实例方法,如果没有类响应消息,则调用接收方的method_missing。我将以下代码放在一起,但我确信它遗漏了某些情况或者它是否100%正确。请指出任何缺陷并指导我找到一些更好的代码(如果存在)。defmethod_lookup_chain(obj,result=[obj.singleton_class])ifobj.instance_of?Classreturnadd_modules(result)ifresult.last==B

  6. ruby-on-rails - rails 中的路径解析 - 2

    我正在寻找这样解析路由路径的方法:ActionController::Routing.new("post_path").parse#=>{:controller=>"posts",:action=>"index"}应该和url_for相反更新我发现:Whatistheoppositeofurl_forinRails?Afunctionthattakesapathandgeneratestheinterpretedroute?ActionController::Routing::Routes.recognize_path("/posts")所以现在我需要将posts_path转换为“/p

  7. 物联网MQTT协议详解 - 2

    一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su

  8. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

  9. python3获取路径方法 - 2

    一:os.path.dirname(__file__)和os.getcwd()importospath=os.path.dirname(__file__)print("os.path.dirname(__file__)方法的结果{}".format(path))path=os.getcwd()print("os.getcwd()方法的结果{}".format(path))该脚本路径为:/User/xxx/Work1.在当前目录/User/xxx/Work运行程序结果:2.在上一级目录/User/xxx运行程序:3.在其他目录/User/xxx/Work/python运行程序:\在其他目录/Us

  10. ruby-on-rails - 更改回形针附件上集成测试的路径 - 2

    Paperclip的文档提到,您可以通过将以下代码放在test.rb环境文件中来更改测试的上传路径:Paperclip::Attachment.default_options[:path]="#{Rails.root}/spec/test_files/:class/:id_partition/:style.:extension"我遇到的问题是附件在模型中设置了路径,不会被覆盖:has_attached_file:photo,path:':attachment/:id/:style.:extension'当我运行测试时,文件会上传到/photo/文件夹而不是/spec/test_file

随机推荐