BUUCTF Crypto 密码学题解

1. 一眼就解密

alt text

题目给出的字符串为:

1
ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR30=

第一眼看到末尾的=,80%可以确定是base64编码,使用 https://rivers.chaitin.cn/toolkit/cyberChef/Base64Decoder 解码后如下:

alt text

成功得到flag:

1
flag{THE_FLAG_OF_THIS_STRING}

技巧:

  1. Base64编码后的字符数如果不是4的倍数,则会在末尾添加等于号=字符,直到字符数是4的倍数,因此,如果看到末尾有等于号=字符,可以判断可能是Base64编码。
  2. Base64编码表中的字符只会包括大小写字母,数字,加号+和斜杠/,因此,如果看到字符串中只包含这些字符,可以判断可能是Base64编码。
  3. Base64编码原理介绍可以看我以前写的博客:https://blog.lololowe.com/posts/351b/#Base64%E7%BC%96%E7%A0%81

2. MD5

alt text

下载附件得到题目给出的字符串:

1
e00cf25ad42683b3df678c61f42c6bda

由于题目直接告诉了我们这是MD5相关的内容,因此可以直接用 https://md5hashing.net/search 搜索此MD5哈希值:

alt text

将转换后的值包裹上flag{} ,得到flag:

1
flag{admin1}

技巧:

  1. MD5哈希值是固定32位长的十六进制数(只包含数字0-9以及字母a-f),因此,如果看到字符串是32位长的十六进制数,可以判断可能是MD5哈希值。
  2. 拿到MD5哈希值后,不建议直接爆破,太慢了,推荐直接使用谷歌进行搜索,但注意要将MD5哈希值用双引号包裹起来,这样结果只会匹配到MD5哈希值,不会匹配到其他内容。

3. URL编码

alt text

下载附件得到题目给出的字符串:

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

由于题目直接告诉了我们这是URL编码相关的内容,因此可以直接用 https://www.urldecoder.org/ 解码:

alt text

得到flag:

1
flag{and 1=1}

技巧:

  1. URL编码是固定以%开头,后面跟着两位十六进制数的字符,因此,如果看到字符串是这种格式,可以判断可能是URL编码。
  2. URL编码原理介绍可以看我以前写的博客:https://blog.lololowe.com/posts/351b/#URL%E7%BC%96%E7%A0%81

4. 看我回旋踢

alt text

下载附件得到题目给出的字符串:

1
synt{5pq1004q-86n5-46q8-o720-oro5on0417r1}

由于题目名字很抽象,无法直接判断是什么编码,此时可以先从字符串格式入手。字符串格式为synt{},很像flag{},可以想想synt怎么和flag对应起来。

初步分析后,可以发现synt中的每个字母向后移位13个位置,可以得到flag,因此可以判断这是ROT-13密码(偏移量为13的凯撒密码):

1
2
3
s y n t
↓ ↓ ↓ ↓ ROT-13
f l a g

那么花括号里剩余的字母就可以直接使用在线工具 https://www.metools.info/code/c70.html 进行ROT-13解码:

alt text

得到flag:

1
flag{5cd1004d-86a5-46d8-b720-beb5ba0417e1}

5. 摩丝

alt text

下载附件得到题目给出的字符串:

1
.. .-.. --- ...- . -.-- --- ..-

由于题目直接告诉了我们这是摩斯电码相关的内容,因此可以直接用 https://www.jisuan.mobi/tools/morse/ 进行解码:

alt text

包裹上flag{}后得到flag:

1
flag{ILOVEYOU}

6. password

alt text

下载附件得到题目给出的字符串:

1
2
3
4
姓名:张三 
生日:19900315

key格式为key{xxxxxxxxxx}

题目告诉我们,key格式为key{xxxxxxxxxx},其中xxxxxxxxxx有10位,而姓名与生日拼接起来正好是10位,因此,我们可以尝试将姓名和生日拼接起来,作为key,然后提交flag:

1
flag{张三19900315}

提交失败,尝试将”张三”改为拼音首字母”zs”,再次提交flag:

1
flag{zs19900315}

alt text

成功提交。我猜测这道题可能考察的是简单字符串拼接以及格式化字符。

7. 变异凯撒

alt text

下载附件得到题目给出的字符串:

1
2
加密密文:afZ_r9VYfScOeO_UL^RWUc
格式:flag{ }

由于题目告诉了我们这是变异凯撒密码,因此简单的26位字母表已经无法判断加密密文中的特殊字符偏移量了,可以上ASCII码表了。

首先截取加密密文的前4位afZ_,将其ASCII码值转换为十进制并与flag的ASCII码值的十进制做对比:

1
2
a:97   f:102  Z:90  _:95
f:102 l:108 a:97 g:103

十进制数值相减计算偏移量(差值):

1
2
3
4
102-97=5
108-102=6
97-90=7
103-95=8

可以发现,相邻的2个字符之间的偏移量是呈递增关系的,因此可以按照这个规律来解密后面的字符:

1
2
3
4
5
{Caesar_variation}

r:114 9:57 V:86 Y:89 f:102 S:83 c:99 O:79 e:101 O:79 _:95 U:85 L:76 ^:94 R:82 W:87 U:85 c:99
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 偏移量(差值)
{:123 C:67 a:97 e:101 s:115 a:97 r:114 _:95 v:118 a:97 r:114 i:105 a:97 t:116 i:105 o:111 n:110 }:125

也可以用Python脚本解密:

1
2
3
4
5
6
caesar = "afZ_r9VYfScOeO_UL^RWUc"
offset = 5

for i in caesar:
print(chr(ord(i) + offset ), end="") # ord()函数将字符转换为ASCII码值,chr()函数将ASCII码值转换为字符
offset += 1 # 偏移量递增

得到flag:

1
flag{Caesar_variation}

8. Quoted-printable

alt text

下载附件得到题目给出的字符串:

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

由于题目直接告诉了我们这是Quoted-printable编码(可打印字符引用编码)相关的内容,因此可以直接用 https://mdgjx.com/shujugeshizhuanhuan/qpjiema 解码:

alt text

包裹上flag{}后得到flag:

1
flag{那你也很棒哦}

技巧

  1. Quoted-printable编码是固定以=开头,后面跟着两位十六进制数的字符,因此,如果看到字符串是这种格式,可以判断可能是Quoted-printable编码。
  2. Quoted-printable编码非常像URL编码,但是URL编码是固定以%开头,后面跟着两位十六进制数的字符。

9. 篱笆墙的影子

alt text

下载附件得到题目给出的字符串:

1
felhaagv{ewtehtehfilnakgw}

题目中提到的的关键字”篱笆”,又被称为”栅栏”,因此可以判断这是栅栏密码相关的内容。

在字符串”felhaagv{ewtehtehfilnakgw}”中可以发现4个关键字符”f l a g”,并且这些字符是按顺序排列的,每个字符之间间隔了1个字符,因此可以判断该栅栏有2组。

将字符串”felhaagv{ewtehtehfilnakgw}”按照2组排列(上下对应),得到:

1
2
flag{wethinkw
ehavetheflag}

将1、2组的字符分别拼接起来,得到flag:

1
flag{wethinkwehavetheflag}

也可以直接将字符串复制到 http://moersima.00cha.net/shanlan.asp 进行解密:

得到flag:

alt text

http://moersima.00cha.net/shanlan.asp 下面的关于栅栏密码加解密的描述很形象,推荐去阅读下。

技巧:

  1. 判断是否为传统栅栏密码可以通过观察字符串中是否包含”flag”关键字,并且这些关键字是按顺序排列的,每个字符之间间隔了相同数量的字符。

10. Rabbit

alt text

下载附件得到题目给出的字符串:

1
U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI

Rabbit 加密可以直接用 https://www.sojson.com/encrypt_rabbit.html 进行解密:

alt text

得到flag:

1
flag{Cute_Rabbit}

技巧:

  1. 记住Rabbit加密的格式为U2FsdGVkX1/xxxxxxxx,其中xxxxxxxx是加密后的密文。