feature: web project

This commit is contained in:
Dobin
2024-03-06 21:34:45 +00:00
parent 3e5de0e608
commit c80dadd4d9
8 changed files with 281 additions and 68 deletions
+43
View File
@@ -0,0 +1,43 @@
import pickle
from typing import List, Tuple
from model.settings import Settings
class Project():
def __init__(self, name: str, settings: Settings):
self.name = name
self.settings: Settings = settings
class Storage():
def __init__(self):
self.data: List[Project] = self.get_data()
def get_project(self, name):
for project in self.data:
if project.name == name:
return project
return None
def add_project(self, project):
self.data.append(project)
self.save_data()
def get_data(self):
print("Read data")
with open("app/data.pickle", "rb") as f:
data = f.read()
data = pickle.loads(data)
for project in data:
print(" {}".format(project.name))
return data
def save_data(self):
print("Save data")
with open("app/data.pickle", "wb") as f:
f.write(pickle.dumps(self.data))
storage = Storage()
+52
View File
@@ -0,0 +1,52 @@
<!DOCTYPE html>
<html>
<head>
{% include 'header.html' %}
</head>
<body>
{% include 'navigation.html' %}
<div class="container-fluid">
<div class="row">
<div class="col-md-3">
<ul class="nav nav-tabs flex-column" id="myTab" role="tablist">
{% for log_file in log_files %}
<li class="nav-item" role="presentation">
<button
class="nav-link"
id="project-{{log_file['id']}}-tab"
data-bs-toggle="tab"
data-bs-target="#project-{{log_file['id']}}"
type="button"
role="tab"
aria-controls="project-{{log_file['id']}}"
aria-selected="true"
>{{log_file['name']}}</button>
</li>
{% endfor %}
</ul>
</div>
<div class="col-md-9">
<div class="tab-content" id="myTabContent">
{% for log_file in log_files %}
<div
class="tab-pane fade"
id="project-{{log_file['id']}}"
role="tabpanel"
aria-labelledby="project-{{log_file['id']}}-tab"
>
<div style="white-space: pre-wrap; font-family: 'Consolas', monospace;">{{log_file['content']|safe}}
</div>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
</body>
</html>
+8
View File
@@ -10,6 +10,14 @@
<h1> SuperMega </h1>
<!-- iterate through data and print as ul -->
<ul>
{% for item in data %}
<li><a href="/project/{{item.name}}">{{ item.name }}</a></li>
{% endfor %}
</ul>
<a href="/add_project">Add</a>
</div>
</body>
</html>
View File
+78 -39
View File
@@ -4,49 +4,88 @@
{% include 'header.html' %}
</head>
<body>
{% include 'navigation.html' %}
{% include 'navigation.html' %}
<div class="container-fluid">
<div class="row">
<div class="indent">
<h1> Project {{project_name}} </h1>
<div class="container-fluid">
<div class="row">
<!-- a bootstrap dropdown to select one of the log files -->
<div class="col-md-3">
<form method="POST" enctype="multipart/form-data" action="/add_project">
<div class="row row-cols-lg-auto g-3">
<select class="form-select" name="shellcode" aria-label="SHELLCODE">
{% for shellcode in shellcodes %}
<option value="{{shellcode}}"
{% if shellcode in project.settings.payload_path %} selected {% endif %}
>
{{shellcode}}
</option>
{% endfor %}
</select>
<select class="form-select" name="exe" aria-label="EXE">
{% for exe in exes %}
<option value="{{exe}}"
{% if exe in project.settings.inject_exe_in %} selected {% endif %}
>
{{exe}}</option>
{% endfor %}
</select>
<select class="form-select" name="source_style" aria-label="SOURCESTYLE">
{% for name, value in sourcestyles %}
<option value="{{name}}"
{% if name in project.settings.source_style.value %} selected {% endif %}
>{{value}}</option>
{% endfor %}
</select>
<select class="form-select" name="alloc_style" aria-label="ALLOCSTYLE">
{% for name, value in allocstyles %}
<option value="{{name}}"
{% if value in project.settings.alloc_style.value %} selected {% endif %}
>{{value}}</option>
{% endfor %}
</select>
<select class="form-select" name="decoder_style" aria-label="DECODERESTYLE">
{% for name, value in decoderstyles %}
<option value="{{name}}"
{% if value in project.settings.decoder_style.value %} selected {% endif %}
>{{value}} // {{project.settings.decoder_style.value}}</option>
{% endfor %}
</select>
<select class="form-select" name="exec_style" aria-label="EXECSTYLE">
{% for name, value in execstyles %}
<option value="{{name}}"
{% if value in project.settings.exec_style.value %} selected {% endif %}
>{{value}}</option>
{% endfor %}
</select>
<select class="form-select" name="inject_style" aria-label="INJECTSTYLE">
{% for name, value in injectstyles %}
<option value="{{name}}"
{% if value in project.settings.inject_style.value %} selected {% endif %}
>{{value}}</option>
{% endfor %}
</select>
<div class="col-md-3">
<ul class="nav nav-tabs flex-column" id="myTab" role="tablist">
{% for log_file in log_files %}
<li class="nav-item" role="presentation">
<button
class="nav-link"
id="project-{{log_file['id']}}-tab"
data-bs-toggle="tab"
data-bs-target="#project-{{log_file['id']}}"
type="button"
role="tab"
aria-controls="project-{{log_file['id']}}"
aria-selected="true"
>{{log_file['name']}}</button>
</li>
{% endfor %}
</ul>
</div>
<div class="col-md-9">
<div class="tab-content" id="myTabContent">
{% for log_file in log_files %}
<div
class="tab-pane fade"
id="project-{{log_file['id']}}"
role="tabpanel"
aria-labelledby="project-{{log_file['id']}}-tab"
>
<div style="white-space: pre-wrap; font-family: 'Consolas', monospace;">{{log_file['content']|safe}}
</div>
</div>
{% endfor %}
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
@@ -10,11 +10,12 @@
<div class="container-fluid">
<div class="row">
<!-- a bootstrap dropdown to select one of the log files -->
<div class="col-md-3">
<form method="POST" enctype="multipart/form-data" action="/inject">
<form method="POST" enctype="multipart/form-data" action="/add_project">
<input type="text" name="project_name" class="form-control" placeholder="Projekt" aria-label="PROJECTNAME" aria-describedby="basic-addon1">
<div class="row row-cols-lg-auto g-3">
<select class="form-select" name="shellcode" aria-label="SHELLCODE">
@@ -66,7 +67,7 @@
</label>
</div>
<button class="btn btn-primary" type="submit" value="Inject">Inject</button>
<button class="btn btn-primary" type="submit" value="save">Save</button>
<button class="btn btn-primary" type="submit" value="Verify">Verify</button>
</div>
+1
View File
@@ -0,0 +1 @@
ok
+94 -25
View File
@@ -10,11 +10,13 @@ from pygments.lexers import CLexer, NasmLexer, DiffLexer, HexdumpLexer
from pygments.formatters import HtmlFormatter
import difflib
from ansi2html import Ansi2HTMLConverter
import pickle
from config import config
from model.settings import Settings
from model.defs import *
from supermega import start
from app.storage import storage, Project
views = Blueprint('views', __name__)
@@ -23,38 +25,105 @@ conv = Ansi2HTMLConverter()
@views.route("/")
def index():
return render_template('index.html')
print(storage.data)
return render_template('index.html', data=storage.data)
@views.route("/inject", methods=['GET', 'POST'])
def inject():
config.load()
settings = Settings()
@views.route("/project/<name>")
def project(name):
project = storage.get_project(name)
settings.payload_path = "app/upload/shellcode/" + request.form['shellcode']
settings.inject_exe_in = "app/upload/exe/" + request.form['exe']
settings.inject_exe_out = "app/upload/infected/" + request.form['exe'] + ".injected"
exes = []
for file in os.listdir("app/upload/exe"):
exes.append(file)
source_style = request.form['source_style']
settings.source_style = SourceStyle[source_style]
shellcodes = []
for file in os.listdir("app/upload/shellcode"):
shellcodes.append(file)
alloc_style = request.form['alloc_style']
settings.alloc_style = AllocStyle[alloc_style]
sourcestyles = [(color.name, color.value) for color in SourceStyle]
allocstyles = [(color.name, color.value) for color in AllocStyle]
decoderstyles = [(color.name, color.value) for color in DecoderStyle]
execstyles = [(color.name, color.value) for color in ExecStyle]
injectstyles = [(color.name, color.value) for color in InjectStyle]
decoder_style = request.form['decoder_style']
settings.decoder_style = DecoderStyle[decoder_style]
exec_style = request.form['exec_style']
settings.exec_style = ExecStyle[exec_style]
inject_style = request.form['inject_style']
settings.inject_style = InjectStyle[inject_style]
return render_template('project.html',
project_name = name,
project=project,
print(str(settings))
start(settings)
exes=exes,
shellcodes=shellcodes,
sourcestyles=sourcestyles,
allocstyles=allocstyles,
decoderstyles=decoderstyles,
execstyles=execstyles,
injectstyles=injectstyles,
)
return render_template('inject.html')
@views.route("/add_project", methods=['POST', 'GET'])
def inject():
if request.method == 'POST':
config.load()
settings = Settings()
project_name = request.form['project_name']
settings.payload_path = "app/upload/shellcode/" + request.form['shellcode']
settings.inject_exe_in = "app/upload/exe/" + request.form['exe']
settings.inject_exe_out = "app/upload/infected/" + request.form['exe'] + ".injected"
source_style = request.form['source_style']
settings.source_style = SourceStyle[source_style]
alloc_style = request.form['alloc_style']
settings.alloc_style = AllocStyle[alloc_style]
decoder_style = request.form['decoder_style']
settings.decoder_style = DecoderStyle[decoder_style]
exec_style = request.form['exec_style']
settings.exec_style = ExecStyle[exec_style]
inject_style = request.form['inject_style']
settings.inject_style = InjectStyle[inject_style]
print(str(settings))
project = Project(project_name, settings)
project.settings = settings
storage.add_project(project)
storage.save_data()
return render_template('project_add_post.html')
else:
exes = []
for file in os.listdir("app/upload/exe"):
exes.append(file)
shellcodes = []
for file in os.listdir("app/upload/shellcode"):
shellcodes.append(file)
sourcestyles = [(color.name, color.value) for color in SourceStyle]
allocstyles = [(color.name, color.value) for color in AllocStyle]
decoderstyles = [(color.name, color.value) for color in DecoderStyle]
execstyles = [(color.name, color.value) for color in ExecStyle]
injectstyles = [(color.name, color.value) for color in InjectStyle]
return render_template('project_add_get.html',
exes=exes,
shellcodes=shellcodes,
sourcestyles=sourcestyles,
allocstyles=allocstyles,
decoderstyles=decoderstyles,
execstyles=execstyles,
injectstyles=injectstyles,
)
#start(settings)
@views.route("/build")
def build():
@@ -83,8 +152,8 @@ def build():
)
@views.route("/project")
def project():
@views.route("/files")
def files():
log_files = []
id = 0