buuctf
一眼就解密
Base64编码具有以下特征:
- 字符集:Base64编码只使用64个字符,包括大写字母(A-Z)、小写字母(a-z)、数字(0-9)以及两个符号(+和/)。在某些变体中,如Base64 URL,会用(-和_)替换(+和/)。
- 编码块:Base64编码通常以4字符为一个块。每个块代表原始数据的3个字节(24位),因为 26=64,即每个Base64字符可以表示6位信息。
- 填充:如果原始数据不是3字节的整数倍,编码后的数据会在末尾添加一到两个“=”字符作为填充(padding),以确保编码数据的长度是4的倍数。
- 非加密:Base64是一种编码方式,不是加密方法。它不提供数据的安全性,只是将二进制数据转换为文本形式。
- 可读性:虽然Base64编码的数据是可读的,但它并不直观。它隐藏了原始数据的实际内容,但可以通过Base64解码轻松还原。
- 长度增加:编码后的数据长度会比原始数据长,因为每3个字节的原始数据被编码为4个字符。
- 跨平台:Base64编码的数据可以在不同的系统和应用程序之间轻松传输,因为它只包含可打印的ASCII字符。
- 应用广泛:Base64编码常用于电子邮件、网页、APIs、配置文件等场景,特别是在需要在文本协议中嵌入二进制数据时。
- 编码效率:Base64编码可以有效地将二进制数据转换为文本格式,但这种转换会牺牲存储空间和带宽。
- 安全性:虽然Base64本身不提供安全性,但它常用于与加密算法结合使用,以确保数据在传输过程中的安全性。
- Base64编码是一种简单而有效的数据编码方法,适用于需要在文本环境中传输二进制数据的场景,但它不适用于需要高安全性的场景。
字符串base64特征
得出flag
MD5
打开题目:e00cf25ad42683b3df678c61f42c6bda
直接MD5解密就好了
url编码
打开题目:%66%6c%61%67%7b%61%6e%64%20%31%3d%31%7d
直接url解码
看我回旋踢
打开题目:synt{5pq1004q-86n5-46q8-o720-oro5on0417r1}
题目看着比较抽象。但ctf是找flag的。这个题目格式像flag{xxxxxxxxx}。synt和flag都是24个字母,猜测是凯撒密码。不确定偏移量,让ai写一下代码,确定了偏移量是13。
def decrypt_caesar_cipher(text, shift):
result = ""
for char in text:
if char.isalpha(): # 检查字符是否为字母
shift_amount = shift % 26
if char.islower():
result += chr((ord(char) - ord('a') + shift_amount) % 26 + ord('a'))
else:
result += chr((ord(char) - ord('A') + shift_amount) % 26 + ord('A'))
else:
result += char
return result
# 给定的字符串
cipher_text = "synt"
# 尝试不同的偏移量
for shift in range(1, 27):
plain_text = decrypt_caesar_cipher(cipher_text, shift)
print(f"Shift {shift}: {plain_text}")
偏移量为13的凯撒密码
得出flag。
摩丝
打开题目:.. .-.. --- ...- . -.-- --- ..-
看着是摩斯电码,
得出flag。
password
题目:
姓名:张三
生日:19900315
key格式为key{xxxxxxxxxx}
猜测应该是弱口令密码。一般大家都会名字缩写加生日。所以flag{zs19900315}。提交发现成功。
变异凯撒
打开题目:加密密文:afZ_r9VYfScOeO_UL^RWUc
格式:flag{ }
题目说是变异凯撒,我们知道凯撒密码就是位移偏离。就是ASCII码值加减(下面是不全的ASCII码)
这就是凯撒密码。假设原文是af加密后是fk。a:97 f:102 k:107。97-102= -5。这就是凯撒密码偏移了5。题目说是变异凯撒,所以然后我们知道格式是flag{ }。所以
afZ_ → flag
a:97 f:102 Z:90 _:95
f:102 l:108 a:97 g:103
计算平移量:
97-102=-5
102-108=-6
90-97=-7
95-103=-8
得出平移量是-5,-6,-7,-8。该密码体制中每个字符的移位位数基于前一个字符增加1。然后写一个简单的脚本运行:
str ="afz_r9vyfscoeo_ul^rwuc" //给定的字符串
k=5 //初始偏移量
for i in str:
print(chr(ord(i)+k),end='')
k+=1 //偏移量加1
得出的字符串
Quoted-printable
打开题目:=E9=82=A3=E4=BD=A0=E4=B9=9F=E5=BE=88=E6=A3=92=E5=93=A6
题目说这是Quoted-printable编码
Quoted-printable编码是一种用于电子邮件的编码方式,它允许在电子邮件中传输非ASCII字符。Quoted-printable编码将非ASCII字符转换为可打印的字符,以便在电子邮件中传输。
得出flag
篱笆墙的影子
打开题目:felhaagv{ewtehtehfilnakgw}
题目说篱笆墙的影子,猜测是栅栏密码。栅栏密码是一种古老的加密方法,它将明文分成若干行,然后将这些行按列读取,形成密文。栅栏密码的密钥是行数。题目说篱笆墙的影子,猜测是栅栏密码。
得出flag
Rabbit
打开题目:U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI
题目说是Rabbit加密,Rabbit是一种流密码,它使用一个密钥和一个初始化向量(IV)来加密数据。Rabbit加密算法是一种对称加密算法,它使用相同的密钥来加密和解密数据。
得出flag{Cute_Rabbit}
RSA
打开题目:
在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d作为flga提交
我们直接利用工具
利用这个工具算出d的值。
题目说e=17
这里需要输入16进制的e,17的16进制是11,所以输入11。
得出flag{125631357777427553}
丢失的MD5
打开题目,是一串python的代码
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{e9032994dabac08080091151380478a2}
注意:如果是python3版本,需要将print改为print(),即print(des)
在python2中,print语句不需要括号,而在python3中,print语句需要括号。
而我用的是python3,python3默认字符串是Unicode格式,而哈希函数md5()需要的是字节串(bytes)类型作为输出。
所以得修改代码,修改点如下:
在调用 m.update() 时,使用 encode('utf-8') 将字符串转换为字节串。
m.update(('TASC' + chr(i) + '03RJMV' + chr(j) + 'WDJKX' + chr(k) + 'ZM').encode('utf-8'))
修改过后的代码
import hashlib # 导入hashlib模块
for i in range(32,127): # 遍历ASCII码32到127之间的字符
for j in range(32,127): # 遍历ASCII码32到127之间的字符
for k in range(32,127): # 遍历ASCII码32到127之间的字符
m=hashlib.md5() # 创建md5对象
m.update(('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM').encode('utf-8')) # 将字符串编码为utf-8格式,并更新md5对象
des=m.hexdigest() # 获取md5对象的十六进制摘要
if 'e9032' in des and 'da' in des and '911513' in des:
print (des) # 打印摘要
Alice&Bob
打开题目:
密码学历史中,有两位知名的杰出人物,Alice和Bob。他们的爱情经过置换和轮加密也难以混淆,即使是没有身份认证也可以知根知底。就像在数学王国中的素数一样,孤傲又热情。 下面是一个大整数:98554799767,请分解为两个素数,分解后,小的放前面,大的放后面,合成一个新的数字,进行md5的32位小写哈希,提交答案。 注意:得到的 flag 请包上 flag{} 提交
问ai得出分解出的两个素数为:9901 和 9953999。
问ai得出分解出的两个素数错误了,自己老老实实去找一个在线网站
计算得出的两个素数是:101999*966233=98554799767
所以合成的数字是:101999966233
得出flag{d450209323a847c8d01c6be47c81811a}
大帝的密码武器
打开题目:
题目是一个zip文件,没有后缀,加一个.zip后缀,解压看到题目。
题目:公元前一百年,在罗马出生了一位对世界影响巨大的人物,他生前是罗马三巨头之一。他率先使用了一种简单的加密函,因此这种加密方法以他的名字命名。
以下密文被解开后可以获得一个有意义的单词:FRPHEVGL
你可以用这个相同的加密向量加密附件中的密文,作为答案进行提交。
密文:ComeChina
zip文件中还有一个MACOSX的文件,但是打开txt文件是乱码,所以不管啦!
大帝一般是凯撒密码,用python解密FRPHEVGL
def decrypt_caesar_cipher(text, shift):
result = ""
for char in text:
if char.isalpha(): # 检查字符是否为字母
shift_amount = shift % 26
if char.islower():
result += chr((ord(char) - ord('a') + shift_amount) % 26 + ord('a'))
else:
result += chr((ord(char) - ord('A') + shift_amount) % 26 + ord('A'))
else:
result += char
return result
# 给定的密码
cipher_text = "FRPHEVGL"
# 尝试不同的偏移量
for shift in range(1, 27):
plain_text = decrypt_caesar_cipher(cipher_text, shift)
print(f"Shift {shift}: {plain_text}")
解出FRPHEVGL有意义的单词是SECURITY(安全)
所以得出这是偏移量为13的凯撒密码(Rot1),加密ComeChina
得出flag{PbzrPuvan}
rsarsa
打开题目
Math is cool! Use the RSA algorithm to decode the secret message, c, p, q, and e are parameters for the RSA algorithm. //“数学很酷!使用RSA算法来解码秘密信息。其中,c、p、q 和 e 是RSA算法的参数。”
p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e = 65537
c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
Use RSA to find the secret message //使用RSA算法来找到(或解码)秘密信息。
RSA算法是一种非对称加密算法,它使用一对公钥和私钥来进行加密和解密。公钥用于加密数据,私钥用于解密数据。
有e p q 计算出d。
利用python代码
e = 65537
p=9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q=11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
n = p*q
#密文
C=83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
d=56632047571190660567520341028861194862411428416862507034762587229995138605649836960220619903456392752115943299335385163216233744624623848874235303309636393446736347238627793022725260986466957974753004129210680401432377444984195145009801967391196615524488853620232925992387563270746297909112117451398527453977
#求明文
M = pow(C,d,n) #快速求幂取模运算
print(M)
得出flag{5577446633554466577768879988}
RSA算法是一种非对称加密算法,它基于大整数分解的困难性。RSA算法包括密钥生成、加密和解密三个主要步骤。下面是RSA算法的数学公式和步骤:
RSA算法是一种非对称加密算法,它基于大整数分解的困难性。RSA算法包括密钥生成、加密和解密三个主要步骤。下面是RSA算法的数学公式和步骤:
密钥生成:
选择两个大素数 p 和 q。
计算 n=p×q,n 称为模数。
计算欧拉函数 ϕ(n)=(p−1)×(q−1)。
选择一个整数 e,使得 1<e<ϕ(n),且 e 与 ϕ(n) 互质(即 gcd(e,ϕ(n))=1)。
计算 e 关于 ϕ(n) 的模逆元 d,满足 (d×e)modϕ(n)=1。
公钥为 (e,n),私钥为 (d,n)。
加密:
给定明文 m(通常 m 是一个整数,且 0≤m<n),加密公式为:
c=memodn
其中 c 是密文。
解密:
给定密文 c,解密公式为:
m=cdmodn
其中 m 是解密后的明文。
示例:
假设我们有以下参数:
p=61
q=53
n=p×q=3233
ϕ(n)=(p−1)×(q−1)=3120
选择 e=17(因为 gcd(17,3120)=1)
计算 d 使得 (17×d)mod3120=1,得到 d=2753
公钥为 (17,3233),私钥为 (2753,3233)。
加密示例:
假设明文 m=65
密文 c=6517mod3233=2790
解密示例:
密文 c=2790
明文 m=27902753mod3233=65
RSA算法的安全性依赖于大整数分解的困难性,即给定两个大素数的乘积 n,很难在合理的时间内分解出 p 和 q。
Windows系统密码
打开题目:是pass.hash的文件包
内容Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
ctf:1002:06af9108f2e1fecf144e2e8adef09efd:a7fcb22a88038f35a8f39d503e7f0062:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SUPPORT_388945a0:1001:aad3b435b51404eeaad3b435b51404ee:bef14eee40dffbc345eeb3f58e290d56:::
分析一下题目
ctf:用户名 1002:用户id
密码hash:
06af9108f2e1fecf144e2e8adef09efd //LM哈希加密
a7fcb22a88038f35a8f39d503e7f0062 //NTLM哈希加密
给出了两个hash密码,因为题目说是Windows系统密码,所以密码hash是ntlm hash。
NTLM哈希通常由三部分组成,每部分由冒号(:)分隔:
用户名和域(如果有的话)
LM哈希(通常为24个字符的十六进制数)
NTLM哈希(通常为32个字符的十六进制数)
哈希长度:
LM哈希长度固定为24个十六进制字符。
NTLM哈希长度固定为32个十六进制字符。
得出flag。
ntml类型用hashcat解密的话比较麻烦。需要用字典或者彩虹表或者暴力破解,非常麻烦,干脆就用在线解密。
MD5是一种特定的哈希函数,用于生成数据的哈希值。哈希函数是一类算法,MD5是其中的一员。所以可以用MD5在线解密。LM解密是一种较老的密码哈希算法,它在Windows系统中曾被广泛使用,尤其是在Windows 7和Windows Server 2008之前的版本中。LM哈希算法相对容易受到破解攻击,因为它依赖于DES加密,并且只对密码的前14个字符进行加密。因此,LM哈希算法已经被弃用,不再推荐使用。
明天再看,太晚了。LM的哈希破解解密太麻烦了,我还去kali里面找了一个工具findmyhash,但是这个工具一直使用不了,我也排错不到什么原因。但是两个密码一个是LM的,一个是NTLM的,所以他们两个解密后得到的应该是同一个字符串。get_luck。像比较有应试能力的人可能一下就把这题通过了,但是像我比较固执比较犟的人可能就会花很多时间...
lm的解密失败了🤦呜呜呜,不管了啦。
试了一百遍都没有用:https://xuanwo.xin/archives/785fa029-178d-4c69-b7f2-08dd90e3fd8c