Skip to content

Commit

Permalink
fix imports to work with python3
Browse files Browse the repository at this point in the history
  • Loading branch information
KissPeter committed Aug 26, 2019
1 parent 521433c commit 2907e09
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 26 deletions.
2 changes: 1 addition & 1 deletion apifuzzer/custom_fuzzers.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,4 @@ def not_implemented(self, func_name):
pass

def _mutate(self):
pass
pass
2 changes: 1 addition & 1 deletion apifuzzer/fuzzer_target.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from kitty.targets.server import ServerTarget
from requests.exceptions import RequestException

from utils import set_class_logger
from apifuzzer.utils import set_class_logger


@set_class_logger
Expand Down
7 changes: 4 additions & 3 deletions apifuzzer/server_fuzzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from kitty.fuzzers import ServerFuzzer
from kitty.model import Container, KittyException

from utils import set_class_logger
from apifuzzer.utils import set_class_logger


def _flatten_dict_entry(orig_key, v):
Expand Down Expand Up @@ -50,10 +50,11 @@ def _transmit(self, node):
payload[key] = node.get_field_by_name(key).render().tobytes()
fuzz_places = ['params', 'headers', 'data', 'path_variables']
for place in fuzz_places:
self.logger.info('Transmit place: {}'.format(place))
try:
payload[place] = self._recurse_params(node.get_field_by_name(place))
except KittyException as e:
self.logger.warn('Exception occurred: {}'.format(e.message))
self.logger.warn('Exception occurred while processing {}: {}'.format(place, e.__str__()))
self._last_payload = payload
try:
return self.target.transmit(**payload)
Expand Down Expand Up @@ -87,7 +88,7 @@ def _store_report(self, report):
data_report = Report('payload')
data_report.add('raw', payload)
try:
data_report.add('hex', json.dumps(payload).encode('hex'))
data_report.add('hex', json.dumps(str(payload)).encode('hex'))
except UnicodeDecodeError:
print('cant serialize payload: %', payload)
data_report.add('length', len(payload))
Expand Down
11 changes: 7 additions & 4 deletions apifuzzer/swagger_template_generator.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from base_template import BaseTemplate
from template_generator_base import TemplateGenerator
from utils import get_sample_data_by_type, get_fuzz_type_by_param_type, set_class_logger
from apifuzzer.base_template import BaseTemplate
from apifuzzer.template_generator_base import TemplateGenerator
from apifuzzer.utils import get_sample_data_by_type, get_fuzz_type_by_param_type, set_class_logger


class ParamTypes(object):
Expand Down Expand Up @@ -31,13 +31,16 @@ def process_api_resources(self):
template = BaseTemplate(name=template_container_name)
template.url = resource
template.method = method.upper()
self.logger.info('Resource: {} Method: {} Parameter: {}'.format(resource, method, param))
fuzz_type = get_fuzz_type_by_param_type(param.get('type'))
sample_data = get_sample_data_by_type(param.get('type'))

# get parameter placement(in): path, query, header, cookie
# get parameter type: integer, string
# get format if present
param_type = param.get('in')
self.logger.info('Resource: {} Method: {} Parameter: {}, Parameter type: {}, Sample data: {}'
.format(resource, method, param, param_type, sample_data))

param_name = template_container_name
if param_type == ParamTypes.PATH:
template.path_variables.append(fuzz_type(name=param_name, value=sample_data))
Expand Down
4 changes: 2 additions & 2 deletions apifuzzer/utils.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import logging
from logging import Formatter
from logging.handlers import SysLogHandler
from custom_fuzzers import RandomBitsField
from apifuzzer.custom_fuzzers import RandomBitsField


def get_field_type_by_method(http_method):
Expand All @@ -21,7 +21,7 @@ def get_fuzz_type_by_param_type(fuzz_type):

def get_sample_data_by_type(param_type):
types = {
u'name': 012,
u'name': '012',
u'string': 'asd',
u'integer': 1,
u'number': 667,
Expand Down
29 changes: 14 additions & 15 deletions fuzzer.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,24 @@
#!/usr/bin/env python2.7
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from __future__ import print_function
import sys
import argparse
import json
import logging
if sys.version_info[:2] == (2, 7):
from logging import _levelNames as levelNames
else:
from logging import _nameToLevel as levelNames
import signal
import tempfile

if sys.version_info[:2] == (2, 7):
from kitty.interfaces import WebInterface
from kitty.model import GraphModel

from apifuzzer.swagger_template_generator import SwaggerTemplateGenerator
from apifuzzer.fuzzer_target import FuzzerTarget
from apifuzzer.server_fuzzer import OpenApiServerFuzzer
from apifuzzer.utils import set_logger
from kitty.interfaces import WebInterface
from kitty.model import GraphModel

from apifuzzer.swagger_template_generator import SwaggerTemplateGenerator
from apifuzzer.fuzzer_target import FuzzerTarget
from apifuzzer.server_fuzzer import OpenApiServerFuzzer
from apifuzzer.utils import set_logger


class Fuzzer(object):
Expand Down Expand Up @@ -56,10 +59,6 @@ def run(self):
def signal_handler(**kwargs):
sys.exit(0)

if not sys.version_info[:2] == (2, 7):
print('Please use with Python 2.7')
exit()

parser = argparse.ArgumentParser(description='API fuzzer configuration',
formatter_class=lambda prog: argparse.HelpFormatter(prog, max_help_position=20))
parser.add_argument('-s', '--src_file',
Expand All @@ -70,7 +69,7 @@ def signal_handler(**kwargs):
parser.add_argument('-r', '--report_dir',
type=str,
required=False,
help='Directory where error reports will be saved, default: /tmp/',
help='Directory where error reports will be saved. Default is temporally generated directory',
dest='report_dir',
default=tempfile.mkdtemp())
parser.add_argument('--level',
Expand All @@ -97,7 +96,7 @@ def signal_handler(**kwargs):
help='Use different log level than the default WARNING',
dest='log_level',
default='warning',
choices=[level.lower() for level in logging._levelNames if isinstance(level, str)])
choices=[level.lower() for level in levelNames if isinstance(level, str)])
args = parser.parse_args()
api_definition_json = dict()
try:
Expand Down

0 comments on commit 2907e09

Please sign in to comment.