伺服器模板注入 (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。跨站指令碼攻擊。想辦...