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