Smarty模板注入

1、什么是模板引擎?

简单来讲,你可以把模板引擎理解为一个具有替换字符串功能的PHP文件,你可以使用简单的语言来实现某些靠PHP才能实现的功能,而模板引擎会自动帮你翻译为PHP语言

2、模板引擎的作用:

在一个网站开发过程中,一个团队的每个成员往往都有着不同的职责,大可以分为两种,前端开发(也就是浏览界面的设计),后端开发(也就是网站功能的具体实现),前端开发的人员往往需要写html,css,js这些语言,而后端开发人员主要使用PHP语言,而模板引擎就是后台和前台之间的桥梁。它的出现就是让二者的工作合二为一,但在大多数情况下前端的某些功能需要PHP代码实现,要将后台传过来的数据进行展示,也就是在html代码里面插入PHP代码,但往往前端开发的人不是很懂PHP,或者插入PHP后会使源码界面比较混乱,这时候模板引擎的作用就来了,比如说前端要输出某个变量,使用到代码如下:

 <?php 
    echo $name;
 ?>

但是使用模板引擎后,使用下列代码即可实现

 {$name}

模板引擎会把 { 替换为 <?php echo ,把 } 替换为 ?>  ,换而言之就是把这段语句翻译为了PHP代码。

也就是说前端开发人员可以通过模板引擎,使用简洁易懂的语句,来实现某些需要PHP代码才能完成的功能,模板引擎可以使前端开发人员与后端开发人员,各司其职,从而达到程序员只关心程序的编写,而美工人员进行页面的设计的目的,使应用程序的业务逻辑(PHP代码)和表示逻辑(HTML代码)进行分离。

3、模板注入使用场景:

在前端浏览页面具有可控的字符串,且使用了模板引擎,比如说这一道CTF题[BJDCTF2020]The mystery of ip):

我们可以看到ip是可控的(X-Forwarded-For: xxxxx),ip字段属于前端的html代码,所以我们可在这里使用模板语法注入恶意代码,具体语法因模板类型而异,这道题是Smarty模板,我们可以使用

{{system('cat /flag')}}
等语句来拿到flag

4、Smarty模板注入常用语法:

{{任意PHP函数}}
 {if 任意PHP函数}{/if}

有这两个还不够吗

5、扩展:

在CTF以及实战中,所面对的网站不只是用Smarty模板引擎搭建,本文所提到的Smarty模板注入的方法对其他模板同样使用,只是最后的注入语法有略微不同,可以通过下面一张图,来判断具体使用了什么模板引擎

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
©2023 By Elite

冀公网安备 13108202000889号

| 鲁ICP备2023011162号

声明:本站中用到的所有图片图标,均来源网络,如有侵权请及时联系删除
Theme Argon