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

丟去搜尋就可以發現~~都是別人的write up~~檔案名稱為`ubuntu-19.10-desktop-amd64.iso`
- 參考資料:https://hackmd.io/@SBK6401/BynwYfvxT
# Loocky Here
用wget下載檔案,`cat anthem.flag.txt | ag "picoCTF"`就可找到
# Enhance!
題目給了一張svg檔案,用文字編輯器開啟可看出85~120行藏有Flag
(可搜尋大括號:`cat drawing.flag.svg | ag "{"`)
```svg=
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`
```bash
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
可以看這兩個影片:
> - [一条视频讲清楚TCP协议与UDP协议-什么是三次握手与四次挥手?](https://youtu.be/Iuvjwrm_O5g)
> - [一条视频讲清楚什么是ARP协议-ARP攻击又是什么](https://youtu.be/mOVWyogzKvY)
有以上先備知識,數據又沒加密,可以一邊看他們聊天內容一邊解題
所以劇情應如下:
## 劇情
### 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複製出來,得到
```hex
53616c7465645f5f3c4b26e8b8f91e2c4af8031cfaf5f8f16fd40c25d40314e6497b39375808aba186f48da42eefa895
```
將其寫入檔案,並用No.18提到的解密方法解密
```bash=
#寫入檔案
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 " "`把空格去掉
#