summaryrefslogtreecommitdiff
path: root/ssti-app.py
diff options
context:
space:
mode:
Diffstat (limited to 'ssti-app.py')
-rw-r--r--ssti-app.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/ssti-app.py b/ssti-app.py
new file mode 100644
index 0000000..336e868
--- /dev/null
+++ b/ssti-app.py
@@ -0,0 +1,48 @@
+from flask import Flask, request, jsonify, render_template
+from jinja2 import Environment, TemplateError
+import argparse
+import importlib
+
+app = Flask(__name__)
+
+parser = argparse.ArgumentParser(description='SSTI Payload Tester')
+parser.add_argument('--module', type=str, default='',
+ help='Comma-separated list of modules to import (e.g., os,lipsum)')
+args = parser.parse_args()
+
+modules = {}
+if args.module:
+ for module_name in args.module.split(','):
+ try:
+ modules[module_name] = importlib.import_module(module_name.strip())
+ except ImportError as e:
+ print(f"Warning: Failed to import module '{module_name}': {e}")
+
+@app.route('/')
+def index():
+ return render_template('index.html')
+
+@app.route('/execute', methods=['POST'])
+def execute_payload():
+ payload = request.json.get('payload', '')
+ if not payload:
+ return jsonify({'error': 'No payload provided'}), 400
+
+ result = {'output': '', 'error': None}
+
+ try:
+ env = Environment()
+ env.globals.update(modules)
+ template = env.from_string(payload)
+ result['output'] = template.render()
+ except TemplateError as e:
+ result['error'] = str(e)
+ result['output'] = str(e)
+ except Exception as e:
+ result['error'] = f"Unexpected error: {str(e)}"
+ result['output'] = str(e)
+
+ return jsonify(result)
+
+if __name__ == '__main__':
+ app.run(debug=False, host='0.0.0.0', port=5000)