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