常見的web攻擊方式之伺服器端模板注入

2021-09-10 21:29:40 字數 2158 閱讀 8183

伺服器模板注入 (ssti ) 是一種利用公共 web 框架的伺服器端模板作為攻擊媒介的攻擊方式,該攻擊利用了嵌入模板的使用者輸入方式的弱點。ssti 攻擊可以用來找出 web 應用程式的內容結構。下面舉乙個例子:

使用 flask 構建乙個基本的 web 應用程式:

from flask import flask

from flask import request, render_template_string, render_template

'/login'

)def

hello_ssti()

: person =

if request.args.get(

'name'):

person[

'name'

]= request.args.get(

'name'

)

template =

''% person[

'name'

]return render_template_string(template, person=person)

if __name__ ==

"__main__"

:true

)

執行上面這段**,並在瀏覽器中訪問,顯示的結果為:

然後我們嘗試一些良性的輸入,訪問?name=bob,結果為:

下面演示一些攻擊者的輸入,比如訪問?name=bob},你會發現頁面中除了顯示了 hello bob!之外,連同秘鑰也一起被顯示了。

由於在模板中使用的是 % 字串模板,所以它對任何傳遞給 python 表示式的內容進行了求值。在 flask 模板語言中,我們傳遞了 },它對字典 person 中保密的鍵值進行了求值,這洩露了應用程式的秘鑰。

我們還可以執行更強大的攻擊,訪問?name=}

,你會發現整個 person 字典中的內容全被顯示在頁面中了。

即使攻擊者想要獲取伺服器端敏感的配置引數,也可以通過 } 的名稱採納數來獲取,訪問?name=},你會發現伺服器的配置顯示在頁面中了。

那麼如何避免敏感資訊洩露呢,在這個情況下,解決的方法是使用模板中我們需要的特定變數,而不是直接使用 %s。

比如我們將 flask **改為:

from flask import flask

from flask import request, render_template_string, render_template

'/login'

)def

hello_ssti()

: person =

if request.args.get(

'name'):

person[

'name'

]= request.args.get(

'name'

)

template =

''return render_template_string(template, person=person)

if __name__ ==

"__main__"

:true

)

然後我們在嘗試訪問?name=},你會發現顯示的結果只是字串 },而沒有伺服器的敏感資訊了。

常見web攻擊方式之DOS XSS

dos 攻擊常以 web 應用程式中脆弱的線路或 url 作為 目標,並向其傳送精心設計的資料報或 url,這樣會迫使伺服器陷入無限迴圈或進行 cpu 密集型運算,從而使得它從資料庫中大規模載入資料,最終迫使伺服器 cpu 超負荷運載以阻止伺服器執行其他請求。ddos 攻擊是指 dos 攻擊以一種精...

常見的六種伺服器攻擊方式

一 sql注入 利用後台漏洞通過url將關鍵sql語句帶入程式從而在資料庫中進行破壞。還有許多黑客會使用f12或postman等拼裝ajax請求,將非法數字傳送給後台,造成程式的報錯,異常暴露到頁面上,就能讓攻擊者知道後台使用的語言及框架了。二 網路嗅探程式 檢視通過internet的資料報來抓取口...

常見的web攻擊方式及預防

1.sql注入。在使用者的輸入被直接動態拼裝sql語句時,可能使用者的惡意輸入被拼到了sql語句上,而造成了一些惡意操作。比如查詢到一些資料甚至刪除一些資料。一般應對方法是對sql語句進行預處理。thinkphp防sql注入 2.xss cross site scripting。跨站指令碼攻擊。想辦...