Amazing-Python-Scripts

Форк
0
118 строк · 4.0 Кб
1

2
import sys
3
import time
4
import requests
5
from concurrent.futures import ThreadPoolExecutor as executor
6
from optparse import OptionParser
7

8

9
def printer(word):
10
    sys.stdout.write(word + "                                        \r")
11
    sys.stdout.flush()
12
    return True
13

14

15
yellow = "\033[93m"
16
green = "\033[92m"
17
blue = "\033[94m"
18
red = "\033[91m"
19
bold = "\033[1m"
20
end = "\033[0m"
21

22

23
def check_status(domain, url):
24
    if not url or url.startswith("#") or len(url) > 30:
25
        return False
26

27
    printer("Testing: " + domain + url)
28
    try:
29
        link = domain + url
30
        req = requests.head(link)
31
        st = str(req.status_code)
32
        if st.startswith(("2", "1")):
33
            print(green + "[+] " + st + " | Found: " + end + "[ " + url +
34
                  " ]" + "                                                   \r")
35
        elif st.startswith("3"):
36
            link = req.headers['Location']
37
            print(yellow + "[*] " + st + " | Redirection From: " + end + "[ " + url + " ]" + yellow +
38
                  " -> " + end + "[ " + link + " ]" + "                                         \r")
39
        elif st.startswith("4"):
40
            if st != '404':
41
                print(blue + "[!] " + st + " | Found: " + end + "[ " + url +
42
                      " ]" + "                                                   \r")
43
        return True
44
    except Exception:
45
        return False
46

47

48
def presearch(domain, ext, url):
49
    if ext == 'Null' or ext == 'None':
50
        check_status(domain, url)
51
    elif url and not url.isspace():
52
        ext_list = [ext] if ext != "None" else [""]
53
        for i in ext_list:
54
            link = url if not i else url + "." + str(i)
55
            check_status(domain, link)
56

57

58
def main():
59
    parser = OptionParser(green + """
60
#Usage:""" + yellow + """
61
    -t target host
62
    -w wordlist
63
    -d thread number (Optional, Default: 10)
64
    -e extensions (Optional, ex: html,php)
65
""" + green + """
66
#Example:""" + yellow + """
67
    python3 dirbrute.py -t domain.com -w dirlist.txt -d 20 -e php,html
68
""" + end)
69

70
    try:
71
        parser.add_option("-t", dest="target", type="string",
72
                          help="the target domain")
73
        parser.add_option("-w", dest="wordlist",
74
                          type="string", help="wordlist file")
75
        parser.add_option("-d", dest="thread", type="int",
76
                          help="the thread number")
77
        parser.add_option("-e", dest="extension",
78
                          type="string", help="the extensions")
79
        (options, _) = parser.parse_args()
80

81
        if not options.target or not options.wordlist:
82
            print(parser.usage)
83
            exit(1)
84

85
        target = options.target
86
        wordlist = options.wordlist
87
        thread = options.thread if options.thread else 10
88
        ext = options.extension if options.extension else "Null"
89

90
        target = target if target.startswith("http") else "http://" + target
91
        target = target if target.endswith("/") else target + "/"
92

93
        print("[" + yellow + bold + "Info" + end + "]:\n")
94
        print(blue + "[" + red + "+" + blue + "] Target: " + end + target)
95
        print(blue + "[" + red + "+" + blue + "] File: " + end + wordlist)
96
        print(blue + "[" + red + "+" + blue + "] Thread: " + end + str(thread))
97
        print(blue + "[" + red + "+" + blue + "] Extension: " + end + str(ext))
98
        print("\n[" + yellow + bold + "Start Searching" + end + "]:\n")
99

100
        ext_list = ext.split(",") if ext != "Null" else ["Null"]
101
        with open(wordlist, 'r') as urls:
102
            with executor(max_workers=int(thread)) as exe:
103
                jobs = [exe.submit(presearch, target, ext,
104
                                   url.strip('\n')) for url in urls]
105

106
        took = (time.time() - start) / 60
107
        print(red + "Took: " + end +
108
              f"{round(took, 2)} m" + "                          \r")
109

110
        print("\n\t* Happy Hacking *")
111

112
    except Exception as e:
113
        print(red + "#Error: " + end + str(e))
114
        exit(1)
115

116

117
if __name__ == '__main__':
118
    start = time.time()
119
    main()
120

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.