예제 #1
0
    def task(self, config):
        """ prepare the shell """
        ext = config["menu-sel"].replace(" ", "_")
        serv = self._service_filter(config["service"])
        proxychains = config["proxychains"]
        auto_exec = config["autoexec"]
        rhost = config["rhost"]
        rport = config["rport"]
        banner = config["banner"]
        output_file = config["outfile"]
        path_config = config["path_config"]
        path_script = config["path_script"]

        # fix ext
        ext_i = ext.split("/")[:-1]
        ext_i.append(serv)
        ext_i.append(ext.split("/")[-1])

        ext = '/'.join(ext_i)

        scroller = Gtk.ScrolledWindow()

        terminal = widgets.Terminal()  #shell="/usr/bin/msfconsole")

        scroller.add(terminal)
        scroller.show()

        status = terminal.status
        pid = terminal.pid

        startmsf = ""
        if proxychains:
            startmsf = "proxychains "
        startmsf += "msfconsole -q\n"

        terminal.feed_child(startmsf.encode())
        terminal.feed_child(("use %s\n" % (ext)).encode())
        terminal.feed_child(("set RHOSTS %s\n" % (rhost)).encode())
        terminal.feed_child(("set RHOST %s\n" % (rhost)).encode())
        terminal.feed_child(("set RPORT %s\n" % (rport)).encode())

        if auto_exec:
            terminal.feed_child(("run\n").encode())
            terminal.feed_child(("exit\n").encode())
            terminal.feed_child(("exit\n").encode())

        terminal.connect("child_exited", self.task_terminated)

        return scroller, pid
예제 #2
0
	def task(self, config):
		""" prepare the shell """
		ext          = config["menu-sel"] #.replace(" ","_")
		serv         = config["service"]
		proxychains  = config["proxychains"]
		auto_exec    = config["autoexec"]
		rhost        = config["rhost"]
		rport        = config["rport"]
		banner       = config["banner"]
		output_file  = config["outfile"]
		path_config  = config["path_config"]
		path_script  = config["path_script"]

		cmd = self.config[serv][ext]
		cmd = cmd.replace("$rhost", rhost).replace("$rport", str(rport))
		cmd = cmd.replace('$domain', config["domain"])
		cmd = cmd.replace('$wordlists', config["path_wordlist"])
		cmd = cmd.replace('$scripts', config["path_script"])
		cmd = cmd.replace('$banner', config["banner"])

		if "$outfile" in cmd:
			# set the output_file location string
			cmd          = cmd.replace("$outfile", output_file)

		if proxychains:
			cmd = "proxychains "+cmd

		cmd += "; exit;"

		if auto_exec:
			cmd+="\n"

		scroller    = Gtk.ScrolledWindow()
		terminal	= widgets.Terminal()

		scroller.add(terminal)
		scroller.show()

		status = terminal.status
		pid = terminal.pid

		terminal.feed_child(cmd.encode())
		terminal.connect("child_exited", self.task_terminated)

		return scroller, pid
예제 #3
0
    def task(self, config):
        """ WebSession task: a Gtk.Paned that contains mitmproxy and  """
        ext = config["menu-sel"].replace(" ", "_")
        serv = config["service"]
        proxychains = config["proxychains"]
        auto_exec = config["autoexec"]
        rhost = config["rhost"]
        domain = config["domain"]
        rport = config["rport"]
        output_file = config["outfile"]
        path_config = config["path_config"]
        self.path_script = config["path_script"]
        self.o_file = "/tmp/" + ''.join(
            random.choice(string.ascii_uppercase + string.digits)
            for _ in range(8)) + ".mitm"

        if domain:
            target = domain
        else:
            target = rhost

        # proxy port
        proxy_port = 8080
        found = True

        while found:
            # search for an open port for mitm
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            result = sock.connect_ex(('127.0.0.1', proxy_port))

            if result == 0:
                proxy_port += 1
            else:
                found = False

        cmd = "mitmproxy -p %d -w %s; exit;\n" % (
            proxy_port, self.o_file)  # --set console_focus_follow=true

        if proxychains:
            cmd = "proxychains %s" % cmd

        terminal = widgets.Terminal()
        terminal.feed_child(cmd.encode())

        status = terminal.status
        pid = terminal.pid

        box = Gtk.Paned()
        scroller = Gtk.ScrolledWindow()

        scroller.add(terminal)

        if "443" in rport:
            url = "https://%s:%s" % (target, rport)
        else:
            url = "http://%s:%s" % (target, rport)

        webview = widgets.WebView(url,
                                  proxy="http://127.0.0.1:%d" % proxy_port)

        webview_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        webview_box.show()

        webview_box.add(webview.toolbar)
        webview_box.add(webview)

        webview_box.set_vexpand(True)
        scroller.set_hexpand(True)

        box.pack1(scroller, False, False)
        box.pack2(webview_box, True, False)

        scroller.set_property("width-request", 480)

        terminal.set_hexpand(True)
        box.set_vexpand(True)
        box.show_all()

        # add main window
        builder = Gtk.Builder()  # glade
        builder.add_from_file(
            os.path.dirname(os.path.abspath(__file__)) +
            "/../../assets/ui/websession.glade")

        main_win = builder.get_object('websession-main')
        payloads_toolbar = builder.get_object('payloads-bar')
        main_win.add(box)

        for payload_cat in self.config_file:
            if payload_cat != "DEFAULT":
                catbtn = Gtk.MenuItem(payload_cat)
                catbtn.show()
                subcat = Gtk.Menu()

                for payload_subcat in self.config_file[payload_cat]:

                    subcatbtn = Gtk.MenuItem(payload_subcat)
                    subcat.add(subcatbtn)
                    subcat.show_all()

                    payload_menu = Gtk.Menu()

                    for payload in self.config_file[payload_cat][
                            payload_subcat].split("\n"):

                        payloadbtn = Gtk.MenuItem(payload)
                        payload_menu.add(payloadbtn)

                        payload_menu.show_all()

                        payloadbtn.connect('activate', self.copy_payload,
                                           payload)

                        subcatbtn.set_submenu(payload_menu)
                    catbtn.set_submenu(subcat)

                payloads_toolbar.add(catbtn)

        terminal.connect("child_exited", self.task_terminated, main_win)

        return main_win, pid
예제 #4
0
    def task(self, config):

        serv = config["service"]
        self.proxy = config["proxychains"]
        auto_exec = config["autoexec"]
        rhost = config["rhost"]
        rport = config["rport"]
        output_file = config["outfile"]
        path_config = config["path_config"]
        path_wordlist = config["path_wordlist"]
        path_script = config["path_script"]

        config_file = configparser.ConfigParser()
        config_file.read(config["path_config"] + "/bruter.conf")

        builder = Gtk.Builder()  # glade
        builder.add_from_file(
            os.path.dirname(os.path.abspath(__file__)) +
            "/../../assets/ui/bruter.glade")

        self.running = False
        self.bruter_box = builder.get_object("bruter-box")

        self.bruter_host = builder.get_object("bruter-host")
        self.bruter_port = builder.get_object("bruter-port")
        self.bruter_threads = builder.get_object("bruter-threads")
        self.bruter_terminal_loc = builder.get_object("bruter-terminal-loc")
        self.bruter_start = builder.get_object("bruter-start")
        self.bruter_service = builder.get_object("bruter-service")
        self.bruter_user_box = builder.get_object("bruter-user-box")
        self.bruter_user_checkbox = builder.get_object(
            "bruter-user-wordlsit-checkbox")
        self.bruter_user_wl_path = builder.get_object("bruter-user-wordlist")
        self.bruter_pass_wl_path = builder.get_object("bruter-pass-wordlist")
        self.bruter_user_wl_open = builder.get_object(
            "bruter-user-wordlist-open")
        self.bruter_pass_wl_open = builder.get_object(
            "bruter-pass-wordlist-open")

        self.bruter_reversed = builder.get_object("reversed")
        self.bruter_login_as_pass = builder.get_object("login-as-pass")
        self.bruter_blank_pass = builder.get_object("blank-pass")
        self.bruter_use_ssl = builder.get_object("use-ssl")
        self.bruter_exit_on_first = builder.get_object("exit-on-first-good")

        self.bruter_terminal = widgets.Terminal()

        self.bruter_terminal_loc.add(self.bruter_terminal)

        self.bruter_user_checkbox_enabled = False
        self.bruter_user_box.set_sensitive(True)
        self.bruter_user_wl_path.set_sensitive(False)
        self.bruter_user_wl_open.set_sensitive(False)

        self.bruter_user_wl_open.connect("clicked", self.bruter_open_user_file)
        self.bruter_pass_wl_open.connect("clicked", self.bruter_open_pass_file)
        self.bruter_start.connect("clicked", self._bruter_start)

        # filil the service combo-box
        name_store = Gtk.ListStore(str)
        hydra_services = [
            "afp", "asterisk", "cisco-enable", "cisco", "cvs", "firebird",
            "ftp", "http-proxy-urlenum", "http-proxy", "http-get", "http-head",
            "https-get", "https-head", "icq", "imap", "irc", "ldap", "mssql",
            "mysql", "ncp", "nntp", "oracle-listener", "oracle-sid", "oracle",
            "pcanywhere", "pcnfs", "pop3", "postgres", "rdp", "redis", "rexec",
            "rlogin", "rpcap", "rsh", "rtsp", "s7-300", "sapr3", "sip", "smb",
            "smtp-enum", "smtp", "snmp", "socks5", "ssh", "ssh-key", "svn",
            "teamspeak", "telnet", "time", "vmauthd", "vnc", "xmpp"
        ]

        for service in hydra_services:
            name_store.append([service])

        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)

        self.bruter_service_combo = Gtk.ComboBox.new_with_model_and_entry(
            name_store)
        self.bruter_user_checkbox.connect("toggled", self._bruter_check_user)
        self.bruter_service_combo.set_entry_text_column(0)
        vbox.pack_start(self.bruter_service_combo, False, False, 0)

        self.bruter_service.add(vbox)

        # bruter wordlists
        default_user_wordlist = config_file["default"][
            "user_wordlist"].replace("$wordlists", path_wordlist)
        defautl_pass_wordlist = config_file["default"][
            "pass_wordlist"].replace("$wordlists", path_wordlist)

        self.bruter_user_wl_path.set_text(default_user_wordlist)
        self.bruter_pass_wl_path.set_text(defautl_pass_wordlist)

        self.bruter_box.show_all()

        status = self.bruter_terminal.status
        self.pid = self.bruter_terminal.pid

        self.bruter_terminal.connect("child_exited", self.task_terminated)
        self.bruter_terminal.hide()

        self.bruter_host.set_text(rhost)
        self.bruter_port.set_text(rport)

        # set default values
        self.bruter_blank_pass.set_active(
            config_file.getboolean("default", "blank_password"))
        self.bruter_login_as_pass.set_active(
            config_file.getboolean("default", "try_login_as_password"))
        self.bruter_use_ssl.set_active(
            config_file.getboolean("default", "use_ssl"))
        self.bruter_exit_on_first.set_active(
            config_file.getboolean("default", "exit_on_first_good"))
        self.bruter_user_checkbox.set_active(
            config_file.getboolean("default", "brute_force_user"))

        self.bruter_threads.set_text(config_file["default"]["threads"])
        self.bruter_user_box.set_text(config_file["default"]["user"])

        service_model = self.bruter_service_combo.get_model()

        iter1 = 0
        for ser in service_model:
            if ser[0] == config["service"]:
                break

            iter1 += 1

        self.bruter_service_combo.set_active(iter1)

        if config["autoexec"]:
            self._bruter_start('test')

        return self.bruter_box, self.pid