DOM-based XSS 発生する原因
DOM-based XSSとは
Dom-based XSS とは、ブラウザ上で動作するJavaScript上のコードに問題があるために発生します。 主に以下のJavaScriptのメソッド、プロパティを使用した際に、発生する可能性が高いです。
- document.write()
- document.writeln()
- document.domain
- element.innerHTML
- element.outerHTML
- element.insertAdjacentHTML
- element.onevent
これらのメソッド、プロパティの使用方法を間違えるとDOM-based XSSの原因に繋がります。 どういった時にXSSが実行されるのか、見ていきます。
document.write()
document.write()とは
文字列や変数の値を表示させるメソッドです。 以下の用に使用すると、HTML上に「Hello World」と表示させることができます。
document.write('Hello World')
また、以下のHTMLのタグを含めた使用方法もできます。こう使用することにより、HTMLのタグが反映され、「Hello World」が見出しとして大きく表示されます。
document.write('<h1>Hello World</h1>')
document.write()のDOM-based XSS
DOM-based XSSが発生する原因は、利用者から入力を受け取り、document.write()に反映されることにより発生します。 例
let input = '<img src=1 onerror=alert(1)>' // 利用者の入力値 document.write(input) // DOM-based XSSの発火原因
DOM-based XSSの発生原因 結論
基本的に、利用者から入力を受け取り、任意のメソッド、プロパティに反映させることにより、DOM-based XSSの発生原因になります。
BurpSuite Extender 開発1
拡張機能名を設定する方法
from burp import IBurpExtender class BurpExtender(IBurpExtender): def registerExtenderCallbacks(self, callbacks): # 拡張機能名を「Hello」に設定します。 callbacks.setExtensionName("Hello")
拡張機能名を「Hello」と設定することで「Extender > Extensions」に反映されます。
タブ作成
from burp import IBurpExtender,ITab from javax.swing import JPanel from java.awt import BorderLayout class BurpExtender(IBurpExtender,ITab): # タブnameを「New Tab」に設定 def getTabCaption(self): return "New Tab" # UIを設定 def getUiComponent(self): panel = JPanel(BorderLayout()) return panel def registerExtenderCallbacks(self, callbacks): # BurpのUIに追加 callbacks.addSuiteTab(self)
以下のようにタブに「New Tab」を追加できます。