Skip to content

Commit 12b3d90

Browse files
committed
Initial checkin of new AngularJS version
1 parent d2e35a3 commit 12b3d90

File tree

126 files changed

+16899
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

126 files changed

+16899
-0
lines changed

AUTHORS

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Copyright 2016 Cisco Talos Threat Intelligence & Research Group
2+
3+
Richard Johnson <rjohnson@moflow.org> - Initial version
4+
Daniel Moghimi <amoghimi@wpi.edu> - AngularJS rewrite
5+

Vagrantfile

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
Vagrant.configure("2") do |config|
2+
config.vm.box = "ubuntu/trusty64"
3+
#config.vm.network "forwarded_port", guest: 80, host: 1080
4+
#config.vm.network "forwarded_port", guest: 5000, host: 5000
5+
config.vm.network "private_network", type: "dhcp"
6+
config.vm.provider "virtualbox" do |vb|
7+
vb.memory = "2048"
8+
vb.cpus = "2"
9+
#vb.customize ["modifyvm", :id, "--nictype1", "Am79C973"]
10+
#vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
11+
#vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
12+
end
13+
14+
config.vm.provision "shell", privileged: false, path: "vagrant.sh"
15+
end

app/__init__.py

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
from flask import Flask, jsonify, request, json
2+
from flask_sqlalchemy import SQLAlchemy
3+
from flask_restful import Api
4+
import config, time, traceback, os, uuid
5+
6+
app = Flask(__name__, static_folder='static', static_url_path='')
7+
8+
logFile = "log-" + time.strftime("%Y-%m-%d-%H.%M.%S") + ".log"
9+
10+
11+
"""
12+
Setup DB Models
13+
"""
14+
app.config['db'] = db = SQLAlchemy(app)
15+
app.config['SQLALCHEMY_DATABASE_URI'] = config.DATABASE_URI
16+
17+
18+
from model.FuzzingArch import FuzzingArch
19+
from model.FuzzingPlatform import FuzzingPlatform
20+
from model.FuzzingEngine import FuzzingEngine
21+
from model.FuzzingHost import FuzzingHost
22+
#from model.FuzzingConfig import FuzzingConfig
23+
from model.FuzzingTarget import FuzzingTarget
24+
from model.FuzzingJobState import FuzzingJobState
25+
from model.FuzzingJobOption import FuzzingJobOption
26+
from model.FuzzingJob import FuzzingJob
27+
from model.FuzzingOptionType import FuzzingOptionType
28+
from model.FuzzingOption import FuzzingOption
29+
from model.FuzzingCrash import FuzzingCrash
30+
from model.CallbackScript import CallbackScript
31+
from model.FuzzingScript import FuzzingScript
32+
33+
db.drop_all()
34+
db.create_all()
35+
import seed
36+
db.session.commit()
37+
38+
"""
39+
@app.before_first_request
40+
def create_db():
41+
None
42+
"""
43+
44+
45+
"""
46+
Setup Routes
47+
"""
48+
from controller.Hello import HelloCtrl
49+
from controller.Update import UpdateCtrl
50+
from controller.Job import JobCtrl
51+
from controller.Engine import EngineCtrl
52+
from controller.Arch import ArchCtrl
53+
from controller.Platform import PlatformCtrl
54+
from controller.Log import LogCtrl
55+
from controller.Host import HostCtrl
56+
from controller.Script import ScriptCtrl
57+
from controller.Target import TargetCtrl
58+
from controller.Crash import CrashCtrl
59+
from controller.Status import StatusCtrl
60+
#from controller.Config import ConfigCtrl
61+
from controller.Option import OptionCtrl
62+
63+
64+
api = Api(app)
65+
api.add_resource(HelloCtrl, '/')
66+
api.add_resource(UpdateCtrl, '/api/update/<string:hash>')
67+
api.add_resource(JobCtrl, '/api/job', '/api/job/<string:id>')
68+
api.add_resource(EngineCtrl, '/api/engine', '/api/engine/<string:id>')
69+
api.add_resource(ArchCtrl, '/api/arch', '/api/arch/<string:id>')
70+
api.add_resource(PlatformCtrl, '/api/platform', '/api/platform/<string:id>')
71+
api.add_resource(HostCtrl, '/api/host', '/api/host/<string:id>')
72+
api.add_resource(ScriptCtrl, '/api/script', '/api/script/<string:id>')
73+
api.add_resource(TargetCtrl, '/api/target', '/api/target/<string:id>')
74+
# api.add_resource(CrashBucketCtrl, '/api/bucket', '/api/bucket/<string:id>')
75+
api.add_resource(CrashCtrl, '/api/crash', '/api/crash/<string:id>')
76+
#api.add_resource(ConfigCtrl, '/api/config', '/api/config/<string:id>')
77+
api.add_resource(OptionCtrl, '/api/option', '/api/option/<string:id>')
78+
api.add_resource(LogCtrl, '/api/log')
79+
api.add_resource(StatusCtrl, '/api/status')
80+
81+
82+
@app.errorhandler(Exception)
83+
def handle_invalid_usage(error):
84+
message = time.strftime("%Y-%m-%d-%H.%M.%S") + ": \n" + traceback.format_exc() + "\n\n"
85+
with open(logFile, 'a') as f:
86+
f.write(message)
87+
rv = {}
88+
rv['message'] = message
89+
response = jsonify(rv)
90+
response.status_code = 500
91+
return response
92+
93+
94+
@app.route('/api/upload', methods=['POST'])
95+
def upload_file():
96+
if 'file' not in request.files:
97+
return json.dumps({"err": "invalid request"}), 400
98+
99+
u_file = request.files['file']
100+
if u_file.filename == '':
101+
return json.dumps({"err": "invalid request"}), 400
102+
103+
path = os.path.join(config.UPLOAD_FOLDER, str(uuid.uuid4()))
104+
105+
u_file.save(path)
106+
return json.dumps({"upload_path": path}), 200

app/config.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import os
2+
DATABASE_URI = "sqlite:///moflow.db"
3+
CLIENT_FOLDER = "client"
4+
UPLOAD_FOLDER = 'static' + os.sep + 'upload'

app/moflow.db

66 KB
Binary file not shown.

app/seed.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
from app import app
2+
from model.FuzzingPlatform import FuzzingPlatform
3+
from model.FuzzingArch import FuzzingArch
4+
from model.FuzzingEngine import FuzzingEngine
5+
from model.FuzzingJobState import FuzzingJobState
6+
from model.FuzzingTarget import FuzzingTarget
7+
from model.FuzzingScript import FuzzingScript
8+
from model.FuzzingOptionType import FuzzingOptionType
9+
from model.FuzzingOption import FuzzingOption
10+
11+
db = app.config['db']
12+
13+
#Fuzzing Job Status
14+
db.session.add(FuzzingJobState('Queued')) #DO NOT CHANGE
15+
db.session.add(FuzzingJobState('Allocated')) #DO NOT CHANGE
16+
db.session.add(FuzzingJobState('Active')) #DO NOT CHANGE
17+
db.session.add(FuzzingJobState('Completed')) #DO NOT CHANGE
18+
db.session.add(FuzzingJobState('Paused')) #DO NOT CHANGE
19+
db.session.add(FuzzingJobState('Failed')) #DO NOT CHANGE
20+
#db.session.add(FuzzingJobState('Reserved')) #DO NOT CHANGE
21+
22+
#Fuzzing Option
23+
field_type = FuzzingOptionType("FIELD") #DO NOT CHANGE
24+
file_type = FuzzingOptionType("FILE") #DO NOT CHANGE
25+
list_type = FuzzingOptionType("LIST") #DO NOT CHANGE
26+
checkbox_type = FuzzingOptionType("CHECKBOX") #DO NOT CHANGE
27+
db.session.add(field_type)
28+
db.session.add(file_type)
29+
db.session.add(list_type)
30+
db.session.add(checkbox_type)
31+
32+
33+
#Platforms
34+
unknown_plat = FuzzingPlatform('Unknown')
35+
db.session.add(unknown_plat)
36+
37+
#Architectures
38+
unknown_arch = FuzzingArch('Unknown')
39+
db.session.add(unknown_arch)
40+
41+
#Options
42+
afl_in_dir = FuzzingOption('afl_in_dir', field_type)
43+
afl_out_dir = FuzzingOption('afl_out_dir', field_type)
44+
afl_timeout = FuzzingOption('afl_timeout', field_type)
45+
db.session.add(afl_in_dir)
46+
db.session.add(afl_out_dir)
47+
db.session.add(afl_timeout)
48+
49+
50+
#Fuzzing Engines
51+
db.session.add(
52+
FuzzingEngine("afl", "/usr/local/bin/afl-fuzz", unknown_plat, unknown_arch, [afl_out_dir, afl_timeout, afl_in_dir ])
53+
)
54+
55+
#Fuzzing Targets
56+
db.session.add(FuzzingTarget('libpng-1.5.27', "/home/vagrant/libpng-1.5.27/pngtest", unknown_plat, unknown_arch))
57+
db.session.add(FuzzingTarget('tiff-4.0.6-fake-vulnerable', "/home/vagrant/tiff-4.0.6/tools/tiff2pdf", unknown_plat, unknown_arch))
58+
59+
60+
#Fuzzing Script
61+
db.session.add(FuzzingScript('test-script',
62+
'''<?xml version="1.0"?>
63+
<test>
64+
<something>go</something>
65+
</test>
66+
'''))
67+
68+

client/client.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import time, socket, sys, traceback
2+
3+
from client.config import *
4+
from client.helper import Helper
5+
from client.rest import Rest
6+
from engine.afl import Fuzzer as afl
7+
from engine.radamsa import Fuzzer as radamsa
8+
9+
10+
11+
engines = {
12+
'afl' : afl,
13+
'radamsa' : radamsa
14+
}
15+
16+
def main():
17+
helper = Helper()
18+
host = helper.register_host()
19+
print "\n\nFuzzing Client %s\n" % CLIENT_VERSION
20+
while True:
21+
fz = None
22+
job = None
23+
try:
24+
helper.update()
25+
job = Rest.get_job_by_host(host['id'])
26+
if job is not None:
27+
engine, target, options = helper.extract_job(job)
28+
engine_name = engine['name']
29+
fz = engines[engine_name](job, engine, target, options)
30+
fz.start()
31+
continue
32+
33+
except socket.error:
34+
pass
35+
36+
except KeyboardInterrupt as e:
37+
if fz is not None:
38+
fz.fail(e.message)
39+
print "Execution interrupted. Quitting."
40+
sys.exit(0)
41+
42+
except:
43+
print "Unhandled Exception\n"
44+
traceback.print_exc()
45+
print ''
46+
message = time.strftime("%Y-%m-%d-%H.%M.%S") + ": \n" + \
47+
traceback.format_exc()
48+
try:
49+
helper.log_error(message)
50+
except socket.error:
51+
pass
52+
53+
54+
if __name__ == "__main__":
55+
main()

client/client/__init__.py

Whitespace-only changes.

client/client/config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
SERVER_ENDPOINT = "http://172.28.128.3/"
2+
CLIENT_VERSION = "2016.8.15"
3+
DELAY = 10

0 commit comments

Comments
 (0)