这道题和The mystery of ip的网站一样,还有可能是ssti,hint.php的注释里有

Why not take a closer look at cookies?

去flag.php提交个1之后,看cookie为

Cookie: PHPSESSID=dba9ac7cbddf1983cbac508b01f8cdf2; user=1

一目了然,接下来就是找payload。再使用之前的

{system('cat /flag')}

被拦下来了,说明加强了过滤。在这之后去看了wp,网上的wp都是直接给出了payload

{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("whoami")}}

我是受了这位师傅的文章启发,又去结合了下这道题的源码才搞明白。

这道题在渲染之前使用了twig模板:

Twig是来自于Symfony的模板引擎,它非常易于安装和使用。它的操作有点像Mustache和liquid。Twig使用一个加载器 loader(Twig_Loader_Array) 来定位模板,以及一个环境变量 environment(Twig_Environment) 来存储配置信息。其中,render() 方法通过其第一个参数载入模板,并通过第二个参数中的变量来渲染模板。

我同样在题目的源码中找到了render()方法和Twig_Environment配置信息

然后payload的具体原理在的Environment.php中,贴一下和payload相关部分:

  1. 先执行{{_self.env.registerUndefinedFilterCallback("exec")}}调用了registerUndefinedFilterCallback()函数(图中884行),注册了一个未定义的函数到filterCallbacks全局变量中
  2. 接着执行{{_self.env.getFilter("whoami")}}调用了getFilter()函数,并传入变量$name值为执行的命令,当函数执行到图中代码875行时,进入循环执行了call_user_func(),这个函数大伙肯定不陌生:call_user_func 可以把第一个参数作为回调函数调用,调用的参数来源就是第一步中注册的filterCallbacks全局变量,里边已经躺好了一个刚刚注册的exec,至此就形成了payload。

[BJDCTF2020]Cookie is so stable相关推荐

  1. [ctf web]SSTI PHP的模板注入SSTI (smarty+Twig) 以及[BJDCTF2020]Cookie is so stable

    PHP的模板注入 如果是在cookie处执行,最好抓包打payload,可能有url编码的问题 smarty模板注入 控制XFF进行命令执行(这是要在前端有IP相关回显的情况) payload: X- ...

  2. BUUCTF解题十一道(04)

    文章目录 [GWCTF 2019]我有一个数据库 [BJDCTF2020]ZJCTF,不过如此 [BJDCTF2020]The mystery of ip [BJDCTF2020]Mark loves ...

  3. BJDCTF on buuoj

    干啥啥不行,签到第一名 [BJDCTF 2nd]签到-y1ng crypto签到,直接base64解码 [BJDCTF 2nd]fake google ssti payload: qaq?name={ ...

  4. BUUCTF Web 第二页全部Write ups

    更多笔记,可以关注yym68686.top 目录 [强网杯 2019]高明的黑客 [BUUCTF 2018]Online Tool [RoarCTF 2019]Easy Java [GXYCTF201 ...

  5. BUUCTF-模板注入专项刷题

    SSTI: 目录 简单 [CSCCTF 2019 Qual]FlaskLight 签到 [BJDCTF2020]Cookie is so stable twig模板注入 [WesternCTF2018 ...

  6. BUUCTFweb刷题记录

    [极客大挑战 2019]BuyFlag header里头有个user=0,将其修改成1 再post money=100000001&password=404a 发现money参数过长,使用数组 ...

  7. CTF笔记 SSTI模板注入

    文章目录 前言 一.判断模板类型 二.上例题 1.[BJDCTF2020]Cookie is so stable 2.[BJDCTF2020]The mystery of ip 总结 前言 之前做ss ...

  8. lscat cnindex php,BJDCTF2020--web-复现

    BJDCTF2020 未完待续 Buu ZJCTF,就这? 看到这题名字还是很不爽的,毕竟我也是个浙江人,不过zjctf,有一说一确实. BUU上和源题好像有点差别. 进题放出源码: ".f ...

  9. tornado设置cookie和seesion

    请求过程 开始是get请求,因为没有cookie,返回预登录表单 提交时post同时设置了cookie 以后访问该路由都是登录的状态 当删除cookie又回到没又设置的状态 但是cookie的信息明显 ...

最新文章

  1. 33 篇顶会论文如何做到?北大施柏鑫:计算机视觉论文投稿到接收,不可不知的关键环节...
  2. html embed详解
  3. 使用浏览器console批量更改图片的宽度
  4. 常考数据结构与算法-morris遍历
  5. css不常用,不常用的 CSS
  6. 一个Json在线格式化的网站
  7. java集合体检套餐管理系统_体检套餐管理系统
  8. 不自定义异步方法的线程池默认使用SimpleAsyncTaskExecutor
  9. jdk重启后步行_向后介绍步行以一种新颖的方式来预测未来
  10. Android开发:Menu选项菜单
  11. MLNC – Machine Learning Neural Computation
  12. 20145313《信息安全系统设计基础》第7周学习总结
  13. php提取文本数据处理,PHP文件处理—读取文件(一个字符,字串)
  14. Win10屏幕自带的截图,同时保存多个截图
  15. 关于 ADXL362 传感器不工作的说明
  16. Oracle中的next_day(date,char)
  17. Flutter技术在会展云中大显身手
  18. 计算机硬盘问题要求备份在弄,硬盘驱动器故障解决方案
  19. Android快速开发推荐10个框架Android 快速开发框架:afinal、ThinkAndroid、andBase、KJFrameForAndroid、SmartAndroid、
  20. vue中下载图片跨域

热门文章

  1. Python目录下中没有Script文件夹
  2. Ubuntu提示boot空间不足
  3. 1107班12月第5周 班级计划 为s1结业答辩做准备
  4. 案例 TreeView动态控制节点 c# 1614264758
  5. jquery-演练-表格的模态框新增与点击删除功能
  6. 索引-bootsrap
  7. zabbix监控MHA及自动启动
  8. IDEA编辑器多行编辑模式
  9. 雷林鹏分享:PHP MySQL 创建数据库
  10. 通过appium-desktop定位元素