在硬编码的tar命令中注入参数

时间:2011-08-15 13:53:20

标签: linux shell tar code-injection

我正在使用linux软件解决方案,该解决方案使用tar命令备份大量数据。 硬编码到调用tar的二进制文件中的命令是:

/bin/tar --exclude "/backup" --exclude / --ignore-failed-read -cvjf - /pbackup 2>>'/tar_err.log' |  split -b 1000m - '/backup/temp/backup.tar.bz2'

没有机会改变命令,因为它是被编码的。它使用bzip2来压缩数据。当使用参数--use-compress-prog = pbzip2(使用所有CPU内核)时,我经历了强劲的性能提升(高达60%)。 通过将bzip2从/ bin / bzip2符号链接到pbzip2二进制文件,我试图欺骗软件,但是在监视进程时它仍然使用bzip2,因为我将它内置到tar中。

我知道这是一个棘手的问题,但有没有办法利用pbzip2而不改变外部调用的命令?

我的系统是Debian Sequeeze。

非常感谢!

2 个答案:

答案 0 :(得分:1)

危险:未来的丑陋解决方案;在继续之前备份二进制文件

首先,检查硬编码字符串是否易于访问:在二进制文件上使用strings,看看它是否显示您所说的字符串(可能是多个部分,例如/bin/tar--exclude--ignore-failed-read,...)。

如果成功,请抓住您选择的十六进制编辑器,打开二进制文件并查找硬编码字符串;如果它分成几个部分,你需要的那个是包含/bin/tar的那个;使用一些任意三个字母的名称覆盖tar,例如fkt f a k e t ar;快速Google搜索没有显示{{1}的任何结果},所以我们应该是安全的。)

该程序现在应该调用/usr/bin/fkt而不是常规/usr/bin/fkt

现在,将tar这样的脚本放入:

/bin

使用您之前选择的名称(#!/bin/sh /bin/tar --use-compress-prog=pbzip2 $* )调用它并正确设置权限(它们应为755并由fkt拥有)。这个脚本只需要获取它获得的所有参数并调用真实的root,在它们前面添加你需要的参数。


我在评论中建议的另一个解决方案可能是为应用创建tar,将chroot重命名为其他名称(tar,也许?)并调用上面的脚本realtar(显然现在您应该将脚本中的tar更改为/bin/tar)。

如果程序没有经常更新并且第一次尝试就有效,我可能会选择第一个解决方案,设置和维护chroot并不好玩。

答案 1 :(得分:0)

为什么不将/ bin / tar移动到(比方说)/ bin / tar-original

然后创建一个脚本/ bin / tar来做你想做的任何事情。