XML外部實體攻擊是一種針對XML格式的攻擊手法之一,攻擊利用了XML解析器處理外部實體的能力。攻擊者可能試圖訪問本地文件、資料庫等導致資料外洩的風險。
XML外部實體的攻擊如下:
1. XML聲明
一個XML文件都會先從XML聲明開始。這一行會告訴解析器或瀏覽器這個檔案要依照XML規則進行解析。
<?xml version="1.0" encoding="UTF-8"?>
2. 定義實體
接著它需要先在XML的DOCTYPE先定義實體
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY baz SYSTEM "file:///etc/passwd">
]>
這邊我們定義了一個名為baz
的外部實體,引用了外部資源file:///etc/passwd
3. 引用實體
最後是引用實體的部分,透過&baz
的方式引用它。如果它交給解析器或瀏覽器解讀時,解析器或瀏覽器就會讀取/etc/passwd
並將文件內容替換成&baz
。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY baz SYSTEM "file:///etc/passwd">
]>
<foo>&baz;</foo>
攻擊者可以透過這樣來讀取電腦上的敏感訊息,或是將外部實體設置成惡意程式來引用,就能輕而易舉的去控制受害者電腦。
要防範XML外部實體攻擊可以採取將XML解析器的外部引用功能禁用的方法。
參考資料