Catf1ag CTF Crypto(六)

前言

Catf1agCTF 是一个面向所有CTF(Capture The Flag)爱好者的综合训练平台,尤其适合新手学习和提升技能 。该平台由catf1ag团队打造,拥有超过200个原创题目,题目设计注重知识点的掌握,旨在帮助新手掌握CTF相关的各种技能 。除了新手题目,平台也包含难度不一的题目,适合不同水平的CTF参与者 。

平台上的题目类型多样,包括WEB、MISC、CRYPTO、LINUX、PWN/ATTACK、REVERSE等,题目分数制度从60分到100分不等,难度从1星到5星 。题目提交时需要包含完整的题目环境、flag以及writeup,以确保题目的完整性和可解性 。

此外,Catf1agCTF平台还提供了一些辅助工具和资源,如在线工具箱、SRC资料和HW资料等,以帮助用户更好地进行学习和实战演练 。平台的网址为 https://catf1ag.cn/,有意向的用户可以通过官方邮箱catf1ag@163.com进行联系 。对于想要加入交流的用户,平台还提供了官方QQ群和频道,方便用户之间的互动和交流 。

需要注意的是,平台上的部分题目可能需要特定的环境配置,例如WEB题目会包含dockerfile,而PWN/ATTACK题目则必须包含dockerfile以确保题目环境的完整性 。对于题目的flag格式,平台有统一的要求,即flag需要以"catf1ag{}"的格式呈现 。

总的来说,Catf1agCTF是一个资源丰富、适合各个水平CTF爱好者的训练平台,无论是新手还是有经验的参与者,都能在这里找到适合自己的学习和提升机会

一、RSA-3

打开靶场

n1= 183469842288888698417653802680141427113
c1= 164902072322430301806156830767158214618
n2= 132129814650346877352056990357711290601
c2= 72639976324405495408757557698962328431
n3= 231012220957834183374915196020656181347
c3= 43776935818299645885303359439033653256
import gmpy2
import libnum

n1 = 183469842288888698417653802680141427113
c1 = 164902072322430301806156830767158214618
n2 = 132129814650346877352056990357711290601
c2 = 72639976324405495408757557698962328431
n3 = 231012220957834183374915196020656181347
c3 = 43776935818299645885303359439033653256


def GCRT(mi, ai):
    # 当前的模数,初始化为第一个模数 mi[0]
    # 当前的余数,初始化为第一个密文 ai[0]
    curm, cura = mi[0], ai[0]

    # 遍历后续的模数 m 和对应的密文 a
    for (m, a) in zip(mi[1:], ai[1:]):
        # 计算当前模数和新模数的最大公约数 d
        d = gmpy2.gcd(curm, m)

        # 计算余数的差 c
        c = a - cura

        # 通过乘以逆元计算出新余数的比例 K
        K = c // d * gmpy2.invert(curm // d, m // d)

        # 更新当前的余数 cura,并根据广义中国剩余定理重新计算新的 curm
        cura += curm * K
        curm = curm * m // d
        cura %= curm
    return cura % curm, curm


C, N = GCRT([n1, n2, n3], [c1, c2, c3])
print(libnum.n2s(int(C)))

二、神秘的坐标

打开靶场

得到一堆数字 

 一组数字代表一个键盘上字母,例如28,表示键盘第二行第八个即 K

catf1ag{keyboradcoordinates}

三、倪九岚

打开靶场

根据题目的谐音”逆九栏“尝试先将字符串逆序,再栅栏解密 

catf1ag{RailfenceCipher} 

四、偶变异了

打开靶场

打开文件如下 

bcwb4g`s;hj>;j:t<%"$q;&)|y6%x-
AG@ELINP

推测经过了异或规则 

a = '''bcwb4g`s;hj>;j:t<%"$q;&)|y6%x-
AG@ELINP'''

f = 1

for i in a:
    # ord(i): 将字符 i 转换为其对应的ASCII值(整数)
    # ord(i) ^ f: 将这个ASCII值与当前的 f 进行XOR操作
    #   XOR(异或)操作的特性是相同的二进制位会被置0,不同的会被置1。这意味着可以使用XOR操作来加密和解密字符,只要使用相同的关键值
    # chr(...):将XOR后的值转换回字符
    # end=''确保所有字符在同一行输出,不加任何额外的换行符
    print(chr(ord(i) ^ f), end='')
    f += 1

提交时将 * 改为 - 

五、XOR

打开靶场

用‘flag{’和密文前5个字符异或,推出字符‘GAMEG’,推测是GAME循环异或 

s='!-,"<#}|!#}q#lt#w#`qpw.h~wyvjru#"x.p$s/v%<'

x='GAME'

result=''

for i in range(len(s)):
    result += chr(ord(s[i]) ^ ord(x[i % 4]))

print(result)

六、[原九小时AK赛] 疑惑

打开靶场

题目

简单的异或运算

keys1 = 'welcome_to_nine-ak_match_is_so_easy_!@!'

keys2 = '20 4 24 5 94 12 2 36 26 6 49 11 68 15 14 114 12 10 43 14 9 43 10 27 31 31 22 45 10 48 58 4 18 10 38 31 14 97 92'

keys2 = keys2.split()

flag = ''

for i in range(len(keys1)):
    flag += chr(ord(keys1[i]) ^ int(keys2[i]))
    
print(flag)

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suc2es2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值