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位凯撒, 即可得出FLag
flag{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在线破解搜出来就是flag
flag{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+qp-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}


刷到什么题就更新。