All-in-One PicoCTF Writeups: Forensics

All-in-One PicoCTF Writeups: Forensics
CX330前言
其實好像也沒什麼好講前言的,但就是不想要一開始就是題目分類,所以還是放了個前言 XD。
自己在刷 PicoCTF 的時候常常發現,幾乎所有的 writeup 都是英文的居多,所以想說來寫個完整一點的中文版!總之呢這裡就是會盡量彙整所有的 picoCTF 的題目在這邊(但是因為已經寫了 60 題左右才開始打算來寫 writeup,所以可能前面的部分會等其他都寫完再來補),如果有需要就可以直接來這邊看所有的 writeup,就這樣啦!希望能幫忙到你。
MSB
看這個題目名稱,然後又出現在 Forensics,應該是跟隱寫術有關了。如果你還不知道 LSB 和 MSB 都是個啥,可以先去看看 Cryptography Notes 密碼學任督二脈,裡面有解釋了甚麼是 LSB 和 MSB。
題目的題幹說,This image passes LSB statistical analysis。那相反的,它其實就是在暗示 flag 可能藏在 RGB 像素值的 MSB 中,所以就來提取它每個像素中的的 MSB 吧。這邊用到了 Python 中的 Pillow 這個庫,如果覺得太麻煩,也可以直接用這個現成的工具 Stegsolve。
Exploit 如下:
from PIL import Image
import re
def extract_msb(image_path):
image = Image.open(image_path)
pixels = image.load()
# 獲取圖片尺寸
width, height = image.size
# 初始化儲存提取自MSB的字串
msb_data = ""
# 提取每個像素的MSB
for y in range(height):
for x in range(width):
r, g, b = pixels[x, y]
# AND運算只保留了r, g, b的最高位,後面清零,再右移7位
msb_data += str((r & 0b10000000) >> 7)
msb_data += str((g & 0b10000000) >> 7)
msb_data += str((b & 0b10000000) >> 7)
# 將提取的MSB每8個位元轉換成字元
hidden_text = ""
for i in range(0, len(msb_data), 8):
byte = msb_data[i : i + 8]
if len(byte) == 8:
hidden_text += chr(int(byte, 2))
return hidden_text
def find_pico_ctf(data):
pattern = r"picoCTF\{.*?\}"
matches = re.findall(pattern, data)
if matches:
for match in matches:
print(f"Found: {match}")
else:
print("No matches found")
if __name__ == "__main__":
image_path = (
"MSB/Ninja-and-Prince-Genji-Ukiyoe-Utagawa-Kunisada.flag.png" # 替換為你的路徑
)
hidden_message = extract_msb(image_path)
find_pico_ctf(hidden_message)picoCTF{15_y0ur_que57_qu1x071c_0r_h3r01c_ea7deb4c}Verify
先連接到題目給的主機。
之後用 ls看一下有甚麼文件。
ctf-player@pico-chall$ ls
checksum.txt decrypt.sh files其中題目有說 decrypt.sh是用來解密檔案的腳本,checksum.txt是紀錄了正確的 hash 值得文件,最後 files 是一個目錄,裡面有很多文件,但只有一個是可以用來被解密的正確腳本。所以我們要做的就是去比對每個文件的哈希值和 checksum.txt的值。我們利用下面這兩個命令,先 cat出正確的雜湊值,再去用 sha256sum去計算每個 files裡面的檔案的雜湊,最後比對。
ctf-player@pico-chall$ cat checksum.txt
5848768e56185707f76c1d74f34f4e03fb0573ecc1ca7b11238007226654bcda
ctf-player@pico-chall$ sha256sum files/* | grep 5848768e56185707f76c1d74f34f4e03fb0573ecc1ca7b11238007226654bcda
5848768e56185707f76c1d74f34f4e03fb0573ecc1ca7b11238007226654bcda files/8eee7195最後一行顯示正確的文件是 8eee7195,那就用 ./decrypt.sh解密他。就得到 Flag 啦。
picoCTF{trust_but_verify_8eee7195}CanYouSee
這題的 Handout 解壓縮之後是一張圖片,我一開始嘗試了 steghide 去提取隱寫資訊,但是提取出來後的東西是下面這個。
The flag is not here maybe think in simpler terms. Data that explains data.Data that explains data. 這就告訴我們要找他的 Metadata 啦。這邊使用下面這個命令。
exiftool ukn_reality.jpg執行後的結果為:
ExifTool Version Number : 12.76
File Name : ukn_reality.jpg
Directory : .
File Size : 2.3 MB
File Modification Date/Time : 2024:03:11 20:05:53-04:00
File Access Date/Time : 2024:09:01 13:25:54-04:00
File Inode Change Date/Time : 2024:09:01 13:25:46-04:00
File Permissions : -rw-r--r--
File Type : JPEG
File Type Extension : jpg
MIME Type : image/jpeg
JFIF Version : 1.01
Resolution Unit : inches
X Resolution : 72
Y Resolution : 72
XMP Toolkit : Image::ExifTool 11.88
Attribution URL : cGljb0NURntNRTc0RDQ3QV9ISUREM05fYjMyMDQwYjh9Cg==
Image Width : 4308
Image Height : 2875
Encoding Process : Baseline DCT, Huffman coding
Bits Per Sample : 8
Color Components : 3
Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2)
Image Size : 4308x2875
Megapixels : 12.4Attribution URL 看起來很可疑,拿去 base64 解碼一下。
base64 -d <<< cGljb0NURntNRTc0RDQ3QV9ISUREM05fYjMyMDQwYjh9Cg==果然,得到 Flag 啦。
picoCTF{ME74D47A_HIDD3N_b32040b8}Secret of the Polyglot
這題給了個 PDF 檔案,打開後發現了一半的 Flag。
1n_pn9_&_pdf_1f991f77}之後用file flag2of2-final.pdf這個命令檢查一下這個檔案。發現他其實是一個 PNG 檔案。所以我們用mv flag2of2-final.pdf flag2of2-final.png把檔名改掉後打開這張圖片。
picoCTF{f1u3n7_最後把兩個組合起來就好了。
picoCTF{f1u3n7_1n_pn9_&_pdf_1f991f77}Scan Surprise
先用 SSH 連接到題目。
ssh -p 51523 [email protected]然後發現他給了一張 QR Code 的圖片叫做 Flag.png。但因為我手邊沒有手機,用zbarimg把其中的資訊提取出來。
zbarimg flag.png他輸出的東西像這樣:
Connection Error (Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory)
Connection Null
QR-Code:picoCTF{p33k_@_b00_b5ce2572}
scanned 1 barcode symbols from 1 images in 0 seconds果然 Flag 就出來了!
picoCTF{p33k_@_b00_b5ce2572}




%20(1)_2fdc2382942f5aef8475bf32d3e8ab3d.jpg)





