這是今天的題目,題目給了我們一個用netcat連上去的伺服器
┌──(kali㉿kali)-[~]
└─$ nc saturn.picoctf.net 64285
那我們連上去的時候看到題目給了這串看似亂碼的字串
picoCTF{gl17ch_m3_n07_' + chr(0x61) + chr(0x34) + chr(0x33) + chr(0x39) + chr(0x32) + chr(0x64) + chr(0x32) + chr(0x65) + '}'
這裡的chr(0x..) 表示把十六進位hex數值轉成對應的ASCII 字元,把每個0x值換算成字元
0x61 → a
0x34 → 4
0x33 → 3
0x39 → 9
0x32 → 2
0x64 → d
0x32 → 2
0x65 → e
那我們使用這個指令去完成
printf 'picoCTF{gl17ch_m3_n07_\x61\x34\x33\x39\x32\x64\x32\x65}\n'
\x61\x34\x33\x39\x32\x64\x32\x65是一連串的hex escape也就是十六進位跳脫序列。printf看到\xNN會把他當成一個位元組,把它的十六進位值轉成對應的ASCII字元再輸出。
因此可以得到
picoCTF{gl17ch_m3_n07_a4392d2e}
心得:從這題讓我了解到,遇到像是chr(0x...) 或其它hex表示法時,先把hex轉成ASCII還原,通常有機會就能得到提示的字串或flag。這題我不用echo是因為printf比它更可靠,echo在不同shell上對escape跳脫序列的支援不一致,因此不一定能呈現出答案,而printf則在腳本與互動式都比較穩定。除此之外,也讓我明白遇到像亂碼的東東或拼接的輸出時。不要急著認為題目很難,先從最基礎的表示法下手就有機會能突破。其實我感覺這題和日常的資訊安全分析有點像,例如分析惡意程式或網路封包時,也常常會遇到編碼過的payload。如果缺乏對這些資料型式的敏感度,就容易被誤導或錯過重點。寫了這麼多天的題目,我明白了練習不只是學習工具的用法,還能幫助我在之後實際的資安應用作業上更有效率。