Exemplo n.º 1
0
def main():
    start = time.time()
    logger = setupLogger()
    parser = _get_parser()
    args = parser.parse_args()

    if not args.url:
        parser.print_help()
        exit()

    args.url = URLFormatter(args.url).geturl()

    try:
        workQueue = queue.Queue()
        workerPool = []
        for _ in range(int(args.threadcount)):
            thread = WorkerThread(workQueue)
            thread.daemon = True
            thread.start()
            workerPool.append(thread)

        wordcount = 0
        for url in WordListGenerator(args.url, filename=args.wordlist):
            wordcount += 1
            workQueue.put(url)
        logger.info(f"{wordcount} urls generated")

        logger.info("Scanner started")

        while not workQueue.empty():
            pass

        for worker in workerPool:
            worker.join()
        # prevents the main thread from exiting
        end = time.time()
        elapsed = int(end - start)
        logger.info(f"Scanner completed in {elapsed} seconds")

    except KeyboardInterrupt:
        logger.info("Detected interrupt signal, terminating")
        for worker in workerPool:
            worker.work = False
Exemplo n.º 2
0
def main():
    """
    A function to parse the command argument
    And control the main program
    """

    logger = setupLogger()
    parser = argparse.ArgumentParser(prog="admin-finder.py", description="Admin panel finder")
    parser.add_argument("-u", "--url", help="Target url/website")
    parser.add_argument("-w", "--wordlist", help="Wordlist to use, default 'wordlist.txt'")
    parser.add_argument("-t", "--threadcount", help="Number of threads to use")
    parser.add_argument("-c", "--credentials", help="Basic http authentication credentials user:pass format")

    args = parser.parse_args()

    if args.url is None:
        parser.print_help()
        print("[-] -u URL paremeter required")
        exit()

    if args.threadcount is not None:
        if not args.threadcount.isdigit():
            print("[-] Process count parameter needs to be digit")
            exit()
    else:
        args.threadcount = 20

    if args.wordlist is None:
        args.wordlist = "wordlist.txt"
    args.url = URLFormatter(args.url).geturl()

    if args.credentials:
        if ":" not in args.credentials:
            print("[!] Error: credential need to be in this format user:pass")
            exit()
        args.credentials = args.credentials.split(":")

    robot_handler = RobotHandler(args.url, args.credentials)
    result = robot_handler.scan()

    if result:
        logger.info("Detected keywords in robot file")
        print("-" * 30)
        print("\n".join(result))
        print("-" * 30)
        print("Would you like to continue scanning?")
        choice = input("[y]/n: ")
        if choice == "n":
            exit()

    try:
        workQueue = queue.Queue()
        workerPool = []
        for _ in range(int(args.threadcount)):
            thread = WorkerThread(workQueue, args.credentials)
            thread.daemon = True
            thread.start()
            workerPool.append(thread)

        for url in WordListGenerator(args.url, filename=args.wordlist):
            workQueue.put(url)

        logger.info("Scanner started")

        while not workQueue.empty():
            pass
        # to lock the main thread from exiting
    except KeyboardInterrupt:
        logger.info("Detected Ctrl + C, terminating")
        for i in workerPool:
            i.work = False