feature: open folder (no_exec)

This commit is contained in:
Dobin
2024-03-23 18:18:43 +00:00
parent 4f9f85d25c
commit 11ec4a785b
5 changed files with 46 additions and 9 deletions
+15 -1
View File
@@ -83,16 +83,20 @@
<div class="col-3"> <div class="col-3">
<div class="row"> <div class="row">
<div class="col-6">
<button class="btn btn-primary" type="submit" value="save">Save Settings</button> <button class="btn btn-primary" type="submit" value="save">Save Settings</button>
</form> </form>
</div> </div>
<div class="row"> <div class="col-6">
<form method="POST" enctype="multipart/form-data" action="/build_project"> <form method="POST" enctype="multipart/form-data" action="/build_project">
<input type="hidden" name="project_name" value="{{project_name}}"> <input type="hidden" name="project_name" value="{{project_name}}">
<button class="btn btn-primary" type="submit" value="start">Build</button> <button class="btn btn-primary" type="submit" value="start">Build</button>
</form> </form>
</div> </div>
</div>
<div class="row"> <div class="row">
<div class="col-6"> <div class="col-6">
@@ -100,12 +104,22 @@
<input type="hidden" name="project_name" value="{{project_name}}"> <input type="hidden" name="project_name" value="{{project_name}}">
<button class="btn btn-primary" type="submit" value="start">Start Local</button> <button class="btn btn-primary" type="submit" value="start">Start Local</button>
</form> </form>
<form method="POST" enctype="multipart/form-data" action="/exec_project?no_exec=true">
<input type="hidden" name="project_name" value="{{project_name}}">
<button class="btn btn-primary" type="submit" value="start">File Local</button>
</form>
</div> </div>
<div class="col-6"> <div class="col-6">
<form method="POST" enctype="multipart/form-data" action="/exec_project?remote=true"> <form method="POST" enctype="multipart/form-data" action="/exec_project?remote=true">
<input type="hidden" name="project_name" value="{{project_name}}"> <input type="hidden" name="project_name" value="{{project_name}}">
<button class="btn btn-primary" type="submit" value="start">Start Remote</button> <button class="btn btn-primary" type="submit" value="start">Start Remote</button>
</form> </form>
<form method="POST" enctype="multipart/form-data" action="/exec_project?remote=true&no_exec=true">
<input type="hidden" name="project_name" value="{{project_name}}">
<button class="btn btn-primary" type="submit" value="start">File Remote</button>
</form>
</div> </div>
</div> </div>
</div> </div>
+22 -5
View File
@@ -1,4 +1,4 @@
from flask import Flask, Blueprint, current_app, request, redirect, url_for, render_template, send_file, make_response, session, escape from flask import Flask, Blueprint, current_app, request, redirect, url_for, render_template, send_file, make_response, session, escape, jsonify
from threading import Thread from threading import Thread
from werkzeug.utils import secure_filename from werkzeug.utils import secure_filename
import os import os
@@ -10,6 +10,7 @@ from pygments.formatters import HtmlFormatter
import difflib import difflib
from ansi2html import Ansi2HTMLConverter from ansi2html import Ansi2HTMLConverter
import shutil import shutil
import subprocess
from config import config from config import config
from model.settings import Settings from model.settings import Settings
@@ -196,27 +197,43 @@ def start_project():
if remote_arg == "true": if remote_arg == "true":
remote = True remote = True
no_exec = False
no_exec_arg = request.args.get('no_exec')
if no_exec_arg == "true":
no_exec = True
logger.info("--[ Exec project: {} remote: {} no_exec: {}".format(project_name, remote, no_exec))
if remote: if remote:
logger.info("--[ Exec {} on server {}".format(project.project_exe, config.get("avred_server"))) logger.info("--[ Exec {} on server {}".format(project.project_exe, config.get("avred_server")))
filepath = "{}/{}".format(project.project_dir, project.project_exe) filepath = "{}/{}".format(project.project_dir, project.project_exe)
with open(filepath, "rb") as f: with open(filepath, "rb") as f:
data = f.read() data = f.read()
try: try:
scannerDetectsBytes(data, project.project_exe, useBrotli=True, verify=project.settings.verify) scannerDetectsBytes(data,
project.project_exe,
useBrotli=True,
verify=project.settings.verify,
no_exec=no_exec)
except Exception as e: except Exception as e:
logger.error(f'Error scanning: {e}') logger.error(f'Error scanning: {e}')
return 4 return jsonify({
"exception": str(e)
}), 500
else: else:
logger.info("--[ Exec {} locally".format(project.project_exe))
# Start/verify it at the end # Start/verify it at the end
if project.settings.verify: if project.settings.verify:
logger.info("--[ Verify infected exe") logger.info("--[ Verify infected exe")
exit_code = verify_injected_exe(project.settings.inject_exe_out) exit_code = verify_injected_exe(project.settings.inject_exe_out)
else: elif no_exec == False:
logger.info("--[ Start infected exe: {}".format(project.settings.inject_exe_out)) logger.info("--[ Start infected exe: {}".format(project.settings.inject_exe_out))
run_process_checkret([ run_process_checkret([
project.settings.inject_exe_out, project.settings.inject_exe_out,
], check=False) ], check=False)
elif no_exec == True:
dirname = os.path.dirname(os.path.abspath(project.settings.inject_exe_out))
logger.info("--[ Open folder: {}".format(dirname))
subprocess.run(['explorer', dirname])
return redirect("/project/{}".format(project_name), code=302) return redirect("/project/{}".format(project_name), code=302)
+4
View File
@@ -14,6 +14,10 @@ class Observer():
self.idx = 0 self.idx = 0
self.active = True self.active = True
def reset(self):
self.logs = []
self.idx = 0
def add_text(self, name, data): def add_text(self, name, data):
self.write_to_file(name + ".txt", data) self.write_to_file(name + ".txt", data)
self.idx += 1 self.idx += 1
+2 -2
View File
@@ -11,8 +11,8 @@ from config import config
logger = logging.getLogger("Sender") logger = logging.getLogger("Sender")
def scannerDetectsBytes(data: bytes, filename: str, useBrotli=True, verify=False): def scannerDetectsBytes(data: bytes, filename: str, useBrotli=True, verify=False, no_exec=False):
params = { 'filename': filename, 'brotli': useBrotli, 'verify': verify } params = { 'filename': filename, 'brotli': useBrotli, 'verify': verify, 'no_exec' : no_exec}
if useBrotli: if useBrotli:
scanData = brotli.compress(data) scanData = brotli.compress(data)
else: else:
+2
View File
@@ -107,6 +107,8 @@ def start(settings: Settings):
if settings.cleanup_files_on_start: if settings.cleanup_files_on_start:
clean_files() clean_files()
delete_all_files_in_directory(f"{logs_dir}/") delete_all_files_in_directory(f"{logs_dir}/")
# And logs
observer.reset()
exit_code = 0 # 0 = success exit_code = 0 # 0 = success
# Load our input # Load our input