picoCTF 2022 Forensics Writeup
題目:
https://play.picoctf.org/practice?category=4&difficulty=2&originalEvent=70&page=1&search=
Torrent Analyze
題目提供了一個pcap檔案,我們可以用wireshark進行封包分析
題目提到是進行BT下載(所以分析BT-DHT),目標是找出下載檔名。在維基百科上我們學到裡面會有一個SHA-1的infohash,所以我們在wireshark設定filter:bt-dht contains "info_hash"
可以看到有好幾個不同的Hash,哪個才是我們要的呢?根據提示4檔案為.iso檔案,大小很大,因此會傳較多的封包,故可判斷出我們要的hash是e2467cbf021192c241367b892230dc1e05c0580e
將其copy出來

丟去搜尋就可以發現都是別人的write up檔案名稱為ubuntu-19.10-desktop-amd64.iso
Loocky Here
用wget下載檔案,cat anthem.flag.txt | ag "picoCTF"就可找到
Enhance!
題目給了一張svg檔案,用文字編輯器開啟可看出85~120行藏有Flag
(可搜尋大括號:cat drawing.flag.svg | ag "{")
id="tspan3748">p </tspan><tspan
sodipodi:role="line"
x="107.43014"
y="132.08942"
style="font-size:0.00352781px;line-height:1.25;fill:#ffffff;stroke-width:0.26458332;"
id="tspan3754">i </tspan><tspan
sodipodi:role="line"
x="107.43014"
y="132.09383"
style="font-size:0.00352781px;line-height:1.25;fill:#ffffff;stroke-width:0.26458332;"
id="tspan3756">c </tspan><tspan
sodipodi:role="line"
x="107.43014"
y="132.09824"
style="font-size:0.00352781px;line-height:1.25;fill:#ffffff;stroke-width:0.26458332;"
id="tspan3758">o </tspan><tspan
sodipodi:role="line"
x="107.43014"
y="132.10265"
style="font-size:0.00352781px;line-height:1.25;fill:#ffffff;stroke-width:0.26458332;"
id="tspan3760">C </tspan><tspan
sodipodi:role="line"
x="107.43014"
y="132.10706"
style="font-size:0.00352781px;line-height:1.25;fill:#ffffff;stroke-width:0.26458332;"
id="tspan3762">T </tspan><tspan
sodipodi:role="line"
x="107.43014"
y="132.11147"
style="font-size:0.00352781px;line-height:1.25;fill:#ffffff;stroke-width:0.26458332;"
id="tspan3764">F { 3 n h 4 n </tspan><tspan
sodipodi:role="line"
x="107.43014"
y="132.11588"
style="font-size:0.00352781px;line-height:1.25;fill:#ffffff;stroke-width:0.26458332;"
id="tspan3752">c 3 d _ a a b 7 2 9 d d }</tspan></text>
接著需要將其取出,用以下指令可輸出,用ag抓出我們要的行
cat drawing.flag.svg | ag "</tspan"
輸出如下:
id="tspan3748">p </tspan><tspan
id="tspan3754">i </tspan><tspan
id="tspan3756">c </tspan><tspan
id="tspan3758">o </tspan><tspan
id="tspan3760">C </tspan><tspan
id="tspan3762">T </tspan><tspan
id="tspan3764">F { 3 n h 4 n </tspan><tspan
id="tspan3752">c 3 d _ a a b 7 2 9 d d }</tspan></text>
我們進一步將訊息截斷,只取我們要的部分
cat drawing.flag.svg | ag "</tspan" | cut -d ">" -f2 | cut -d "<" -f1
這裡-d參數用以指定截斷處的字元,-f1或-f2指定要留下前面那一段還是後面那一段
輸出如下:
p
i
c
o
C
T
F { 3 n h 4 n
c 3 d _ a a b 7 2 9 d d }
接著要移除換行符與空白,我們可以用tr將他們刪除掉
cat drawing.flag.svg | ag "</tspan" | cut -d ">" -f2 | cut -d "<" -f1 | tr -d " " | tr -d "\n"
得到的便是flag
St3g0
先用file檢查一下
pico.flag.png: PNG image data, 585 x 172, 8-bit/color RGBA, non-interlaced
沒什麼異狀
再用exiftool,也無異狀
使用binwalk得到輸出
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 PNG image, 585 x 172, 8-bit/color RGBA, non-interlaced
41 0x29 Zlib compressed data, default compression
使用zsteg,便得到我們的flag
File types
用flie確認,發現副檔名.pdf是騙人的,他是一個shell script。用bat Flag.pdf確定這個script是沒問題的,我們chmod給權限並執行
x - created lock directory _sh00046.
x - extracting flag (text)
./Flag.pdf: 119: uudecode: not found
restore of flag failed
flag: MD5 check failed
x - removed lock directory _sh00046.
於是我們安裝uudecode
sudo apt install sharutils -y
再試一次,得到一個名為flag的檔案,用file確認發現為current ar archive
ar
man ar 看如何將其解壓縮
ar x flag
cpio
mv flag flag.cpio
cpio -i < flag.cpio
bzip2
bzip2 -d flag
Gzip
mv flag.out flag.gz
gzip -d flag.gz
lzip
lzip -d flag
lz4
mv flag.out flag.lz4
lz4 -d flag.lz4
lzma
mv flag flag.lzma
lzma -d flag.lzma
lzop
mv flag flag.lzop
lzop -d flag.lzop
lzip
lzip -d flag
xz
mv flag.out flag.xz
xz -d flag.xz
Hex
終於,我們拿到了文字檔,cat後結果看起來是16進位
7069636f4354467b66316c656e406d335f6d406e3170756c407431306e5f
6630725f3062326375723137795f39353063346665657d0a
用xxd解碼cat flag | xxd -p -r即得flag。
一直解壓縮的部分跟bandit Level 12 -> 13 挺像的
Eavesdrop
這題也是封包分析題,一樣丟進wireshark分析
TCP協議會用三次握手建立連接,四次揮手段開連接
Arp協議是用來取得目標ip的mac地址的
DHCP協議用來分配ip
可以看這兩個影片:
有以上先備知識,數據又沒加密,可以一邊看他們聊天內容一邊解題
所以劇情應如下:
劇情
No.1~2
10.0.2.15請求ip位置
No.3~4
為了傳送訊息,使用arp協議取得目標的mac位置
No.5~11
No.5~7為10.0.2.15和10.0.2.4 TCP三次握手的過程
No.8~11是使用arp協議互相取得對方mac位置
No.12~No.19
10.0.2.4:Hey, how do you decrypt this file again? #No.12
10.0.2.15:You’re serious? #No.14
10.0.2.4:Yeah, I’m serious #No.16
10.0.2.15:*sigh* openssl des3 -d -salt -in file.des3 -out file.txt -k supersecretpassword123 #No.18
通信過程中會有一些Arp,我們都知道他是幹嘛的,對解題沒什麼幫助所以之後都將跳過。
No.24~37
10.0.2.4:Ok, great, thanks. #No.24
10.0.2.15:Let’s use Discord next time, it’s more secure. #No.26
(你也知道現在這樣不安全啊)
10.0.2.4:C’mon, no one knows we use this program like this! #No.28
10.0.2.15:Whatever. #No.30
10.0.2.4:Hey. #No.32
10.0.2.15:Yeah? #No.34
10.0.2.4:Could you transfer the file to me again?
看來是10.0.2.15接著會傳檔案給10.0.2.4,裡面便有本題的答案
No.38~47
看起來是10.0.2.15向35.224.170.84發起HTTP請求,可能只是單純瀏覽別的網站或是要下載要傳給10.0.2.4的檔案(我不知道XD)
No.48~
10.0.2.15:Oh great. Ok, over 9002? #No.48
10.0.2.4:Yeah, listening. #No.52
這裡的9002我不知道是什麼,可能是port之類的?
No.57 10.0.2.15傳了48bytes的data,之後說
10.0.2.15: Sent it #No.59
所以No.57發送的這個data應該就是他傳輸的檔案,我們要的東西
將其以Hex Stream複製出來,得到
53616c7465645f5f3c4b26e8b8f91e2c4af8031cfaf5f8f16fd40c25d40314e6497b39375808aba186f48da42eefa895
將其寫入檔案,並用No.18提到的解密方法解密
#寫入檔案
echo "53616c7465645f5f3c4b26e8b8f91e2c4af8031cfaf5f8f16fd40c25d40314e6497b39375808aba186f48da42eefa895" | xxd -p -r > file.des3
#解密
openssl des3 -d -salt -in file.des3 -out file.txt -k supersecretpassword123
#查看
cat file.txt
Redaction gone wrong
超簡單,當學生都做過的事
把pdf打開,用選取把黑框的部分反白就是答案
Packets Primer
簡單題,一樣開wiresharp分析封包,點開第四個封包就是答案
複製出來後可用tr -d " "把空格去掉








![[Note] Writing a simple Program in C - LiveOverflow](/2026/06/03/Note-Writing-a-simple-Program-in-C-LiveOverflow/output.png)