參考影片:PicoCTF 2022 Forensics

題目:
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出來
image
丟去搜尋就可以發現都是別人的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 " "把空格去掉