[CISCN 2019华东南]Web11

发布时间 2023-08-25 17:24:59作者: y0Zero

[CISCN 2019华东南]Web11

题目来源:nssctf

题目类型:web

涉及考点:SSTI、RCE

1. 先简单介绍一下SSTI

模板引擎:(这里特指用于Web开发的模板引擎)

是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,利用模板引擎来生成前端的html代码,模板引擎会提供一套生成html代码的程序,然后只需要获取用户的数据,然后放到渲染函数里,然后生成模板+用户数据的前端html页面,然后反馈给浏览器,呈现在用户面前

SSTI(Server-Side Template Injection):服务器端模板注入

漏洞成因就是服务端接收了用户的恶意输入以后,未经任何处理就将其作为 Web 应用模板内容的一部分,模板引擎在进行目标编译渲染的过程中,执行了用户插入的可以破坏模板的语句,因而可能导致了敏感信息泄露、代码执行、GetShell 等问题

Smarty

是最流行的PHP模板语言之一,为不受信任的模板执行提供了安全模式。这会强制执行在 php 安全函数白名单中的函数,因此我们在模板中无法直接调用 php 中直接执行命令的函数(相当于存在了一个disable_function)

了解了上述知识之后我们来看题目

2. 题目给了一个网络请求API

可以看到页面使用了Smarty模板,同时显示了IP

在这里有两个知识点:

  1. Smarty支持使用{php}{/php}标签来执行被包裹其中的php指令
  2. XFF头代表了HTTP的请求端真实的IP,通过修改XXF头可以实现伪造IP

题目给的两个url进不去,也不知道有啥用。但我们目前确定的思路就是通过伪造XFF,利用SSTI构造payload,实现命令执行

3. 构造payload

  • 先尝试构造X-Forwarded-For:{6*6}

注意:Request Header最底下一定要两个空行,第一个空行前表示请求头,第二个空行表示请求体,若没有这两个空行就传不进去(又被这个卡了好一会)

可以证明这里存在SSTI

  • 再构造X-Forwarded-For:{system('cat /flag')}

得到flag:

NSSCTF{06b9b70f-a189-4408-9e3e-b469e16ce523}

日期:2023.8.25

作者:y0Zero