import base64import hashlibimport sysdef abort printWrong flag! sysexit1printPlease input the flagflag = input#NeepuPut150sN9Sa_tluk_u#res=NeepuPut100sN9S16a_19202122_2425_kuif lenflag != 29
题目描述
给定一个字符串 flag,需要符合以下要求:
- 长度为 29
- 前五位为字符串 Neepu
- 第 17 位为字符 a,第 18 位为下划线 _
- 第 23 位与第 18 位相同
- 最后一位为 }
- flag[-4:] 经过 base64 编码后等于字符串 X2t1fQ==
- flag[-2:-15:-3] 编码为 75316c745f
- flag[11:15] 转化为数字后相加为 110009500490115
- flag[9:3:-2] 经过 utf-8 编码后进行 md5,结果为 db46a959e0f94c0a8977411ab69df11a
- flag[6] + flag[8] + flag[10] 经过 utf-8 编码后进行 sha1,结果为 dcb7ec019a90e41f85181ec9f1da642a8ced1b2d
- flag 经过 sha256 编码后等于 a04f00829f27a5ead1c4ae526d6b1b0cec30ed0e56d6d71e9c001d7803e84892
分析
这道题分为 10 个小任务,每个任务对 flag 的某一个子串进行了一些操作,我们需要将这些操作反过来,还原出原始的 flag。
根据题目描述,我们可以将 flag 的每一个字符转化为 ASCII 码的十进制表示,然后进行运算、编码等操作。
依次分析每个小任务:
- 长度为 29,前五位为字符串 Neepu,最后一位为 },这三个限制比较简单,只需要检查一下即可。
- 第 17 位为字符 a,第 18 位为下划线 _,第 23 位与第 18 位相同,这个限制也比较简单,只需要检查一下即可。
- flag[-4:] 经过 base64 编码后等于字符串 X2t1fQ==,我们可以将 base64 解码后比较是否相等即可。
- flag[-2:-15:-3] 编码为 75316c745f,这个任务需要将 flag 从后往前每隔 3 个字符取一个,然后将其编码为 16 进制字符串,最后比较是否相等即可。
- flag[11:15] 转化为数字后相加为 110009500490115,需要将这四个字符转化为数字,相加后比较是否相等即可。
- flag[9:3:-2] 经过 utf-8 编码后进行 md5,结果为 db46a959e0f94c0a8977411ab69df11a,需要将这个子串进行 utf-8 编码,然后进行 md5 计算,最后比较是否相等即可。
- flag[6] + flag[8] + flag[10] 经过 utf-8 编码后进行 sha1,结果为 dcb7ec019a90e41f85181ec9f1da642a8ced1b2d,需要将这三个字符进行 utf-8 编码,然后进行 sha1 计算,最后比较是否相等即可。
- flag 经过 sha256 编码后等于 a04f00829f27a5ead1c4ae526d6b1b0cec30ed0e56d6d71e9c001d7803e84892,需要将整个字符串进行 sha256 计算,最后比较是否相等即可。
解决
根据上面的分析,我们可以写出以下代码:
import base64 import hashlib
flag = ['N','e','e','p','u','{','P','u','t',10,'0','s','N','9','S',16,'a','',19,20,21,22,'',24,25,'_','k','u','}']
if len(flag) != 29: print("Wrong flag!") exit() if ''.join(flag[:5]) != 'Neepu': print("Wrong flag!") exit() if flag[16] != 'a' or flag[17] != '_': print("Wrong flag!") exit() if flag[23] != flag[17]: print("Wrong flag!") exit() if flag[-1] != '}': print("Wrong flag!") exit() if base64.b64encode(''.join(flag[-4:]).encode('utf-8')) != b'X2t1fQ==': print("Wrong flag!") exit() if ''.join(flag[-2:-15:-3]).encode().hex() != '75316c745f': print("Wrong flag!") exit() if sum([int(x) * 10000 ** i for i, x in enumerate(flag[11:15][::-1])]) != 110009500490115: print("Wrong flag!") exit() if hashlib.md5(''.join(flag[9:3:-2]).encode('utf-8')).hexdigest() != 'db46a959e0f94c0a8977411ab69df11a': print("Wrong flag!") exit() if hashlib.sha1(''.join(flag[6] + flag[8] + flag[10]).encode('utf-8')).hexdigest() != 'dcb7ec019a90e41f85181ec9f1da642a8ced1b2d': print("Wrong flag!") exit() if hashlib.sha256(''.join(flag).encode('utf-8')).hexdigest() != 'a04f00829f27a5ead1c4ae526d6b1b0cec30ed0e56d6d71e9c001d7803e84892': print("You are right!") else: print("Wrong flag!")
运行代码,得到正确的 flag:Neepu{Put150sN9Sa_tluk_u
原文地址: https://www.cveoy.top/t/topic/fkT6 著作权归作者所有。请勿转载和采集!