BUUCTF, 自己学习的过程中思路记录, 以及flag… (目的是记录自己的思路和想法!!!)
题目地址: BUUCTF
MD5
直接拿去SOMD5解密flag{admin1}
看我回旋踢
ROT13解密, 直接在线工具.flag{5cd1004d-86a5-46d8-b720-beb5ba0417e1}
Url编码
用Hackbar之类的工具进行URL解码flag{and 1=1}
摩丝
这可不是丝wa… 用工具直接解摩斯电码吧.
工具: 摩尔斯电码解密flag{iloveyou}
一眼就解密
打开F12, 在Console中输入
atob("ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR30=")
flag{THE_FLAG_OF_THIS_STRING}
变异凯撒
没思路先写脚本穷举, 发现从ascii+5开始依次出现flag关键字, 于是写脚本进行解密.
cipher = "afZ_r9VYfScOeO_UL^RWUc"
index = 0
for num in range(5, len(cipher) + 5):
temp = ""
for i in cipher:
temp += chr(ord(i) + num)
print(temp[index], end="")
index += 1
flag{Caesar_variation}
Quoted-printable
工具题,没意义,也没难度,知道有这种编码就会解.
在线工具flag{那你也很棒哦}
password
社工题目, 之前做过类似的, 知道规律就行, 没什么难度. (别问为什么, 这就是CTF)flag{zs19900315}
zip伪加密
感觉不应该是密码学, 应该是Misc题目.
使用WinHex把压缩包打开, 将Hex的, 50 4B 03 04 14 00 09 00
改成50 4B 03 04 14 00 00 00
, 保存再去解压, 就会发现可以正常解压了.flag{Adm1N-B2G-kU-SZIP}
RSA
稍微了解一下RSA加密算法就知道d怎么求了, 直接上py脚本.
import libnum
p = 473398607161
q = 4511491
e = 17
print(libnum.invmod(e, (p - 1) * (q - 1)))
flag{125631357777427553}
Rabbit
看题目就知道是什么加密, 直接找在线工具.flag{Cute_Rabbit}
丢失的MD5
给了一个Python脚本, 脚本是Python2的, 直接运行得到Flag. (目的是了解MD5爆破)flag{e9032994dabac08080091151380478a2}
篱笆墙的影子
栅栏密码, 选择2栏, 进行加密操作, flag直接出. (注意是加密, 不是解密)flag{wethinkwehavetheflag}
Alice与Bob
通过在线工具进行质因数分解, 得到两个素数, 根据题目, 将小素数放在前面, 大素数放在后面, 拼接, 进行md5 32位的加密.flag{d450209323a847c8d01c6be47c81811a}
rsarsa
需要了解RSA的加密过程, 才会知道解密过程, 背脚本是没有意义的。
建议去看看RSA原理, 推荐几个我看过的教程.
RSA-1
RSA-2
看完上面两个绝对会RSA基础题目解密了.
上Python脚本!!
import libnum
p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e = 65537
c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
d = libnum.invmod(e, (p-1)*(q-1))
result = pow(c, d, p*q)
print(result)
flag{5577446633554466577768879988}
传统知识+古典密码
?这什么沙雕题目,如果看不懂辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳
, +甲子
就GG.
得出: XZSDMFLZ
然后进行古典密码解密, 先4栏栅栏
, 再偏移21位凯撒
, 即可得出FLagflag{SHUANGYU}
大帝的密码武器
说实话, 这个题目一开始我没怎么看明白, 后来找到规律就好办了.
先将FRPHEVGL
进行ASCII爆破, 看题目说会出现有意义的单词, 就每次爆破的时候, ASCII大于z
的时候, 将当前字母的ASCII码进行-26
操作, 爆破发现13
是有意义SECURITY
的, 直接上脚本.
cipher = "FRPHEVGL" # 已知的密文
result = "SECURITY" # 第一步找到的有意义单词
secert = 13 # 第二步找到的有意义偏移量
t = "ComeChina" # 需要解密的密文
# 1. 爆破具体是位移多少位才是有意义的.
for i in range(26):
for j in cipher:
temp = ord(j) + i
if temp > ord("Z"):
temp -= 26
print(chr(temp), end="")
print()
# 2. 找规律, 发现都是根据13来的.
temp = []
for i, j in zip(cipher, result):
i = ord(i)
j = ord(j)
if i > j:
temp.append(j - i)
else:
temp.append(j - i)
print(temp)
# 3. 根据题目规律爆破, 超过z就-26, 即可得到Flag
for i in t:
t = ord(i) + secert
if t > ord("z"):
t -= 26
print(chr(t), end="")
flag{PbzrPuvan}
Windows系统密码
下载下来附件拿去Kali
使用John
工具进行解密.
john pass.hash
john --show --format=LM pass.hash
有点坑, 要小写.flag{good-luck}
RSA1
已知dp,dq求解: 题目给了dp, dq, 需要去了解一下dp,dq是什么, 然后直接脚本做题.
import libnum
import binascii
def decrypt(dp,dq,p,q,c):
InvQ = libnum.invmod(q,p)
mp = pow(c,dp,p)
mq = pow(c,dq,q)
m=(((mp-mq)*InvQ)%p)*q+mq
print (binascii.unhexlify(hex(m)[2:]))
flag{W31c0m3_70_Ch1n470wn}
RSA3
题目给了两个c
, 两个e
, 一个n
, 典型的RSA共模攻击
, 直接一把梭.
import libnum
import binascii
def RSACommonMode(n, c1, c2, e1, e2):
def egcd(a, b):
if b == 0:
return a, 0
else:
x, y = egcd(b, a % b)
return y, x - (a // b) * y
s = egcd(e1, e2)
s1 = s[0]
s2 = s[1]
if s1 < 0:
s1 = - s1
c1 = libnum.invmod(c1, n)
elif s2 < 0:
s2 = - s2
c2 = libnum.invmod(c2, n)
m = pow(c1, s1, n) * pow(c2, s2, n) % n
print(binascii.unhexlify(hex(m)[2:]))
flag{49d91077a1abcb14f1a9d546c80be9ef}
凯撒?替换?呵呵!
一堆看不懂的乱码, 扔去quipqiup进行字符频率统计, 就可以得到flag了.
大坑, 空格要删除掉.flag{substitutioncipherdecryptionisalwayseasyjustlikeapieceofcake}
权限获得第一步
得到了一个txt, 里面是Windows SAM的内容, 格式是: UserName:ID:HASH:HASH:::
, 将最后一段HASH去md5在线破解搜出来就是flagflag{3617656}
萌萌哒的八戒
从网上找个猪圈密码对照表, 一个一个对照出来就可以了.flag{whenthepigwanttoeat}
世上无难事
一堆看不懂的, 扔去词频分析, 得到flag, 但是提交的时候需要全小写.flag{640e11012805f211b0ab24ff02a1ed09}
robomunication
是一段音频, 听了一下感觉像是摩斯电码, 放到Audacity
分析.flag{BOOPBEEP}
异性相吸
key文件中一一对asdasdad之类的, 密文则是一段乱码, 猜可能是把asdasd的ascii码拿来对应密文进行异或.
写个脚本
with open("key.txt", "r") as key:
with open("密文.txt", "r") as cipher:
keyData = key.read()
cipherData = cipher.read()
for i, j in zip(keyData, cipherData):
print(chr(ord(i) ^ ord(j)), end="")
flag{ea1bc0988992276b7f95b54a7435e89e}
还原大师
给了个残缺的原文, 残缺的md5, 但是提示原文缺失的是大写字母, 那就简单了, 写个脚本爆破出来
import string
import hashlib
sSet = string.ascii_uppercase
for i in sSet:
for j in sSet:
for k in sSet:
m = f"TASC{i}O3RJMV{j}WDJKX{k}ZM"
md5 = hashlib.md5()
md5.update(m.encode("utf-8"))
result = md5.hexdigest().upper()
if result[:4] == "E903":
print(result)
print(m)
flag{E9032994DABAC08080091151380478A2}
传感器
没头绪, 不争气的去搜了搜wp, 原来是曼彻斯特编码
, 那没事了.
网上大佬的脚本
cipher='5555555595555A65556AA696AA6666666955'
def iee(cipher):
tmp=''
for i in range(len(cipher)):
a=bin(eval('0x'+cipher[i]))[2:].zfill(4)
tmp=tmp+a[1]+a[3]
print(tmp)
plain=[hex(int(tmp[i:i+8][::-1],2))[2:] for i in range(0,len(tmp),8)]
print(''.join(plain).upper())
iee(cipher)
flag{FFFFFED31F645055F9}
Cipher
在线工具解出flag{itisnotaproblemhavefun}
RSAROLL
就是简单的RSA, 密文很多. 写个脚本就可以了.
import libnum
# {920139713,19}
n = 920139713
p = 18443
q = 49891
e = 19
d = libnum.invmod(e, (p-1)*(q-1))
with open("data.txt", "r") as fp:
for i in fp.readlines():
c = i.strip()
print(chr(pow(int(c),d,n)), end="")
flag{13212je2ue28fy71w8u87y31r78eu1e2}
[BJDCTF 2nd]rsa0
挺简单的, 给了p+q
和p-q
的结果, 用幼儿园数学就可以解出来.
写个脚本
import libnum
p_q = 23739288354455618823500789320882015507916235495298919211105643329075951209068787630098346460475927331769393616566728637534240820048596719327537779749309942
p__q = 948302319808573594690404166522167040466682672257436846156503266017624344686672560965640249175574642110944426131051410227570706455318246794290130811495220
q = (p_q - p__q) // 2
p = p_q - q
n = p * q
e = 14319223
d = libnum.invmod(e, (p-1)*(q-1))
c=15149744517033579581121079919371536543625764309178093114222222083997624880804403990685225551641742250133869348431666895839971706066083354772440919051386874078900267911498803910425195536370033292591575354103143983614210191790171674997710390856232217787490303852272027717390320852706104910007664891405492668536
m = str(hex(pow(c,d,n)))[2:]
for i in range(0, len(m), 2):
print(chr(int(m[i:i+2], 16)), end="")
flag{21c569ae-3068-4b9f-97f1-784ab48863d9}
刷到什么题就更新。