예제 #1
0
import mongomock

import thug
from thug.ThugAPI.ThugOpts import ThugOpts
from thug.Logging.modules.MongoDB import MongoDB
from thug.ThugAPI.ThugVulnModules import ThugVulnModules
from thug.Logging.ThugLogging import ThugLogging
from thug.Encoding.Encoding import Encoding
from thug.DOM.HTTPSession import HTTPSession

configuration_path = thug.__configuration_path__

log = logging.getLogger("Thug")

log.personalities_path = os.path.join(configuration_path, "personalities") if configuration_path else None
log.ThugOpts           = ThugOpts()
log.configuration_path = configuration_path
log.ThugLogging        = ThugLogging(thug.__version__)
log.ThugVulnModules    = ThugVulnModules()
log.Encoding           = Encoding()
log.HTTPSession        = HTTPSession()


class TestMongoDB:
    cve  = "CVE-XXXX"
    url  = "www.example.com"
    data = b"sample-data"
    desc = "sample-desc"
    cert = "sample-cert"

    file_data = {'sha1': 'b13d13733c4c9406fd0e01485bc4a34170b7d326',
예제 #2
0
class TestThugOpts:
    opts = ThugOpts()

    def test_verbose(self):
        self.opts.verbose = True
        assert self.opts.verbose

        self.opts.verbose = False
        assert not self.opts.verbose

    def test_debug(self):
        self.opts.debug = True
        assert self.opts.debug

        self.opts.debug = False
        assert not self.opts.debug

    def test_proxy(self):
        self.opts.proxy = ''
        assert self.opts.proxy is None

        self.opts.proxy = 'http://www.example.com'
        addr = self.opts.proxy
        assert addr in ('http://www.example.com', )

        self.opts.proxy = None
        assert self.opts.proxy is None

    def test_error_proxy(self, caplog):
        caplog.clear()

        with pytest.raises(SystemExit):
            self.opts.proxy = 'ftp://www.example.com'
        assert '[ERROR] Invalid proxy scheme' in caplog.text

    def test_raise_for_proxy(self):
        self.opts.raise_for_proxy = False
        assert not self.opts.raise_for_proxy

        self.opts.raise_for_proxy = True
        assert self.opts.raise_for_proxy

    def test_useragent(self):
        assert self.opts.useragent in ('winxpie60', )

        self.opts.useragent = 'linuxchrome26'
        ua = self.opts.useragent
        assert ua in ('linuxchrome26', )

    def test_warning_useragent(self, caplog):
        caplog.clear()

        self.opts.useragent = 'nonexistent-ua'
        assert '[WARNING] Invalid User Agent provided' in caplog.text

    def test_referer(self):
        assert self.opts.referer in ('about:blank', )

        self.opts.referer = 'https://www.example.com'
        referer = self.opts.referer
        assert referer in ('https://www.example.com', )

    def test_events(self):
        sample_events = 'event1,event2,event2,event3'
        assert self.opts.events in ([], )

        self.opts.events = ''
        assert self.opts.events in ([], )

        self.opts.events = sample_events
        event_list = self.opts.events
        assert event_list in (['event1', 'event2', 'event3'], )

    def test_delay(self):
        assert self.opts.delay in (0, )

        self.opts.delay = 10
        time = self.opts.delay
        assert time in (10, )

    def test_warning_delay(self, caplog):
        caplog.clear()

        self.opts.delay = 'a'
        assert '[WARNING] Ignoring invalid delay value' in caplog.text

    def test_attachment(self):
        self.opts.attachment = True
        assert self.opts.attachment

        self.opts.attachment = False
        assert not self.opts.attachment

    def test_file_logging(self):
        self.opts.file_logging = True
        assert self.opts.file_logging

        self.opts.file_logging = False
        assert not self.opts.file_logging

    def test_json_logging(self):
        self.opts.json_logging = True
        assert self.opts.json_logging

        self.opts.json_logging = False
        assert not self.opts.json_logging

    def test_maec11_logging(self):
        self.opts.maec11_logging = True
        assert self.opts.maec11_logging

        self.opts.maec11_logging = False
        assert not self.opts.maec11_logging

    def test_elasticsearch_logging(self):
        self.opts.elasticsearch_logging = True
        assert self.opts.elasticsearch_logging

        self.opts.elasticsearch_logging = False
        assert not self.opts.elasticsearch_logging

    def test_code_logging(self):
        self.opts.code_logging = False
        assert not self.opts.code_logging

        self.opts.code_logging = True
        assert self.opts.code_logging

    def test_cert_logging(self):
        self.opts.cert_logging = False
        assert not self.opts.cert_logging

        self.opts.cert_logging = True
        assert self.opts.cert_logging

    def test_no_fetch(self):
        self.opts.no_fetch = True
        assert self.opts.no_fetch

        self.opts.no_fetch = False
        assert not self.opts.no_fetch

    def test_threshold(self):
        assert self.opts.threshold in (0, )

        self.opts.threshold = 5
        pages = self.opts.threshold
        assert pages in (5, )

    def test_warning_threshold(self, caplog):
        caplog.clear()

        self.opts.threshold = 'a'
        assert '[WARNING] Ignoring invalid threshold value' in caplog.text

    def test_connect_timeout(self):
        assert self.opts.connect_timeout in (10, )

        self.opts.connect_timeout = 20
        time = self.opts.connect_timeout
        assert time in (20, )

    def test_warning_connect_timeout(self, caplog):
        caplog.clear()

        self.opts.connect_timeout = 'a'
        assert '[WARNING] Ignoring invalid connect timeout value' in caplog.text

    def test_timeout(self):
        assert self.opts.timeout in (600, )

        self.opts.timeout = 300
        time = self.opts.timeout
        assert time in (300, )

    def test_warning_timeout(self, caplog):
        caplog.clear()

        self.opts.timeout = 'a'
        assert '[WARNING] Ignoring invalid timeout value' in caplog.text

    def test_broken_url(self):
        self.opts.broken_url = True
        assert self.opts.broken_url

        self.opts.broken_url = False
        assert not self.opts.broken_url

    def test_vt_query(self):
        self.opts.vt_query = True
        assert self.opts.vt_query

        self.opts.vt_query = False
        assert not self.opts.vt_query

    def test_vt_submit(self):
        self.opts.vt_submit = True
        assert self.opts.vt_submit

        self.opts.vt_submit = False
        assert not self.opts.vt_submit

    def test_vt_runtime_apikey(self):
        self.opts.vt_runtime_apikey = 'sample-key'
        key = self.opts.vt_runtime_apikey
        assert key in ('sample-key', )

        self.opts.vt_runtime_apikey = None
        assert self.opts.vt_runtime_apikey is None

    def test_web_tracking(self):
        self.opts.web_tracking = True
        assert self.opts.web_tracking

        self.opts.web_tracking = False
        assert not self.opts.web_tracking

    def test_honeyagent(self):
        self.opts.honeyagent = False
        assert not self.opts.honeyagent

        self.opts.honeyagent = True
        assert self.opts.honeyagent

    def test_mongodb_address(self):
        assert self.opts.mongodb_address is None

        self.opts.mongodb_address = '127.0.0.1:27017'
        addr = self.opts.mongodb_address
        assert addr in ('127.0.0.1:27017', )