iT邦幫忙

2025 iThome 鐵人賽

DAY 22
0
自我挑戰組

新手挑戰 picoCTF:資安入門紀錄系列 第 22

Enhance!(SVG)— 從隱藏的 SVG 拿到 flag

  • 分享至 

  • xImage
  •  

今天做的是:
https://ithelp.ithome.com.tw/upload/images/20251004/20178898m2ItJ8o9cC.png
題目只給一個 drawing.flag.svg,flag 被藏在檔案裡但看起來是看不見的。

SVG 是 XML(純文字),作者把 flag 放在 / 裡,但把字體設極小且填色為白色,所以在圖上看不見;直接把 SVG 當文字檔檢視、抽出 內容並把字元拼接起來就能得到 flag。
https://ithelp.ithome.com.tw/upload/images/20251004/20178898OBA2sCcuf9.png


解題步驟
一、下載檔案:
wget -O drawing.flag.svg https://artifacts.picoctf.net/c/102/drawing.flag.svg


二、快速查看檔頭(確認是 SVG / Inkscape):
head -n 40 drawing.flag.svg
https://ithelp.ithome.com.tw/upload/images/20251004/20178898IUwRzAQEdQ.png
可以看到 XML header 與 ,表示是由 Inkscape 產生的標準 SVG。


三、定位含文字的區段(我用 sed 看第 40–120 行):
sed -n '40,120p' drawing.flag.svg
https://ithelp.ithome.com.tw/upload/images/20251004/20178898NrXxEpMOHN.png
會看到 <text ...> 裡面有很多 ,每個 裡包含一個或幾個字元:

<tspan ...>p </tspan><tspan ...>i </tspan><tspan ...>c </tspan> ...
<tspan ...>F { 3 n h 4 n </tspan><tspan ...>c 3 d _ d 0 a 7 5 7 b f }</tspan>

注意:style 裡有 font-size:0.00352781px; fill:#ffffff; —— 字型超小且是白色(背景也是白色) → 文字在畫面上不可見。


四、因為 被拆成很多片段(逐字或逐小塊),直接 grep "picoCTF{" 可能找不到整段。於是我把所有 的內文抽出再拼接:
grep -oP '(?<=<tspan[^>]>).?(?=)' drawing.flag.svg | tr -d ' \n'
系統輸出:picoCTF{3nh4nc3d_d0a757bf}


原理說明
SVG = XML = 純文字檔:任何用向量繪圖工具(Inkscape、Illustrator)輸出的 SVG 都是可讀的 XML,裡面包含 、、、、 等節點。

作者用 CSS 屬性把文字「變得不可見」——像把 fill:#ffffff(白色)套到白背景、或把 font-size 設到非常小,讓人在視覺上看不到,但文字內容仍在檔案內。

為了避免直接用 grep "picoCTF{" 找到,字可能被拆成多個 甚至一個字一個 ;所以需要把所有 內容抽出並合併。


小小心得
這題對我來說是很新鮮的體驗,因為之前接觸的 CTF 解題大多是在程式碼、加密、hash 或 web 服務上動腦,這次卻是遇到一個 SVG 向量圖檔。
剛開始會以為「圖片」應該要用圖像處理的角度來做,但其實 SVG 是純文字的 XML 格式,等於是可以直接打開來讀,就像閱讀 HTML 或程式一樣。


上一篇
PW Crack 5 — 用字典 + 雜湊找密碼
下一篇
Big Zip — 解密大型壓縮檔
系列文
新手挑戰 picoCTF:資安入門紀錄23
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言