2

我在https://2020.ractf.co.uk/上接受了 Spenttalkux 挑战。这是我第一次进行 CTF 挑战,所以我通过https://github.com/W3rni0/RACTF_2020/blob/master/readme.md#spentalkux上的解决方案

当我收到这个 base64 字符串时:

JA2HGSKBJI4DSZ2WGRAS6KZRLJKVEYKFJFAWSOCTNNTFCKZRF5HTGZRXJV2EKQTGJVTXUOLSIMXWI2KYNVEUCNLIKN5HK3RTJBHGIQTCM5RHIVSQGJ3C6MRLJRXXOTJYGM3XORSIJN4FUYTNIU4XAULGONGE6YLJJRAUYODLOZEWWNCNIJWWCMJXOVTEQULCJFFEGWDPK5HFUWSLI5IFOQRVKFWGU5SYJF2VQT3NNUYFGZ2MNF4EU5ZYJBJEGOCUMJWXUN3YGVSUS43QPFYGCWSIKNLWE2RYMNAWQZDKNRUTEV2VNNJDC43WGJSFU3LXLBUFU3CENZEWGQ3MGBDXS4SGLA3GMS3LIJCUEVCCONYSWOLVLEZEKY3VM4ZFEZRQPB2GCSTMJZSFSSTVPBVFAOLLMNSDCTCPK4XWMUKYORRDC43EGNTFGVCHLBDFI6BTKVVGMR2GPA3HKSSHNJSUSQKBIE

我不知道如何检查它是否是一个文件,但是求解器说它是一个gz压缩数据文件。

你能帮我吗? 详细在这里

文件链接:https ://github.com/W3rni0/RACTF_2020/blob/master/assets/files/Spentalkux.gz

4

1 回答 1

2

许多文件类型都有一个带有一些固定信息的标题(文件的前几个字节),通过这些信息可以将文件识别为 gz、png、pdf 等。

所以每个base64编码的gz文件也会以一定的base64字符序列开头,通过它可以识别。

gzip 文件总是以两个字节序列 0x1f 0x1b 开头,在 base64 编码中H4加上sto范围内的第三个字符v

原因是,每个 base64 字符代表原始字节的 6 位,因此这两个字节0x1f 0x1b用两个 base64 字符(12 位)加上第三个字符的前 4 位编码。

基于此,我会说您在那里展示的不是 base64 编码的 gzip。

其他例子是:

  • PNG

    以。。开始:0x89 0x50 0x4e 0x47 0x0d 0x0a 0x1a 0x0a

    base64 编码:iVBORw0KGg...

  • jpg

    以。。开始:0xFF 0xD8 0xFF 0xD0

    base64 编码:/9j/4...

  • gif

    以。。开始:GIF

    base64 编码:R0lG

  • 时间

    a) 小端:开始于:0x49 0x49 0x2A 0x00

    base64 编码:SUkqA

    b) 大端:开始于:0x4D 0x4D 0x00 0x2A

    base64 编码:TU0AK

  • flv

    以。。开始FLV

    base64 编码:RkxW

  • wav/avi/webp 等

    几种音频/视频/图像/图形格式基于RIFF(资源交换格式) ,共同的部分是所有文件都以RIFF

    base64 编码:UklGR

    RIFF标头之后,您会发现从第 9 个字节开始的 4 个字节开始的特定格式。在下面_用作任何字符的占位符。

    wav
    开头:RIFF____WAVE base64 编码:UklGR______XQVZF

    webp
    开头:RIFF____WEBP base64 编码:UklGR______XRUJQ

    avi
    开头:RIFF____AVI base64 编码:UklGR______BVkkg


关于问题中的具体示例:

在更新的问题中,附图中有一个提示,

数据首先经过 base32 编码,然后经过 base64 编码。

当我们将问题 ( ) 中给出的字符串提供给在线 base32 解码器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 ...

这种情况下的结论:原始字符串/文件是一个 gzip 文件,它首先是 base64 编码的,base64 编码的部分再次用 base32 编码。

于 2020-06-11T17:25:47.483 回答