[BJDCTF2020]The mystery of ip1

提示

  1. ssti模板注入
  2. head头x-forwarded-for

每一次做题的最开始流程都大致因该是

  1. 信息收集
  2. 找可以操控的地方

查看hint页面的源代码又发现它提示说

**####**你知道为什么会知道你的ip吗

查看flag页面

从刚才给我的提示以及他这里显示的我的ip,大概找到了我可操作的可控点

既然它会读取我访问它的ip并显示,那么我可以通过修改我的ip以达到执行命令的效果

这里抓包使用x-forwarded-for验证

从它返回的页面来看是可以利用的

现在就是判断这里应该怎样去利用

从经验上来判断这里很像是ssti模板注入

尝试验证一下

这里传入了${7*7}页面返回了执行过后的结果说明这里存在ssti注入

!!!!如果报错或者不执行也不一定是错的,最后会讲解

现在判断是那种模板

这里传入a{*comment*}b后回显ab,说明这里是smarty模板

应为smarty是php的模板所以直接尝试rce

{system('ls')}

这里回显出flag.php文件,直接cat

这里并没有回显

猜测这里只是一个障眼法

看一下跟目录

出现flag,这里应该就没问题了

获得flag

SSTI模板注入

SSTI就是服务器端模板注入

当前使用的一些框架,比如python的flask,php的tp,java的spring等一般都采用成熟的的MVC的模式,用户的输入先进入Controller控制器,然后根据请求类型和请求的指令发送给对应Model业务模型进行业务逻辑判断,数据库存取,最后把结果返回给View视图层,经过模板渲染展示给用户。

漏洞触发的原因未经任何处理就将其作为 Web 应用模板内容的一部分,模板引擎在进行目标编译渲染的过程中,执行了用户插入的可以破坏模板的语句,因而可能导致了敏感信息泄露、代码执行、GetShell 等问题。其影响范围主要取决于模版引擎的复杂性。

大致意思呢就是:

没有将数据区于语句分开,导致他们被当成一个整体了

$output = $twig->render("Dear {first_name},", array("first_name" => $user.first_name) );
以上并不会早场ssti漏洞注入,应为执行区域和数据区域不在同一个地方
$output = $twig->render("Dear " . $_GET['name']);
这里呢就会造成ssti漏洞,这里接受数据后就直接执行了,可能会方便用户使用,但是也同时会被别有用心的人构造payload来注入

可通过一下方式来判断是什么模板从而进行下一步的渗透

输入{{7*'7'}}返回49的是jinja2模板。返回7个7的是twig模板

!!!!!!!!!!最后,ssti主要的还是知道他是那种模板,知道了以后去网上搜怎么注入,怎么查版本信息,就能获得更过注入点。