CTF练习-BUUCTF(1~25)

BUUCTF(新靶场,难度中上,搜集了很多大赛原题)

https://buuoj.cn/

https://buuoj.cn/challenges

Crypto

题目1 一眼就解密

题目

下面的字符串解密后便能获得flag:ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR30=注意:得到的 flag 请包上 flag{} 提交

解题思路

题目后面有=就先猜一手base64编码,直接复制base64解码 解密即可得到flag

flag

flag{THE_FLAG_OF_THIS_STRING}

题目2 md5

题目

e00cf25ad42683b3df678c61f42c6bda

解题思路

题目名字就叫MD5,那我们直接把这个复制到md5在线解密 即可得到flag

md5在线查询

admin1

加上flag{},即flag{admin}提交

flag

flag{admin}

题目3 Url编码

题目

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

解题思路

老规矩这种题目直接复制url解码 里面解密即可得到flag

解码得and 1=1

flag

flag{and 1=1}

题目4 看我回旋踢

题目

看我回旋踢 synt{5pq1004q-86n5-46q8-o720-oro5on0417r1}

注意:得到的 flag 请包上 flag{} 提交

解题思路1

直接复制到CTFcrackToolsv里面解密

Rot13解码: ★ flag{5cd1004d-86a5-46d8-b720-beb5ba0417e1}
Rot18解码: ★ flag{0cd6559d-31a0-91d3-b275-beb0ba5962e6}

解题思路2

可以看到,字符串基本是还是对应上了flag的格式,不难想到是单字母替换加密

这一题可以直接尝试爆破,令"synt" = "flag"即可,简单的暴力美学

常用的爆破网站 https://quipqiup.com/

先尝试了凯撒加密,代码如下:

import string

def kaisa(s, k): #定义函数 接受一个字符串s 和 一个偏移量k
    lower = string.ascii_lowercase #小写字母
    upper = string.ascii_uppercase #大写字母
    before = string.ascii_letters #无偏移的字母顺序 小写+大写
    after = lower[k:] + lower[:k] + upper[k:] + upper[:k]#偏移后的字母顺序 还是小写+大写
    #分别把小写字母和大写字母偏移后再加到一起 
    table = ''.maketrans(before, after)  #创建映射表
    return s.translate(table) #对s进行偏移 即加密
 
if __name__ == "__main__":
    s = "synt{5pq1004q-86n5-46q8-o720-oro5on0417r1}"
    offset = ord('f') - ord('s')#计算偏移量
    #print(offset)
    print(kaisa(s, offset))
flag

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

题目5 摩丝

题目

摩丝 .. .-.. --- ...- . -.-- --- ..-

注意:得到的 flag 请包上 flag{} 提交

解题思路

摩斯密码在线解密

摩斯解码得ILOVEYOU

flag

flag{ILOVEYOU}

题目6 passwd

题目
姓名:张三 
生日:19900315

key格式为key{xxxxxxxxxx}

注意:得到的 flag 请包上 flag{} 提交

解题思路

看到key{xxxxxxxxxx}中key的长度为10位,联想到张三可能取密码的习惯,根据题目信息无非就那么几种

zs19900315
19900315zs
1990zs0315
稍作尝试可得到正确答案

flag

flag{zs19900315}

题目7 变异凯撒

题目
加密密文:afZ_r9VYfScOeO_UL^RWUc
格式:flag{ }

注意:得到的 flag 请包上 flag{} 提交

解题思路

看不出字符串是怎么处理的,但是标题给了提示,肯定是基于凯撒加密的

凯撒加密老规矩,先将前四个字符猜测为flag,然后仔细分析可以发现偏移量不是固定值

a -> f 移位5
f -> l 移位6
Z -> a 移位7
可以看出是一个递增的偏移量,那么直接上代码:

c = "afZ_r9VYfScOeO_UL^RWUc"
m = ''
for i in range(len(c)):
    m += chr(ord(c[i]) + 5 + i)
print(m)
flag

flag{Caesar_variation}

题目8 Quoted-printable

题目

=E9=82=A3=E4=BD=A0=E4=B9=9F=E5=BE=88=E6=A3=92=E5=93=A6
注意:得到的 flag 请包上 flag{} 提交

解题思路

首先这个题目就是试一加密编程
试一我们直接用Quoted-printable解密 即可
Quoted解码: 那你也很棒哦

flag

flag{那你也很棒哦}

知识拓展

quoted-printable 就是说用一些可打印常用字符,表示一个字节(8位)中所有非打印字符方法
任何一个8位的字节值可编码为3个字符:一个等号”=”后跟随两个十六进制数字(0–9或A–F)表示该字节的数值 例如,ASCII码换页符(十进制值为12)可以表示为”=0C”, 等号”=”(十进制值为61)必须表示为”=3D”. 除了可打印ASCII字符与换行符以外,所有字符必须表示为这种格式
所有可打印ASCII字符(十进制值的范围为33到126)可用ASCII字符编码来直接表示, 但是等号”=”(十进制值为61)不可以这样直接表示
ASCII的水平制表符(tab)与空格符, 十进制为9和32, 如果不出现在行尾则可以用其ASCII字符编码直接表示。如果这两个字符出现在行尾,必须QP编码表示为”=09″ (tab)或”=20″ (space).
如果数据中包含有意义的行结束标志,必须转换为ASCII回车(CR)换行(LF)序列,既不能用原来的ASCII字符也不能用QP编码的”=”转义字符序列。 相反,如果字节值13与10有其它的不是行结束的含义,它们必须QP编码为=0D与=0A.
quoted-printable编码的数据的每行长度不能超过76个字符. 为满足此要求又不改变被编码文本,在QP编码结果的每行末尾加上软换行,即在每行末尾加上一个”=”, 但并不会出现在解码得到的文本中

题目9 Rabbit

题目

U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI
注意:得到的 flag 请包上 flag{} 提交

解题思路

题目叫Rabbit这是一个加密,我们直接Rabbit在线解密 即可
Rabbit 在线解密 http://www.jsons.cn/rabbitencrypt/
Cute_Rabbit

flag

flag{Cute_Rabbit}

知识拓展

Rabbit
https://blog.youkuaiyun.com/l2645470582_/article/details/121372104
Rabbit 是一种高速流密码,Rabbit 使用一个 128 位密钥和一个 64 位初始化向量。 该加密算法的核心组件是一个位流生成器,该流生成器每次迭代都会加密 128 个消息位。

知识点

rabbit解密
密文特征与base64类似,末尾会有==
若base64等解不通,可以尝试rabbit解密

题目10 篱笆墙的影子

题目

felhaagv{ewtehtehfilnakgw}

星星还是那颗星星哟 月亮还是那个月亮 山也还是那座山哟 梁也还是那道梁 碾子是碾子 缸是缸哟 爹是爹来娘是娘 麻油灯呵还吱吱响 点的还是那么丁点亮 哦哦 注意:得到的 flag 请包上 flag{} 提交

解题思路

不难看出字符串仍具有类似flag的格式,由于’{'前面并非四个字符,首字符’f’也没有被替换,所以应该不是凯撒加密,或单字母替换
再根据标题提示信息,猜测是栅栏密码,前面1,3,5,7位连结有"flag",故有两栏:

f l a g { w e t h i n k w
e h a v e t h e f l a g }

栅栏在线解密即可

栅栏密码
分为2栏,解密结果为:flag{wethinkwehavetheflag}

flag

flag{wethinkwehavetheflag}

题目11 RSA

题目
在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d作为flga提交

注意:得到的 flag 请 将 noxCTF 替换为 flag ,格式为 flag{} 提交。

解题思路1
# -*- coding:utf-8 -*-

import gmpy2, libnum
from Crypto.Util.number import long_to_bytes

import gmpy2
p = 473398607161
q = 4511491
e = 17
d = gmpy2.invert(e,(p-1)*(q-1))
print(d)
# 125631357777427553
解题思路2

学习RSAtool2的使用:

1.Number Base 设置为十进制

2.注意:Public Exponent这里要使用16进制的数,如果公钥e=17的话,就应该填入十六进制的11

3.给出p,q,e的话直接填入,再点击Calc.D,获得d

4.给出的是n和e的话,输入n和e,点击Factor N(分解),得到p,q,再重复第3步就能得到d了

注意e填进去是16进制,需要将17转hex得到11再填进去

用RSA-Tool 2 by 1E!即可
RSA-Tool下载链接

题目12 丢失的MD5

题目

我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全,E903???4DAB???08???51?80??8A?,请猜出神秘字符串的原本模样,并且提交这个字串的32位MD5码作为答案。

import hashlib   
for i in range(32,127):
    for j in range(32,127):
        for k in range(32,127):
            m=hashlib.md5()
            m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM')
            des=m.hexdigest()
            if 'e9032' in des and 'da' in des and '911513' in des:
                print des

注意:得到的 flag 请包上 flag{} 提交
已知部分明文和明文的部分MD5值,求解明文及MD5

解题思路

已知部分明文和明文的部分MD5值,求解明文及MD5
直接遍历缺失的字符,验证补全的字符串与泄露的部分MD5能否对上即可
附上代码:

看代码用python2.x的版本运行即可获得flag

# -*- coding:utf-8 -*-

import hashlib
for i in range(32,127):
    for j in range(32,127):
        for k in range(32,127):
            m=hashlib.md5()
            m.update(('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM').encode('utf8'))
            des=m
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值