我正在进行渗透测试捕获标志训练练习,发现一个名为“备份”的文件。我检查了“备份”的文件类型,发现它是 gzip 压缩的。我将其解压缩到一个名为“test”的文件。然后我做了“cat test”,发现我正在查看一个 .bashrc 文件。但我在那里没有看到任何有用的东西,所以被困住了。
最终我通过观看剧透发现文件测试的文件类型是tar存档,提取它给了我我需要的东西。
我感到困惑的是,为什么对 tar 存档执行 cat 时会显示存档中的一个随机文件(或者可能不是随机的,但可能是第一个文件),并且实际上没有任何迹象表明该文件中的内容比我所看到的更多(多得多)。这是怎么回事?cat 如何知道在一个文件之后停止?这与 tar 的编码方式有关吗?
我想了解发生了什么事。
答案1
我不会直接回答您的答案,但会为您提供工具来帮助您弄清楚发生了什么。
在进一步操作之前,我建议您制作当前.bashrc
文件的备份副本,或者(最好)在您所在位置以外的另一个目录中执行以下操作$HOME
。
比较与实验
您可以创建文本文件的 tar 文件(未压缩)并cat
对其执行操作。您将在第一行看到一些有趣的信息:将其与您的backup
文件进行比较。
如果您提取非 tar 文件(例如.bashrc
),您将得到以下内容:
$ tar xvf .bashrc
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors
正如您所说,提取backup
已工作的文件,没有警告消息或错误,看来该文件是一个 tar 存档。
file
将成为你的朋友
在进行任何提取之前,您可以使用 file 命令。它将指示您文件的类型:
$ file backup.tar
backup.tar: POSIX tar archive (GNU)
$ file .bashrc
.bashrc: ASCII text
TAR:磁带存档
这听起来很明显,但 tar 是一种文件格式,过去(并且仍然)用于从其他几个完整目录创建一个文件。这允许使用磁性磁带作为保存它们的记录介质。
你有RTFM吗?
tar
与往常一样,阅读和 的手册页file
会有所帮助。
该apropos
命令也可能有帮助,因为它是本地搜索引擎。作为另一个例子,这里是如何使用它的(请注意"
此处将搜索关键字分组为单个参数):
apropos "file type"
答案
最后(因为我是个好人),这里是包含 .bashrc 文件的 tar 文件内容的示例:
$ cat backup.tar | head
.bashrc0000644000175000017500000000711012770726533011656 0ustar myusermyuser# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac