我如何检查 base64 字符串是否是文件(什么类型?)?
How can i check a base64 string is a file(what type?) or not?
我在 https://2020.ractf.co.uk/ 接受了 Spentalkux 挑战。
这是我第一次参加 CTF 挑战,所以我在 https://github.com/W3rni0/RACTF_2020/blob/master/readme.md#spentalkux
上完成了一个解决方案
当我收到这个 base64 字符串时:
JA2HGSKBJI4DSZ2WGRAS6KZRLJKVEYKFJFAWSOCTNNTFCKZRF5HTGZRXJV2EKQTGJVTXUOLSIMXWI2KYNVEUCNLIKN5HK3RTJBHGIQTCM5RHIVSQGJ3C6MRLJRXXOTJYGM3XORSIJN4FUYTNIU4XAULGONGE6YLJJRAUYODLOZEWWNCNIJWWCMJXOVTEQULCJFFEGWDPK5HFUWSLI5IFOQRVKFWGU5SYJF2VQT3NNUYFGZ2MNF4EU5ZYJBJEGOCUMJWXUN3YGVSUS43QPFYGCWSIKNLWE2RYMNAWQZDKNRUTEV2VNNJDC43WGJSFU3LXLBUFU3CENZEWGQ3MGBDXS4SGLA3GMS3LIJCUEVCCONYSWOLVLEZEKY3VM4ZFEZRQPB2GCSTMJZSFSSTVPBVFAOLLMNSDCTCPK4XWMUKYORRDC43EGNTFGVCHLBDFI6BTKVVGMR2GPA3HKSSHNJSUSQKBIE
不知道怎么判断是不是文件,求解器说是gz压缩数据文件
你能帮帮我吗?
detail here
Link 到文件:https://github.com/W3rni0/RACTF_2020/blob/master/assets/files/Spentalkux.gz
许多文件类型都有 header(文件的前几个字节)和一些固定信息,通过这些信息可以将文件识别为 gz、png、pdf 等
所以每个 base64 编码的 gz 文件也将以特定的 base64 字符序列开头,通过它可以被识别。
A gzip-file 总是以两个字节序列 0x1f 0x1b 开头,在 base64 编码中是 H4
加上 s
到 v
范围内的第三个字符.
原因是,每个base64字符代表原始字节的6位,所以两个字节0x1f 0x1b
编码为两个base64字符(12位)加上第三个字符的前4位。
基于此,我会说您在此处显示的不是 base64 编码的 gzip。
其他例子是:
-
开头为:0x89 0x50 0x4e 0x47 0x0d 0x0a 0x1a 0x0a
base64编码:iVBORw0KGg...
-
开头为:0xFF 0xD8 0xFF 0xD0
base64编码:/9j/4...
-
开头为:GIF
base64编码:R0lG
-
a)小端:
开头为:0x49 0x49 0x2A 0x00
base64编码:SUkqA
b) 大端:
开头为:0x4D 0x4D 0x00 0x2A
base64编码:TU0AK
-
以 FLV
开头
base64编码:RkxW
wav/avi/webp 等人
几个 audio/video/image/graphic -格式基于 RIFF(Resource Interchange Format)
共同点是所有文件都以RIFF
开头
base64编码:UklGR
在RIFF
header之后,您会发现从第9个字节开始的4个字节开始的特定格式。
在下文中,_
用作任何字符的占位符。
wav
开头为:RIFF____WAVE
base64编码:UklGR______XQVZF
webp
开头为:RIFF____WEBP
base64编码:UklGR______XRUJQ
avi
开头为:RIFF____AVI
base64编码:UklGR______BVkkg
关于问题中的具体例子:
在更新的问题中,所附图片中有提示
数据先base32 encoded再base64编码
当我们向 online base32 decoder 提供问题中给出的字符串 (JA2HGSKBJI4DSZ2WGRAS...
) 时,我们得到:
H4sIAJ89gV4A/+1ZURaEIAi8SkfQ+1/O3f7MtEBfMgz9rC/diXmIA5hSzun3HNdBbgbtVP2v/2+LowM837wFHKxZbmE9pQfsLOaiLAL8kvIk4MBma17ufHQbIJCXoWNZZKGPWB5QljvXIuXOmm0SgLixJw8HRC8Tbmz7x5eIspypaZHSWbj8cAhdjli2WUkR1sv2dZmwXhZlDnIcCl0GyrFX6fKkBEBTBsq+9uY2Ecug2Rf0xtaJlNdYJuxjP9kcd1LOW/fQXtb1sd3fSTGXFTx3UjfGFx6uJGjeIAAA
它以H4s
开头,所以根据我写的如何识别base64编码的文件类型,这是一个base64编码的gzip文件。
可以将其保存在文本文件中,然后上传到 base64decode.org,然后将其转换为 gzip 文件。当您下载并打开该 gzip 文件时,它包含一个包含如下文本的文件:
00110000 00110000 00110001 00110001 00110000 00110001 00110000 00110000 00100000 00110000 00110000 00110001 00110001 00110000 00110001 00110000 00110001 00100000 ...
本案例的结论:原始string/file是一个gzip文件,首先进行base64编码,base64编码部分再次用base32编码。
我在 https://2020.ractf.co.uk/ 接受了 Spentalkux 挑战。 这是我第一次参加 CTF 挑战,所以我在 https://github.com/W3rni0/RACTF_2020/blob/master/readme.md#spentalkux
上完成了一个解决方案当我收到这个 base64 字符串时:
JA2HGSKBJI4DSZ2WGRAS6KZRLJKVEYKFJFAWSOCTNNTFCKZRF5HTGZRXJV2EKQTGJVTXUOLSIMXWI2KYNVEUCNLIKN5HK3RTJBHGIQTCM5RHIVSQGJ3C6MRLJRXXOTJYGM3XORSIJN4FUYTNIU4XAULGONGE6YLJJRAUYODLOZEWWNCNIJWWCMJXOVTEQULCJFFEGWDPK5HFUWSLI5IFOQRVKFWGU5SYJF2VQT3NNUYFGZ2MNF4EU5ZYJBJEGOCUMJWXUN3YGVSUS43QPFYGCWSIKNLWE2RYMNAWQZDKNRUTEV2VNNJDC43WGJSFU3LXLBUFU3CENZEWGQ3MGBDXS4SGLA3GMS3LIJCUEVCCONYSWOLVLEZEKY3VM4ZFEZRQPB2GCSTMJZSFSSTVPBVFAOLLMNSDCTCPK4XWMUKYORRDC43EGNTFGVCHLBDFI6BTKVVGMR2GPA3HKSSHNJSUSQKBIE
不知道怎么判断是不是文件,求解器说是gz压缩数据文件
你能帮帮我吗? detail here
Link 到文件:https://github.com/W3rni0/RACTF_2020/blob/master/assets/files/Spentalkux.gz
许多文件类型都有 header(文件的前几个字节)和一些固定信息,通过这些信息可以将文件识别为 gz、png、pdf 等
所以每个 base64 编码的 gz 文件也将以特定的 base64 字符序列开头,通过它可以被识别。
A gzip-file 总是以两个字节序列 0x1f 0x1b 开头,在 base64 编码中是 H4
加上 s
到 v
范围内的第三个字符.
原因是,每个base64字符代表原始字节的6位,所以两个字节0x1f 0x1b
编码为两个base64字符(12位)加上第三个字符的前4位。
基于此,我会说您在此处显示的不是 base64 编码的 gzip。
其他例子是:
-
开头为:
0x89 0x50 0x4e 0x47 0x0d 0x0a 0x1a 0x0a
base64编码:
iVBORw0KGg...
-
开头为:
0xFF 0xD8 0xFF 0xD0
base64编码:
/9j/4...
-
开头为:
GIF
base64编码:
R0lG
-
a)小端: 开头为:
0x49 0x49 0x2A 0x00
base64编码:
SUkqA
b) 大端: 开头为:
0x4D 0x4D 0x00 0x2A
base64编码:
TU0AK
-
以
开头FLV
base64编码:
RkxW
wav/avi/webp 等人
几个 audio/video/image/graphic -格式基于 RIFF(Resource Interchange Format) 共同点是所有文件都以
开头RIFF
base64编码:
UklGR
在
RIFF
header之后,您会发现从第9个字节开始的4个字节开始的特定格式。 在下文中,_
用作任何字符的占位符。wav
开头为:RIFF____WAVE
base64编码:UklGR______XQVZF
webp
开头为:RIFF____WEBP
base64编码:UklGR______XRUJQ
avi
开头为:RIFF____AVI
base64编码:UklGR______BVkkg
关于问题中的具体例子:
在更新的问题中,所附图片中有提示
数据先base32 encoded再base64编码
当我们向 online base32 decoder 提供问题中给出的字符串 (JA2HGSKBJI4DSZ2WGRAS...
) 时,我们得到:
H4sIAJ89gV4A/+1ZURaEIAi8SkfQ+1/O3f7MtEBfMgz9rC/diXmIA5hSzun3HNdBbgbtVP2v/2+LowM837wFHKxZbmE9pQfsLOaiLAL8kvIk4MBma17ufHQbIJCXoWNZZKGPWB5QljvXIuXOmm0SgLixJw8HRC8Tbmz7x5eIspypaZHSWbj8cAhdjli2WUkR1sv2dZmwXhZlDnIcCl0GyrFX6fKkBEBTBsq+9uY2Ecug2Rf0xtaJlNdYJuxjP9kcd1LOW/fQXtb1sd3fSTGXFTx3UjfGFx6uJGjeIAAA
它以H4s
开头,所以根据我写的如何识别base64编码的文件类型,这是一个base64编码的gzip文件。
可以将其保存在文本文件中,然后上传到 base64decode.org,然后将其转换为 gzip 文件。当您下载并打开该 gzip 文件时,它包含一个包含如下文本的文件:
00110000 00110000 00110001 00110001 00110000 00110001 00110000 00110000 00100000 00110000 00110000 00110001 00110001 00110000 00110001 00110000 00110001 00100000 ...
本案例的结论:原始string/file是一个gzip文件,首先进行base64编码,base64编码部分再次用base32编码。