假裝自己在參加鐵人賽
前言 #
這次參加的是 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了
總結 #
這次其實都只有解出水題出來w
但畢竟才第一周
其實我也不知道這樣會不會有效果 但就先嘗試看看
之後會再補充一些自己沒解出來的題目,但是去查看別人wu解出來的內容
最後分享一個這次在比賽結束後看到的
在講這次比賽crypto類型的題目,頻道內容也有其他資安相關的影片
不過是日文的VT