不得不说Linux还是安全人员的必备品。本题有两种方法,一种是binwalk提取,然后脚本跑。还有一种是挂载磁盘,然后脚本跑。 其实这两种方法都是提取出磁盘文件的内容,只是binwalk的自动化程度更高。但最原始的方法也不能忘记啊 首先binwalk sos看看这个文件是个啥?解题链接:http://www.shiyanbar.com/ctf/1850
从第一行可知,这个文件是一个linux EXT的文件系统,要是文件系统,我们就可以挂载到本机。具体操作如下:
sudo mkdir /home/xxx/sos sudo mount -w sos /home/xxx/sos cd /home/xxx/sos ls这时我们可以看到文件夹中有242个压缩包形式的东西,但是解压时会出现错误,问题是因为压缩包的名称和压缩包内文件名重复,导致无法解压成功。将b这些文件拷贝到自己的文件目录下,批量重命名为1.gz,2.gz ...的形式,然后全部解压到当前目录 之所以拷贝到自己文件目录的原因是,挂载的文件系统有大小限制,超过文件系统最大值,就无法继续向其中写入文件,所以需要拷贝到自己的本地文件系统中。 上面的所有步骤的操作,其实就完成了binwalk -e sos的操作,但是对于没有安装binwalk程序的同学来说,这种方式也可以进行文件的获取。 可以看到解压出来的每一个文件都只有一字节,随意打开其中的一个文件,可以看到可见字符,说明这个可能就是让我们将所有文件中的字符拼接起来。 那接下来就十分简单了,直接读取并拼接就好 代码如下:
str = '' for i in range(1,243): f = open('%d'%i,'rb') line = f.read() str +=line f.close() print str最后运行得到的结果如下
得到flag后别忘记把文件系统卸载哟
df -h
umount /home/eumeniders/sos大功告成