[Mysterious-GIF]
Time: 2021-2-28
Author: badbird
答题环境:kali
题目资源只有一个GIF
上次学习vulnhub的靶场get到了strings命令的强大之处,所以决定先尝试用strings命令试一下看看能不能得到有用的信息
在元数据区发现了异常信息
很明显第三行是十六进制数据,转为字符串看下它是什么
目前看不出来是什么。
再回到文件分析的起点,使用binwalk命令分离提取这个GIF文件
出来个zip文件,继续binwalk
得到了256个256字节的.enc文件,那么接下来的任务就是解密了
回想起刚才在元数据区发现的诡异字符传,那个应该得是密钥了,但是看长度又不像。猜测strings命令应该只能获取到GIF的一帧数据,这肯定是密钥的一部分。肯定还有其余部分。
杀牛要用牛刀。这时候又用到一个很棒的命令identify 这个命令是用来获取一个或多个图像文件的格式和特性。
它有一个跟strings功能差不多的参数-format 用来指定显示的信息
identify -format "%c" Question.gif > hex.txt
这次得到的16进制数据就比用strings命令得到的多多了还没有换行,很方便了。转换得到
很明显这就是整个RSA加密的密钥了。接下来就是用openssl进行解密。
此时需要注意,得到的整个密钥字符串是没有包含
所以会报错没有开始行
可以直接随便生成一个RSA的密钥看看应该有什么起始行
openssl genrsa -out rsa.key 2048
cat rsa.key
可以看到begin和end标志着开头和结尾
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
给我们的密钥文件加上这个头和尾即可
再次进行解密
openssl rsautl -decrypt -inkey key -in partaa.enc -out aa1
可以看到解密出来的文件是JPEG图片,且不完整(毕竟有256个.enc肯定是需要联合起来的)
但是256个文件命令修改执行256次实属愚蠢,然后从现在开始我开始了自己的第一次shell编程
#!/bin/bash
files=$(ls)
a="aa"
n=1
for f in $files; do
openssl rsautl -decrypt -inkey key -in $f -out $a$n;
((n++));
done
chmod +x thisfile.sh
很low但是很实用…将其放到256个.enc文件的同级目录下执行,就可以得到一堆解密后的JPEG了,会报几个错误但是不影响。
提前把_temp.zip.extracted中的其他zip文件都删掉(都是一样的256个.enc)
rm -rf *.zip
最后使用cat拼接这些个文件最后会得到一张显示有flag的图片
cat aa* > flag
结束。