Ruby脚本相对路径读取依赖文件的异常现象咨询
关于Ruby脚本相对路径读取文件的问题解答
核心原因很直接:Ruby中使用相对路径读取文件时,基准是你执行脚本时的当前工作目录(CWD),而不是脚本本身所在的目录。
- 你在
/tmp目录下执行ruby /opt/update_dependencies.rb时,当前工作目录是/tmp,脚本里的相对路径dependencies.yml就会指向/tmp/dependencies.yml,自然会读取你在/tmp创建的文件。 - 如果脚本想要固定读取自身所在目录的文件,需要用
__dir__变量(Ruby 2.0及以上版本支持)来获取脚本的绝对路径,再拼接文件名,示例代码:
def list_from_file # __dir__ 返回当前脚本所在目录的绝对路径 target_file = File.join(__dir__, "dependencies.yml") # 后续读取target_file即可 end
这种场景在CTF里属于典型的相对路径劫持漏洞,攻击者可以通过在可控目录构造恶意文件,让脚本执行时加载恶意内容,进而实现代码执行或权限提升。
内容的提问来源于stack exchange,提问作者xhi4m
相关产品推荐
相关产品推荐

