Ole*_*nge 22 rsync vulnerability
是的,我知道你在想什么:“到底是谁给他们的文件命名的`a`b
?”
但是让我们假设您确实有一个名为`a`b
(可能是由疯狂的 Mac 用户创建的 - 显然不是您创建的)的文件,并且您想要rsync
该文件。显而易见的解决方案:
rsync server:'./`a`b' ./.;
rsync 'server:./`a`b' ./.;
Run Code Online (Sandbox Code Playgroud)
给出:
bash: line 1: a: command not found
rsync: [sender] link_stat "/home/tange/b" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1865) [Receiver=3.2.7]
rsync: [Receiver] write error: Broken pipe (32)
Run Code Online (Sandbox Code Playgroud)
甚至:
rsync server:'./`a`b' ./.;
rsync 'server:./`a`b' ./.;
Run Code Online (Sandbox Code Playgroud)
rsync
我应该运行什么命令?
bash: line 1: a: command not found
rsync: [sender] link_stat "/home/tange/b" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1865) [Receiver=3.2.7]
rsync: [Receiver] write error: Broken pipe (32)
Run Code Online (Sandbox Code Playgroud)
Chr*_*own 33
手动二分后,这是 rsync 中的一个错误,并通过提交 5c93dedf4538 ("Add backtick to SHELL_CHARS.")修复,它将出现在即将发布的 rsync 3.2.8(尚未发布)中。它被3.2.4 中的提交 6b8db0f6440b (“使用反斜杠转义添加 arg-protection 惯用法”)破坏。
作为缓解措施,存在使用旧 arg 解析行为 ( --old-args
) 的选项:
rsync --old-args 'server:./\`a\`b' .
Run Code Online (Sandbox Code Playgroud)
Ole*_*nge 12
是版本问题。似乎不取决于服务器版本,而是取决于客户端。
v3.2.3 和 v3.2.7 之间出现了一些问题。
好的:
$ rsync-v3.2.3 --rsync-path=rsync-v3.2.7 'server:./\`a\`b' ./.;
$ rsync-v3.2.3 --rsync-path=rsync-v3.2.3 'server:./\`a\`b' ./.;
$ rsync-v3.2.3 --rsync-path=rsync-v3.2.3 server:./"'"'`a`'"'"b ./.;
Run Code Online (Sandbox Code Playgroud)
失败:
$ rsync-v3.2.7 --rsync-path=rsync-v3.2.7 'server:./\`a\`b' ./.;
bash: line 3: a\: command not found
rsync: [sender] link_stat "/home/tange/\b" failed: No such file or directory (2)
$ rsync-v3.2.7 --rsync-path=rsync-v3.2.3 'server:./\`a\`b' ./.;
bash: line 3: a\: command not found
rsync: [sender] link_stat "/home/tange/\b" failed: No such file or directory (2)
$ rsync-v3.2.3 --rsync-path=rsync-v3.2.3 'server:./`a`b' ./.;
bash: line 1: a: command not found
rsync: [sender] link_stat "/home/tange/b" failed: No such file or directory (2)
$ rsync-v3.2.3 --rsync-path=rsync-v3.2.7 'server:./`a`b' ./.;
bash: line 1: a: command not found
rsync: [sender] link_stat "/home/tange/b" failed: No such file or directory (2)
Run Code Online (Sandbox Code Playgroud)
但说真的:这似乎是一场即将发生的灾难,你需要引用`
两次。
感谢@dhag 指出这个问题。
不幸的是,它没有回答如何使用 v3.2.7 版本进行传输。