快轉到主要內容

每周CTF計畫01

·
CTF
貝坦betan
作者
貝坦betan
其實作者也只會是我啦哈哈
假裝自己在參加鐵人賽

前言
#

這次參加的是 IERAE CTF ,其實本來是有報名三場CTF的,但最後只有這場解出比較多題(但也沒多少),所以就專注寫這個了
之後的步調應該也都會差不多是這樣,先報名2~3個CTF,最後再看要主打哪個
本次排名 106/224 解出四題qq

題目
#

Welcome
#

flag在DC內,就單純進去找 :)

OMG
#

類型: web
一個網頁,然後只要按返回前一頁33次就可以了

derangement
#

類型: crypto
有一個隨機產生的16個字符,然後裡面會不斷隨機排列他們的順序,目標是找出正確的順序
查看加密法後會發現字符不會出現在本來正確的地方,因此只要多跑幾次就可以順利得出本來的順序了
本來是想硬搓的,但想說這樣沒甚麼用還是透過pwntool寫好了

from pwn import *

# 開啟程序
p = remote('104.199.135.28', 55555)


# 用來存儲所有獲得的提示
hints = []
ans=''
p.sendlineafter("> ",'1')
response = p.recvuntil('hint: ').decode()
world = p.recvline().decode().strip()
a = world
b = world
c = world
d = world
e = world
f = world
g = world
h = world
i = world
j = world
k = world
l = world
m = world
n = world
o = world
time =0
try:
    while time<100:
        # 發送 "1" 來獲取提示
        p.sendline('1')
        
        # 接收並解析提示
        response = p.recvuntil('hint: ').decode()
        hint = p.recvline().decode().strip()
        hints.append(hint)
        
        print(f'Received hint: {hint}')
        
        # 可以在這裡添加邏輯來分析 hints 並推測原始魔法詞
        if hint[0] in a:
            a = a.replace(hint[0], "")
        if hint[1] in b:
            b = b.replace(hint[1], "")
        if hint[2] in c:
            c = c.replace(hint[2], "")
        if hint[3] in d:
            d = d.replace(hint[3], "")
        if hint[4] in e:
            e = e.replace(hint[4], "")
        if hint[5] in f:
            f = f.replace(hint[5], "")
        if hint[6] in g:
            g = g.replace(hint[6], "")
        if hint[7] in h:
            h = h.replace(hint[7], "")
        if hint[8] in i:
            i = i.replace(hint[8], "")
        if hint[9] in j:
            j = j.replace(hint[9], "")
        if hint[10] in k:
            k = k.replace(hint[10], "")
        if hint[11] in l:
            l = l.replace(hint[11], "")
        if hint[12] in m:
            m = m.replace(hint[12], "")
        if hint[13] in n:
            n = n.replace(hint[13], "")
        if hint[14] in o:
            o = o.replace(hint[14], "")
        ans=a+b+c+d+e+f+g+h+i+j+k+l+m+n+o
        print(ans)
        if(len(ans)==15):
            p.sendline('2')
            p.sendline(ans)
            p.interactive()
except Exception as e:
    print(f'Connection closed or error occurred: {e}')
finally:
    p.close()

Assignment
#

類型: rev
透過IDA打開可以看到順序被打亂的flag
但打開F5後就可以看到排列好順序的flag了

alt text

總結
#

這次其實都只有解出水題出來w
但畢竟才第一周
其實我也不知道這樣會不會有效果 但就先嘗試看看
之後會再補充一些自己沒解出來的題目,但是去查看別人wu解出來的內容

最後分享一個這次在比賽結束後看到的
在講這次比賽crypto類型的題目,頻道內容也有其他資安相關的影片
不過是日文的VT