SSTI 学习笔记
PHP SSTI(Twig)
學(xué)習(xí)文章
進(jìn)入環(huán)境,左上角有flag,hint
都檢查看看
flag頁面顯示ip,hint頁面源代碼有提示
考慮XFF頭或者referer頭
測試一下
注:這里不用加上“;”
出來了
python flask ssti
學(xué)習(xí)文章
原理:因?yàn)閷斎氲淖址刂撇蛔悖演斎氲淖址?dāng)成命令執(zhí)行。
漏洞產(chǎn)生主要原因:render_template渲染函數(shù)的問題
渲染函數(shù)在渲染的時(shí)候,往往對用戶輸入的變量不做渲染,
即:{undefined{}}在Jinja2中作為變量包裹標(biāo)識符,Jinja2在渲染的時(shí)候會把{undefined{}}包裹的內(nèi)容當(dāng)做變量解析替換。比如{undefined{1+1}}會被解析成2。因此才有了現(xiàn)在的模板注入漏洞。往往變量我們使用{undefined{這里是內(nèi)容}}
真因?yàn)閧undefined{}}包裹的東西會被解析,因此我們就可以實(shí)現(xiàn)類似于SQL注入的漏洞
像文件包含,有一個(gè)include函數(shù),sql注入,似乎都有些共同點(diǎn),都是利用某個(gè)函數(shù)或者其他的東西,執(zhí)行惡意的命令
因?yàn)槲覀冃枰獔?zhí)行一些命令,例如,file、read、open、ls等等
就需要去調(diào)用這些函數(shù)
這就需要用到這個(gè)魔術(shù)對象
__class__ :返回類型所屬的對象
__mro__ :返回一個(gè)包含對象所繼承的基類元組,方法在解析時(shí)按照元組的順序解析。
__base__ “返回該對象所繼承的基類
// __base__和__mro__都是用來尋找基類的__subclasses__ 獲取當(dāng)前類的所有子類
__init__ 類的初始化方法
__globals__ 對包含(保存)函數(shù)全局變量的字典的引用
通過魔術(shù)對象調(diào)用我們需要的函數(shù),例如
>>> [].__class__.__base__.__subclasses__()[2]
<class 'weakcallableproxy'>
>>> [].__class__.__base__.__subclasses__()[3]
<class 'weakproxy'>
>>> [].__class__.__base__.__subclasses__()[40]
<class 'wrapper_descriptor'>
Bugku Simple_SSTI_1
進(jìn)入環(huán)境
查看源代碼
意思是我們需要傳一個(gè)flag變量,并且提示我們有個(gè)secret_key
測試下有沒有ssti
有的,我們?nèi)タ纯磗ectet_key
這里是需要大寫的
Bugku Simple_SSTI_2
進(jìn)入環(huán)境
源代碼并沒有提示,只是讓我們傳一個(gè)pass變量
這里證明有ssti那就看看目錄
一個(gè)一個(gè)看下,先看app
有flag目錄
Bugku Flask_FileUpload
進(jìn)入環(huán)境
源代碼里有提示
上傳文件,會用Python執(zhí)行文件返回結(jié)果
先隨便上傳個(gè)文件試試
發(fā)現(xiàn)只能上傳jpg或者Png
那就改下后綴繼續(xù)上傳
會在源代碼里返回執(zhí)行的結(jié)果,那么可以試試命令執(zhí)行
抓flag
總結(jié)
- 上一篇: 最典型的因果图_因果关系分析图制作
- 下一篇: 6 月 13 日发布,微软推迟适用于 W