日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

python SSTI tornado render模板注入

系統(tǒng) 1815 0

原理
tornado render是python中的一個(gè)渲染函數(shù),也就是一種模板,通過(guò)調(diào)用的參數(shù)不同,生成不同的網(wǎng)頁(yè),如果用戶對(duì)render內(nèi)容可控,不僅可以注入XSS代碼,而且還可以通過(guò){{}}進(jìn)行傳遞變量和執(zhí)行簡(jiǎn)單的表達(dá)式。
簡(jiǎn)單的理解例子如下:
------------------------------------------------------------------------------------
import tornado.ioloop
import tornado.web
?
class MainHandler(tornado.web.RequestHandler):
??? def get(self):
??????? self.render('index.html')????? ?
class LoginHandler(BaseHandler):
??? def get(self):
??????? '''
??????? 當(dāng)用戶訪登錄的時(shí)候我們就得給他寫(xiě)cookie了,但是這里沒(méi)有寫(xiě)在哪里寫(xiě)了呢?
??????? 在哪里呢?之前寫(xiě)的Handler都是繼承的RequestHandler,這次繼承的是BaseHandler是自己寫(xiě)的Handler
??????? 繼承自己的類(lèi),在類(lèi)了加擴(kuò)展initialize! 在這里我們可以在這里做獲取用戶cookie或者寫(xiě)cookie都可以在這里做
??????? '''
??????? '''
??????? 我們知道LoginHandler對(duì)象就是self,我們可不可以self.set_cookie()可不可以self.get_cookie()
??????? '''
??????? # self.set_cookie()
??????? # self.get_cookie()
??????? self.render('login.html', **{'status': ''})
def login(request):
??? #獲取用戶輸入
??? login_form = AccountForm.LoginForm(request.POST)
??? if request.method == 'POST':
??????? #判斷用戶輸入是否合法
??????? if login_form.is_valid():#如果用戶輸入是合法的
??????????? username = request.POST.get('username')
??????????? password = request.POST.get('password')
??????????? if models.UserInfo.objects.get(username=username) and models.UserInfo.objects.get(username=username).password == password:
??????????????????? request.session['auth_user'] = username
??????????????????? return redirect('/index/')
??????????? else:
??????????????? return render(request,'account/login.html',{'model': login_form,'backend_autherror':'用戶名或密碼錯(cuò)誤'})
??????? else:
??????????? error_msg = login_form.errors.as_data()
??????????? return render(request,'account/login.html',{'model': login_form,'errors':error_msg})
??? # 如果登錄成功,寫(xiě)入session,跳轉(zhuǎn)index
??? return render(request, 'account/login.html', {'model': login_form}
-------------------------------------------------------------------------------------

由上面可知:render是一個(gè)類(lèi)似模板的東西,可以使用不同的參數(shù)來(lái)訪問(wèn)網(wǎng)頁(yè)
在tornado模板中,存在一些可以訪問(wèn)的快速對(duì)象,例如
???????? {{ escape(handler.settings["cookie"]) }}

這兩個(gè){{}}和這個(gè)字典對(duì)象也許大家就看出來(lái)了,沒(méi)錯(cuò)就是這個(gè)handler.settings對(duì)象
handler 指向RequestHandler

而RequestHandler.settings又指向self.application.settings

所有handler.settings就指向RequestHandler.application.settings了!

大概就是說(shuō),這里面就是我們一下環(huán)境變量,我們正是從這里獲取的cookie_secret

看題目的錯(cuò)誤頁(yè)面
python SSTI tornado render模板注入_第1張圖片

?

?


可見(jiàn)頁(yè)面返回的由msg的值決定,修改msg的值形成注入,獲得環(huán)境變量
?msg={{handler.settings}}? (見(jiàn)上面灰色高顯部分)
頁(yè)面回顯環(huán)境變量
{'autoreload': True, 'compiled_template_cache': False, 'cookie_secret': 'M)Z.>}{O]lYIp(oW7$dc132uDaK
得到cookie_secret


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 南陵县| 婺源县| 革吉县| 汶川县| 龙江县| 荆门市| 江永县| 和平县| 衡阳县| 浮梁县| 航空| 嵩明县| 高安市| 抚松县| 青海省| 漳平市| 靖州| 福鼎市| 松潘县| 会泽县| 宜兰市| 塔河县| 定结县| 正蓝旗| 汝阳县| 日土县| 兴安县| 昌都县| 察隅县| 荆门市| 咸宁市| 宜章县| 通许县| 阳城县| 文水县| 新竹市| 策勒县| 平果县| 兴城市| 麟游县| 永春县|