Linux 在硬编码tar命令中注入参数
我正在使用一个linux软件解决方案,它使用tar命令备份大量数据。 硬编码为调用tar的二进制文件的命令是:Linux 在硬编码tar命令中注入参数,linux,shell,tar,code-injection,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压缩数据。在使用参数时,我体
/bin/tar --exclude "/backup" --exclude / --ignore-failed-read -cvjf - /pbackup 2>>'/tar_err.log' | split -b 1000m - '/backup/temp/backup.tar.bz2'
没有机会更改该命令,因为它已被加密。它使用bzip2压缩数据。在使用参数时,我体验到了强大的性能提升(高达60%),即使用CompressProg=pbzip2,它利用了所有CPU核。
通过将bzip2从/bin/bzip2符号链接到pbzip2二进制文件,我试图欺骗软件,但是在监视进程时,它仍然使用bzip2,因为我发现它内置于tar中
我知道这是一个棘手的问题,但是有没有办法在不改变这个外部调用的命令的情况下使用pbzip2
我的系统是Debian Sequeeze
非常感谢 危险:前方的丑陋解决方案;在继续之前备份二进制文件
首先,检查硬编码字符串是否易于访问:在二进制文件上使用字符串,并查看它是否显示您所说的字符串(可能会分为多个部分,例如/bin/tar
,--排除,--忽略失败的读取
,…)
如果成功的话,抓取你选择的十六进制编辑器,打开二进制文件并查找硬编码字符串;如果它被分成几个部分,您需要的是包含/bin/tar
的部分;使用任意三个字母的名称覆盖tar
,例如fkt
(伪造tar;快速谷歌搜索没有找到/usr/bin/fkt
,因此我们应该是安全的)
程序现在应该调用您的/usr/bin/fkt
,而不是常规的tar
现在,在/bin
中放入如下脚本:
#!/bin/sh
/bin/tar --use-compress-prog=pbzip2 $*
使用您之前选择的名称(fkt
)调用它,并正确设置权限(权限应为755,并由root
所有)。这个脚本只需要获取它得到的所有参数,并调用realtar
,在它们前面添加您需要的参数
我在评论中建议的另一个解决方案可能是为应用程序创建一个chroot
,将tar
重命名为其他名称(realtar
,可能?),并调用上面的脚本tar
(显然现在您应该将脚本中的/bin/tar
更改为/bin/realtar
)
如果程序不经常更新,并且第一次尝试时就成功了,我可能会选择第一个解决方案,设置和维护chroots并不有趣。为什么不将/bin/tar移动到(比如)/bin/tar原始版本
然后创建一个脚本/bin/tar,让它做任何你想做的事情。你可以chroot
整个过程,放入你的“假”/bin/
一个tar
脚本,它注入你的附加参数,并将任务转发给“真”tar
,但是这种努力可能并不值得,只有在你不打算在机器上使用tar
的情况下,这才是一个可行的解决方案——这是不太可能的;此外,对tar
包的每次更新都会覆盖您的脚本(或者,更糟糕的是,会因一些奇怪的dpkg
错误而失败)。是的,我也考虑过这一点,但正如Matteo所说,这将导致我系统上几乎所有其他内容都不兼容。无论如何,谢谢。非常聪明的解决方案,谢谢。我按照您的指示,找到了--ignore failed read字符串,添加了pbzip2字符串,然后收到警告说此操作将更改文件大小,忽略并尝试执行,结果是:Segmentation fault。这是一个很好的尝试,那么我们又能做什么来让二进制工作呢?我明确地说只修改<代码> /BI/TAR < /Code >字符串,并且只覆盖字符串,因为在二进制的中间插入字符使得它不起作用(改变数据段中的偏移量,但不修复代码中的偏移)。如果您进行了备份,请先还原它,否则请尝试使用十六进制编辑器还原二进制文件的先前状态。无论如何,您没有找到/bin/tar
字符串吗?或者,更简单地说,tar
?(要通过strings
显示,您必须将其最小字符串长度更改为3)好的,对不起。我改变了它,二进制代码又开始工作了。但是,现在根本不创建存档。从shell调用fkt将显示正确的tar答案。奇怪<代码>“/bin/fkt”--exclude“/backup”--exclude/--ignore failed read-cvjf-/root 2>>”/tar|u err.log'| split-b 1000m-'/backup/temp/backup.tar.bz2'
现在是命令。tar_err.log打印:/bin/tar:kompressionoptionen schließen sich gegenseitig aus。»/bin/tar——帮助«订单»/bin/tar——用法«gibt weitere Informationen。这意味着压缩方法不能一起工作?奇怪。