前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CTF入门学习笔记——Crypto密码(编码)

CTF入门学习笔记——Crypto密码(编码)

作者头像
小点点
发布2023-10-16 19:40:03
5590
发布2023-10-16 19:40:03
举报
文章被收录于专栏:小点点小点点

CTF入门学习笔记——Crypto密码(编码)

🚀🚀这篇笔记是我对自己初步学习CTF的一个小总结,主要涉及了Crypto板块的编码,这部分内容比较简单,利用一些工具就可以轻松解决,但是有些需要很强的观察分析能力,所以此篇笔记主要起到一个分析总结的作用。


BASE编码

🚀🚀单纯BASE编码相对来说比较简单,使用在线解码工具或者使用Python编写代码就能轻易解决,但是BASE题往往是嵌套类型的,比如BASE16嵌套BASE32,或者是多重编码嵌套,所以有时候一时半会无法解决,这就需要我们耐心观察和分析了(一把梭除外)。

🚀🚀接下来我们来介绍一下BASE编码:


BASE16

🚀🚀BASE16编码就是将二进制文本转换为以下16个字符组成的文本:

0123456789ABCDEF

🚀🚀所以BASE16有他的显著特征,就是所有的数字以及A~F的大写字母,这和其他几种BASE编码有些许不同。


BASE32

🚀🚀BASE32对应的文本如下所示,其中=号是填充字符:

ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=

🚀🚀BASE32主要的特点就是全大写字母加2~7的数字。


BASE64

🚀🚀BASE64对应的文本如下所示:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=

🚀🚀BASE64主要的特点就是小写字母加+/这些特殊符号,所以算是比较号区分的。


BASE85

🚀🚀BASE85与前面有些不同,他是将四个字节的二进制数组成一个32位的数,然后转换为85进制,最后每一位加上32转为字符,所以并无显著特征。


🚀🚀接下来我们来看一道BASE编码的题目来强化一下:

[AFCTF 2018]BASE

🚀🚀题目:[AFCTF 2018]BASE | NSSCTF

🚀🚀我们下载附件,得到一个文本文件,部分如下所示:

78546C526A643035555454464E56453134546C56464D5535715654464F61306B7A546B5253525535555458704E52474E33546B526A4D5535715654424F56555578546B52564D5531365158705056464A43546C524E4D6C4671556B5A4F56466B77556C52615245355652544252656C5636545870424D3035455658704F56456B78546D7057516B35455754464F56467045546B56564D55353656586C4E656B5577555652535245355557544A52616C6B77546C526A4D5535555458644F656C4577555652564D3035725354464F616C557A546C524E4D553571556B4A4F52553078546D704E6430357254544253616C5635546C52564D55357156544A

🚀🚀我们观察一下,发现这是BASE16编码,于是我们使用在线解码工具或者编程,看一下解码结果是什么,结果如下所示:

xTlRjd05UTTFNVE14TlVFMU5qVTFOa0kzTkRSRU5UTXpNRGN3TkRjMU5qVTBOVUUxTkRVMU16QXpPVFJCTlRNMlFqUkZOVFkwUlRaRE5VRTBRelV6TXpBM05EVXpOVEkxTmpWQk5EWTFOVFpETkVVMU56VXlNekUwUVRSRE5UWTJRalkwTlRjMU5UTXdOelEwUVRVM05rSTFOalUzTlRNMU5qUkJORU0xTmpNd05rTTBSalV5TlRVMU5qVTJ

🚀🚀发现这是BASE64格式的,所以我们猜测这应该是BASE嵌套解码,所以我们写一个脚本来运行一下,代码如下所示:

代码语言:javascript
复制
import re, base64
s = open("flag_encode.txt", "rb").read()
# 正则表达式,用来尽可能多的匹配字符串
base16_dic = r'^[A-F0-9]*$'
base32_dic = r'^[A-Z2-7=]*$'
base64_dic = r'^[A-Za-z0-9/+=]*$'
# 循环解码
while True:
    t = s.decode()
    if '{' in t:
        print(t)
        break
    elif re.match(base16_dic, t):
        s = base64.b16decode(s)
        print(16)
    elif re.match(base32_dic, t):
        s = base64.b32decode(s)
        print(32)
    elif re.match(base64_dic, t):
        s = base64.b64decode(s)
        print(64)

🚀🚀运行结果如下所示:

代码语言:javascript
复制
16
64
64
16
64
32
32
32
16
32
32
32
32
32
16
32
32
64
32
64
64
32
32
16
32
64
64
16
64
64
afctf{U_5h0u1d_Us3_T00l5}

🚀🚀最终我们得到了flag,同时也说明我们是正确的,他就是包含了很多的BASE编码。


Uuencode编码

🚀🚀Uuencode编码其实和BASE64的原理类似,只不过他是处理完之后对每个数加32,这样使结果正好在ASCII的可打印字符中,所以编码结果就是一堆字符,无明显规律,这种情况就可以使用Uuencode编码试试了。

[SWPUCTF 2021 新生赛]crypto8

🚀🚀题目:[SWPUCTF 2021 新生赛]crypto8

🚀🚀打开附件得到一串字符,考虑使用Uuencode解码(有很多在线工具都可以)

73E-30U1&>V-H965S95]I<U]P;W=E<GT`

🚀🚀解码结果如下所示:

NSSCTF{cheese_is_power}


Rabbit编码

🚀🚀Rabbit编码Rabbit 是一种高速流密码,于 2003 年在 FSE 研讨会上首次提出。 Rabbit 使用一个 128 位密钥和一个 64 位初始化向量。 该算法的核心组件是一个位流生成器,该流生成器每次迭代都会加密 128 个消息位。主要有以下三个特征:

  1. 由26个大小写字母和=,+,/组成
  2. 以U2FsdGVkX1开头,这是一个很重要的特征
  3. 可能以=号结束

🚀🚀接下来我们看一道题目,来加强一下认知:

Rabbit

🚀🚀题目:BUUCTF在线评测 (buuoj.cn)

🚀🚀我们可以看到附件只有一行以U2FsdGVkX1开头的字母:

U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI

🚀🚀所以我们采用在线解码工具,得到:

Cute_Rabbit

🚀🚀这便是我们需要的flag。


URL编码

🚀🚀URL编码就比较简单,有着很明显的特征,就是许多的%号,所以一眼看到就能大概能猜到是URL编码。

URL

🚀🚀题目:BUUCTF在线评测 (buuoj.cn)

🚀🚀打开附件,得到如下信息:

%66%6c%61%67%7b%61%6e%64%20%31%3d%31%7d

🚀🚀使用在线解码工具,结果如下所示:

flag{and 1=1}


Quoted-Printable编码

🚀🚀Quoted-Printable编码方法,适合所传输数据中,只有少量的非ASCII编码,用一个等号(=)后面加两个数字字符来表示一个非ASCII码字符。所以特征也很明显,那就是有许多的=号。

Quoted-Printable

🚀🚀题目:BUUCTF在线评测 (buuoj.cn)

🚀🚀打开附件,得到如下信息:

=E9=82=A3=E4=BD=A0=E4=B9=9F=E5=BE=88=E6=A3=92=E5=93=A6

🚀🚀使用在线解码工具,结果如下所示:

那你也很棒哦


待补充

🚀🚀CTF中的编码远远不止这些,比如XXencode、jjencode、bubbleBabble、Ook、佛曰、社会主义核心价值观等等,我会在接下来的学习中不断补充,同时也希望我能一直坚持下去。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CTF入门学习笔记——Crypto密码(编码)
    • BASE编码
      • BASE16
      • BASE32
      • BASE64
      • BASE85
    • Uuencode编码
      • Rabbit编码
        • URL编码
          • Quoted-Printable编码
            • 待补充
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档