php中場景模板
1. Smarty
使用安全模式來執行不信任的模板,只運行PHP白名單里的函數。
2. Twig
與Smarty類似,不過無法利用該模板的SSTI調用靜函數。
php常見模板入門
Smarty
不使用預先準備好的模板
使用預先準備好的模板
對值進行拼接后使用模板展示
設置在模板中允許執行的函數白名單
主要是通過設置$php functions中的值來實現,默認值為array(isset,‘emptycount’, ‘sizeof", ‘in array’, ‘is array’,"time’,‘nl2br’)
Twig
不使用預先準備好的模板
在下圖的代碼中,我們直接在后端寫了一個模板(Hello,),之后將$name拼接在后面
使用預先準備好的模板
設置在模板中允許執行的函數白名單
使用了templates/index.htm這個模板,之后將$name填充進去
分析php SSTI 常見的payload
我們拿之前不使用模板的后端來舉例,傳入[$smarty.version}
就能實現注入:
針對smartyBC 兼容 smarty2
其中 {php}phpinfo();{/php}
只能在smartyBC中運行,
如果用smarty運行就會報錯:
常見payload
前面的括號里其實調用的是registerUndefinedFiltercallback
這個函數:
在對函數里面的屬性賦值后就會調用下一個:
我們在這里傳入了exec:
這里就會遍歷我們傳入的函數然后執行name函數就是后傳入的id:
練習
通過代碼審計分析網站功能
源碼拿到手后,簡單分析就可以看出是一個CI框架:
/appliaction/config/ro