提示
- ssti模板注入
- head头x-forwarded-for
每一次做题的最开始流程都大致因该是
- 信息收集
- 找可以操控的地方
查看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主要的还是知道他是那种模板,知道了以后去网上搜怎么注入,怎么查版本信息,就能获得更过注入点。