SCP指令注入

访客5年前黑客文章1332

我最近正在研讨Java文件传输,碰到了一些风趣的问题。这些问题是我在看到一篇博客中的几个示例代码中发现的。这篇文章描述了用Java履行SCP指令的体系,运用的是盛行的 *** ch库。当我通读整个代码之后,我很快就发现了他们代码中的一些问题。
  // exec 'scp -f rfile' remotely
        String command = "scp -f " + from;
        Channel channel = session.openChannel("exec");
        ((ChannelExec) channel).setCommand(command);
 
        // get I/O streams for remote scp
        OutputStream out = channel.getOutputStream();
        InputStream in = channel.getInputStream();
 
        channel.connect();
假如你之前看到过怎么安全的将参数传递为指令行,那你就会知道示例代码中的这种传递 *** 是不安全的。第二行增加恣意字符串到指令结束,而没有进行任何方式的整理,这种场景毫无疑问是会导致sql注入的。
布景信息
在深化发掘这个缝隙之前,有一些重要的布景信息咱们需求了解一下:
这条指令在服务端运转。SCP客户端是经过SSH登录到长途服务器(上面代码中有履行通道)来在服务器端履行SCP指令的。
由于运转在服务端,我并没有找到Java中好用的库来转义指令。我查了许多材料,大部分都是引荐运用Java的Process或许runtime类,但是这些只适用于本地运转的进程,在服务端是无法运转的。
发现1
在上面的示例代码中,指令应该是像下面这样的:
scp -f /some/user/provided/path
不过,由于途径在任何地方都没有进行转义或约束,所以途径也能够很轻易地被修改为下面这样:
# path = '/; touch /tmp/foo'
scp -f /; touch /tmp/foo
这样一来,就会先履行scp -f指令,然后再履行touch /tmp/foo指令。进一步研讨之后,我发现这段代码是直接从 *** ch的源码中复制粘贴过来的。这就标明这段示例代码也存在相同的缝隙。我向这个项意图保护者陈述了这个问题,我想他们要么修正这个问题,要么可能不理睬我,不过状况并不是这样的。
发现2
在我陈述了 *** ch中这个缝隙的第二天,我收到了一个回复。当我在研讨我的开始陈述时,该项意图保护者注意到OpenSSH的SCP指令和Rsync也存在相同的问题。比方履行如下指令:
scp /tmp/foo user@remotehost:/tmp/bar;touch /tmp/foo
这将会在长途服务器中履行touch /tmp/foo指令,即便参数在客户端履行了正确的转义也没用。这是由于在应用程序层面对此进行转义并不会导致在长途运转也进行转义。关于上面的比方,长途主机上的服务器会履行scp -f /tmp/bar; touch /tmp/foo指令。
Rsync的问题也相似,在向他们陈述了这个缝隙之后,他们向我介绍了一个标志(-s/–protect-args),这个标志能避免缝隙运用。
发现3
环绕这个问题,我跟OpenSSH的保护人员进行了沟通交流,他们说了几个要害点:
· 这个问题众所周知,但没有得到注重,也没有杰出的文档记载。
· SCP这个协议现已“完全被玩坏了”。
· 根据SFTP作为替代品的SCP2,从未施行。
· 更改此问题就会损坏兼容性。
· 由于支撑多种shell,他们以为在这种状况下,转义shell参数是不可能的。
作为一名很多运用SCP指令的开发者,得知SCP指令是无法修正的让我感觉到十分惊奇。我觉得他们有必要供给关于此问题的官方文档,并告知用户更好的挑选(比方SFTP或许Rsync),由于我看到的库和代码片段中没有考虑到这一点。
总结
关于个人运用,Rsync和SCP都没问题,不过关于任何运用不信赖来历或许用户供给的途径/文件名时,切记要运用STFP或许运用rsync -s。除非途径在作为指令行参数再次转义前得到充沛的转义,不然不要信赖任何来自非信赖用户输入的SCP指令。
 

相关文章

深化了解Json Web Token之实战篇

原本想用python DRF 的 JWT做,后来各种失利。终究尝试了用Php,发现十分便当。 PHP 版别 PHP 7.2.4-1+b2 (cli),也便是kali linux自带的php,至于com...

怎样使用追寻代码来发现网站之间的“相关”

前些年Lawrence Alexander颁发了一篇使用Google Analytics查找网页之间的联络联络的文章,客岁,我也宣告了一个关于若何使用Python自动开掘信息,然后将其可视化的帖子,不...

WAP:一款WEB安全检测工具

Web Application Protection(WAP)是用于源代码静态剖析和数据发掘的一个东西,WAP首要检测运用PHP(4.0版别及以上)编写的web应用程序,而且由于它的误报率很低而遭到...

谷歌为G-Suite服务布置全新反钓鱼和歹意软件检测功用

Google 为 G Suite 服务推出了全新安全功用,包括企业云核算,生产力和协作东西。 现在企业用户能够运用 Gmail 来绑定企业自定义域名,并进行商务和企业内部的邮件联络。 而G Suite...

MySQL怎么避免SQL注入

 假如您经过网页获取用户输入的 数据 并将其刺进一个MySQL数据库,那么就有可能发生SQL注入安全的 问题 。 本章节将为咱们介绍怎么避免SQL注入,并经过脚原本过滤SQL中注入的字符。  所谓SQ...

在Microsoft Edge中完成DOM树

DOM是Web渠道编程模型的根底,其规划和功用直接影响着浏览器管道(Pipeline)的模型,可是,DOM的前史演化却远不是一个简略的工作。 在曩昔三年中,微软的安全专家们早现已开端在Microsof...