--- tags: CTF_Writeups, picoCTF, General Skills --- # Based * 解題 題目首先提到 `1337` ,這個數字是什麼意思呢? 大家可以先參考維基百科: [Leet](https://zh.wikipedia.org/wiki/Leet) 其實 `1337` 本身就是 **Leet** 這個字的 Leet 寫法, 聽起來很拗口,我稍微說明一下, **Leet** 簡單來說就是駭客語, 會將英文字母換成其他**外形**或**發音**相像的數字或符號, 藉此有一點混淆視覺的效果,且感覺更有駭客風格。 幾個 Leet 例子: * Never -> N3v3r * This -> 7h1$ 當然寫法有很多種,沒有一定的規範, 但會有比較慣用的換法。 這有點像中文的拆字流行文化: * 矮額 -> 矢委客頁 * 爆哥 -> 火暴可可 回到題目,題目要求先 nc 到一個伺服器去: ```shell $ nc jupiter.challenges.picoctf.org 29221 ``` 跑出一些訊息: ( 題目每次都會變,所以請你遵照自己跑出來的結果為主。 ) ``` Let us see how data is stored sludge Please give the 01110011 01101100 01110101 01100100 01100111 01100101 as a word. ... you have 45 seconds..... Input: ``` 可以看出程式要求將一串二進位數字轉成許多字母並串起來,而且有限時。 再者,這題會有許多小題要答,這題二進位答對後還會出現其他題。 這邊有三種解法: 1. 如果要寫 Python 解題,用的還是「題目出現後再貼上程式轉換」的方法的話,勢必需開兩個以上的 shell , webshell 沒辦法這樣做。 因此可以簡單使用網路上轉換工具,可以簡單無腦複製貼上解題,但必須先判斷題目目前是什麼進位制,再用相應進位制轉換器轉換。 2. 不是用 webshell 的話,可以用簡單 Python 程式解題,分別寫出每題對應的轉換程式,然後開另一個視窗來用該程式轉換,原視窗則跑題目伺服器。 3. 使用 `pwntools` 。這是最進階的方法,需額外套件, 但此套件使用率將會非常高,在更進階的題目中再集中講解, 這邊暫不介紹。 開始解題: 1. 網頁轉換 這裡就不贅述了,可自行搜尋 `binary to string` 、 `octal to string` 、 `hex to string` 等關鍵字,網路上有許多轉換器。 2. 簡單 Python 程式 這個方法需要至少開兩個 shell ,其中一個跑 nc ,另一個寫程式轉換。這邊只敘述寫轉換程式的部份: * binary to string ```python= l = input().split() # 讀取字串並用空格切割 for b in l: print(chr(int(b, base=2)), end='') # base 2 to base 10 ,轉成字元,並且字元間不換行 print() # 最後換行 ``` * octal to string ```python= l = input().split() for b in l: print(chr(int(b, base=8)), end='') print() ``` * hex to string ```python= s = input() l = [] for i in range(len(s)//2): # 兩兩切一塊 l.append(s[i*2:i*2+2]) # 放到 l 中 for b in l: print(chr(int(b, base=16)), end='') print() ``` 全部都完成後只要 nc 執行後題目一出現就趕快用以上工具轉換, 三題皆答對即可通關。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up