Jump to content

gnoo

Membros
  • Content Count

    157
  • Joined

  • Last visited

Community Reputation

75 Excellent

Recent Profile Visitors

1,175 profile views
  1. @Insurgente vê esse video ai https://www.youtube.com/watch?v=IvPVd_UKoyI É possivel que tenhas que fazer também configurações no burp vê este link https://support.portswigger.net/customer/portal/articles/1783055-configuring-your-browser-to-work-with-burp
  2. Aaaahhh, e ainda tenho outro, um HP com um Atom, todo podre com 2 Gb de RAM, 30 Gb de disco, também com Arch Linux + Openbox ( uma instalação masi enxuta que no meu principal), ainda consigo rodar uma VM e ver um filme porno em 4k, ☺️ hehehehe... O que eu quero dizer com isto é que na maioria das vezes os recursos da máquina estão mal aproveitados, e é preciso fazer melhorias.
  3. @morgao porra, dizes que a tua máquina é bem fraca, um i5 4gen e ainda com 6 gb de RAM, desculpa lá mas tu não estás a ver bem o filme. Eu tenho um i3 com 4 Gb de RAM, já com uns bons anos a única coisa que lhe mudei foi o HD para um SSD, tenho instalado Arch Linux + Openbox em arranque inicia o sistema em mais ou menos 120 MB de RAM e ainda consigo rodar pelo menos uma duas VM's com as configurações certas em simultâneo. Mas tudo bem, se preferes dualboot a escolha é tua, eu acho é que tu não estás a saber usar os recursos da tua máquina. Um i5 não é nada de outro mundo mas é bastante bom, e 6Gb de RAM bem aproveitados dá para fazer muita coisa.
  4. @morgao Há temas( penso que seja Themes que estás a falar?) que são feitos para para interfaces gráficas em especifico, pode não funcionar.... Eu se fosse a ti, não sei se é a primeira vez que estás usar Gnu/Linux, o que eu faria era instalar um Linux Mint Cinnamon, já que tu queres uma interface bonita, se o computador for fraco talvez um XFCE, o linux mint é uma boa distro para começar e é um sistema sólido, fácil de instalar com três cliques, e depois de teres um sistema pronto a operar, começas então a estudar esses LPI essentials começas a fazer uns brincadeiras no terminal e conhecer o sistema e depois com o tempo, isso é gradual, mudas para outras distros ou ficas com essa... em vez de fazeres teste diretos no teu sistema não sei que tipo de computador tens, mas se os recursos forem mais ou menos montas uma VM instalas outras distros fazes os testes que tens a fazer, tentas fazer essas configurações e quando tiveres à vontade instalas na tua máquina.
  5. @morgão tudo bem?, esse é aquele tipo de problemas que se não formos objetivos sobre qual é a nossa dúvida e o que correu mal é difícil adivinhar aquilo que tu fizeste. Tentando interpretar a tuas palavras deixa algumas dúvidas no ar, tu dizes que tens duas versões de Linux instaladas e que dá a impressão de ter dois kernel's instalados... na realidade isso é possível. O que é que fizeste na realidade? instalaste fedora e deepin dualboot????? é que se for esse o caso então sim tens duas versões do linux, ou mais, e tens dois sistemas operativos instalados. A ideia que te posso dar é que se não percebes como funciona o dualboot e não consegues gerir para já o sistema dessa forma, tens de ver qual é a distribuição que realmente gostas, se é deepin formatas tudo e ficas com deepin, se queres ficar com fedora, formatas tudo e instalas fedora, e depois instalas a interface gráfica deepin no fedora. Esta é a solução mais rápida e eficaz, que tenho para te dar, depois com tempo vais aprendendo e vais adaptando a tua maneira.
  6. Escolas sem professores e sem certificado de habilitações, isso é o sonho de qualquer criança... Mas se não tem professores nem certificado de habilitações, então não é uma escola.
  7. Tens o discord deste forum podes falar lá se quiseres.
  8. Tem biliões de pessoas a olhar para malware todos os dias, basta olhar á tua volta e ver a quantidade de pessoas que não tira os olhos do Facebook e instagram.
  9. Saudações coisinhas fofas, fiz aqui um pequeno script em python para fazer requisições para servidores whois e queria partilhas com vocês, porque vocês merecem muitas coisinhas boas, então vamos lá... Root Zone Database https://www.iana.org/domains/root/db NOTA: Se clicarem no .br por exemplo vão ser redirecionados para uma página onde podem encontrar o "nome" do servidor para o qual deve ser feita a query caso o dominio que quem verificar terminar em .br. SCRIPT EM PYTHON from socket import * import re endereco = "mentebinaria.com.br" whois_arin = "whois.arin.net" servidores_whois_tdl = {'.br': 'whois.registro.br', '.org': 'whois.pir.org', '.com': 'whois.verisign-grs.com', '.pt': 'whois.dns.pt'} padrao_expressao_regular = re.compile(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$") def requisicao_whois(servidor_whois, endereco_host, padrao): objeto_socket = socket(AF_INET, SOCK_STREAM) conexao = objeto_socket.connect_ex((servidor_whois, 43)) if conexao == 0: if padrao == True: objeto_socket.send('n + {}\r\n'.format(endereco_host).encode()) while True: dados = objeto_socket.recv(65500) if not dados: break print(dados.decode('latin-1')) elif padrao == False: objeto_socket.send('{}\r\n'.format(endereco_host).encode()) while True: dados = objeto_socket.recv(65500) if not dados: break print(dados.decode('latin-1')) if padrao_expressao_regular.match(endereco): requisicao_whois(whois_arin, endereco, padrao = True) else: for TLD in servidores_whois_tdl.keys(): if endereco.endswith(TLD): requisicao_whois(servidores_whois_tdl[TLD], endereco, padrao = False) NOTAS IMPORTANTES O SOBRE SCRIPT Porquê este ciclo de repetição ? while True: dados = objeto_socket.recv(65500) if not dados: break print(dados.decode('latin-1')) Porque a resposta completa vem em pacotes diferentes na maioria das vezes, e quando chegam são reagrupados, então se estiveres à espera de receber apenas o buffer e fazer output dos dados, ficas apenas com a resposta de um pacote, ou seja a resposta fica incompleta. Ao fazer a query para o servidor no método send( ) vais ver isto n + objeto_socket.send('n + {}\r\n'.format(endereco_host).encode()) segue o link : https://www.arin.net/resources/registry/whois/rws/api/ Vê o tópico NICNAME/Whois Queries está lá a explicar tudo. Porquê que é que está a ser feito um decode 'latin-1' nos dados recebidos ? print(dados.decode('latin-1')) Eu quando estive a fazer uma análise do domínio mentebinária.com.br, aparentemente o dono tem um nome muito estranho, que é mercês então o caractere ê vem num formato 0xea , então não dá para resolver com utf-8 tem que ser com latin-1. Vê esta informação: https://docs.python.org/3/howto/unicode.html e esta também https://docs.python.org/3/library/codecs.html#standard-encodings penso que seja tudo, beijinhos fofos.
  10. se o criminoso fosse eu, acho que sim deviam pagar...
  11. Saudações, O intuito de fazer este script foi para ter uma ideia muito superficial de como funciona um TLS handshake, é de fazer notar que este script apenas analisa: TLS Record Handshake Client Hello Server Hello Application data Tudo o que envolve mensagens com certificados, necessita que seja dedicado um bom tempo de estudo, alguma dedicação ao assunto e eu não tenho esse tempo para dedicar a este tipo de assunto, e a vontade também não é muita. Dito isto digamos que o interesse aqui é ter um primeiro contato com TLS para tentar perceber como é feita a conversação entre o cliente e o servidor... As fontes de informação para iniciantes numa primeira abordagem não são muitas, no entanto encontrei uma página em que o jovem que escreveu o artigo tentou fazer uma explicação que numa fase inicial é interessante, talvez haja outras fontes eu é que não encontrei. Outra ferramenta que deve ser usada para complementar é o wireshark. Traffic Analysis of an SSL/TLS Session Pode ser encontrado aqui: http://blog.fourthbit.com/2014/12/23/traffic-analysis-of-an-ssl-slash-tls-session A informação que segue foi a que eu usei para criar o script, no link do site tem informação sobre outro tipo de mensagens. NOTA Outros Links que podem ajudar: https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/TLS_Cipher_String_Cheat_Sheet.md https://www.ntu.edu.sg/home/ehchua/programming/webprogramming/http_ssl.html https://www.cisco.com/c/en/us/support/docs/security-vpn/secure-socket-layer-ssl/116181-technote-product-00.html OUTRA NOTA: As cipher suites que estão no script que são usadas na negociação do Cliente Hello e Server Hello, algumas não são usadas mas qualquer das formas eu deixei lá, antes a mais do que a menos. SCRIPT PYTHON #coding:utf-8 #!/usr/bin/env python3 from socket import * import struct import binascii TIPO_RECORD = {22: "Handshake (22, 0x16)", 20: "Change Cipher Spec (20, 0x14)", 21: "Alert (21, 0x15)", 23: "Application Data (23, 0x17)"} TLS_VERSAO = {768: "SSL 3.0 (0x0300)", 769: "TLS 1.0 (0x0301)", 770: "TLS 1.1 (0x0302)", 771: "TLS 1.2 (0x0303)"} TIPO_HANDSHAKE = {0: "HELLO_REQUEST (0) 0x00", 1: "CLIENT_HELLO (1) 0x01", 2: "SERVER_HELLO (2) 0x02", 11: "CERTIFICATE (11) 0x0b", 12: "SERVER_KEY_EXCHANGE (12) 0x0c", 13: "CERTIFICATE_REQUEST (13) 0x0d", 14: "SERVER_DONE (14) 0x0e", 15: "CERTIFICATE_VERIFY (15) 0x0f", 16: "CLIENT_KEY_EXCHANGE (16) 0x10", 20: "FINISHED (20) 0x14"} # https://tools.ietf.org/html/rfc5246#page-75 # The following CipherSuite definitions require that the server provide # an RSA certificate that can be used for key exchange. The server may # request any signature-capable certificate in the certificate request # message. TIPO_CIPHER_SUITE = {1: 'CipherSuite: TLS_RSA_WITH_NULL_MD5 (0x0001)', 2: 'CipherSuite: TLS_RSA_WITH_NULL_SHA (0x0002)', 59: 'CipherSuite: TLS_RSA_WITH_NULL_SHA256 (0x003B)', 4: 'CipherSuite: TLS_RSA_WITH_RC4_128_MD5 (0x0004)', 5: 'CipherSuite: TLS_RSA_WITH_RC4_128_SHA (0x0005)', 10: 'CipherSuite: TLS_RSA_WITH_3DES_EDE_CBC_SHA (0x000A)', 47: 'CipherSuite: TLS_RSA_WITH_AES_128_CBC_SHA (0x002F)', 53: 'CipherSuite: TLS_RSA_WITH_AES_256_CBC_SHA (0x0035)', 60: 'CipherSuite: TLS_RSA_WITH_AES_128_CBC_SHA256 (0x003C)', 61: 'CipherSuite: TLS_RSA_WITH_AES_256_CBC_SHA256 (0x003D)', # https://tools.ietf.org/html/rfc5246#page-75 # The following cipher suite definitions are used for server- # authenticated (and optionally client-authenticated) Diffie-Hellman. # DH denotes cipher suites in which the server's certificate contains # the Diffie-Hellman parameters signed by the certificate authority # (CA). DHE denotes ephemeral Diffie-Hellman, where the Diffie-Hellman # parameters are signed by a signature-capable certificate, which has # been signed by the CA. The signing algorithm used by the server is # specified after the DHE component of the CipherSuite name. The # server can request any signature-capable certificate from the client # for client authentication, or it may request a Diffie-Hellman # certificate. Any Diffie-Hellman certificate provided by the client # must use the parameters (group and generator) described by the # server. 13: 'CipherSuite: TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA (0x000D)', 16: 'CipherSuite: TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA (0x0010)', 19: 'CipherSuite: TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA (0x0013)', 22: 'CipherSuite: TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (0x0016)', 48: 'CipherSuite: TLS_DH_RSA_WITH_AES_128_CBC_SHA (0x0031)', 50: 'CipherSuite: TLS_DHE_DSS_WITH_AES_128_CBC_SHA (0x0032)', 51: 'CipherSuite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x0033)', 54: 'CipherSuite: TLS_DH_DSS_WITH_AES_256_CBC_SHA (0x0036)', 55: 'CipherSuite: TLS_DH_RSA_WITH_AES_256_CBC_SHA (0x0037)', 56: 'CipherSuite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA (0x0038)', 57: 'CipherSuite:TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x0039)', 62: 'CipherSuite: TLS_DH_DSS_WITH_AES_128_CBC_SHA256 (0x003E)', 63: 'CipherSuite: TLS_DH_RSA_WITH_AES_128_CBC_SHA256 (0x003F)', 64: 'CipherSuite: TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 (0x0040)', 103: 'CipherSuite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (0x0067)', 104: 'CipherSuite: TLS_DH_DSS_WITH_AES_256_CBC_SHA256 (0x0068)', 105: 'CipherSuite: TLS_DH_RSA_WITH_AES_256_CBC_SHA256 (0x0069)', 106: 'CipherSuite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 (0x006A)', 107: 'CipherSuite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (0x006B)', # https://tools.ietf.org/html/rfc5246#page-75 # The following cipher suites are used for completely anonymous # Diffie-Hellman communications in which neither party is # authenticated. Note that this mode is vulnerable to man-in-the- # middle attacks. Using this mode therefore is of limited use: These # cipher suites MUST NOT be used by TLS 1.2 implementations unless the # application layer has specifically requested to allow anonymous key # exchange. (Anonymous key exchange may sometimes be acceptable, for # example, to support opportunistic encryption when no set-up for # authentication is in place, or when TLS is used as part of more # complex security protocols that have other means to ensure # authentication.) 24: 'CipherSuite: TLS_DH_anon_WITH_RC4_128_MD5 (0x0018)', 27: 'CipherSuite: TLS_DH_anon_WITH_3DES_EDE_CBC_SHA (0x001B)', 52: 'CipherSuite: TLS_DH_anon_WITH_AES_128_CBC_SHA (0x0034)', 58: 'CipherSuite: TLS_DH_anon_WITH_AES_256_CBC_SHA (0x003A)', 108: 'CipherSuite: TLS_DH_anon_WITH_AES_128_CBC_SHA256 (0x006C)', 109: 'CipherSuite: TLS_DH_anon_WITH_AES_256_CBC_SHA256 (0x006D)', # https://tools.ietf.org/html/rfc8446#page-133 # This specification defines the following cipher suites for use with TLS 1.3 4865: 'CipherSuite: TLS_AES_128_GCM_SHA256 (0x1301)', 4866: 'CipherSuite: TLS_AES_256_GCM_SHA384 (0x1302)', 4867: 'CipherSuite: TLS_CHACHA20_POLY1305_SHA256 (0x1303)', 4868: 'CipherSuite: TLS_AES_128_CCM_SHA256 (0x1304)', 4869: 'CipherSuite: TLS_AES_128_CCM_8_SHA256 (0x1305)', # https://wiki.mozilla.org/Security/Server_Side_TLS#Cipher_names_correspondence_table # Cipher preference: server chooses # 0x13,0x01 - TLS_AES_128_GCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESGCM(128) Mac=AEAD # 0x13,0x02 - TLS_AES_256_GCM_SHA384 TLSv1.3 Kx=any Au=any Enc=AESGCM(256) Mac=AEAD # 0x13,0x03 - TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD # 0xC0,0x2B - ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(128) Mac=AEAD # 0xC0,0x2F - ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD # 0xC0,0x2C - ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD # 0xC0,0x30 - ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD # 0xCC,0xA9 - ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD # 0xCC,0xA8 - ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD # 0x00,0x9E - DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(128) Mac=AEAD # 0x00,0x9F - DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD # 0xCC,0xAA - DHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=DH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD # 0xC0,0x23 - ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA256 # 0xC0,0x27 - ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA256 # 0xC0,0x09 - ECDHE-ECDSA-AES128-SHA TLSv1 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA1 # 0xC0,0x13 - ECDHE-RSA-AES128-SHA TLSv1 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA1 # 0xC0,0x24 - ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384 # 0xC0,0x28 - ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384 # 0xC0,0x0A - ECDHE-ECDSA-AES256-SHA TLSv1 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA1 # 0xC0,0x14 - ECDHE-RSA-AES256-SHA TLSv1 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA1 # 0x00,0x67 - DHE-RSA-AES128-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(128) Mac=SHA256 # 0x00,0x6B - DHE-RSA-AES256-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(256) Mac=SHA256 # 0x00,0x9C - AES128-GCM-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(128) Mac=AEAD # 0x00,0x9D - AES256-GCM-SHA384 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(256) Mac=AEAD # 0x00,0x3C - AES128-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA256 # 0x00,0x3D - AES256-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(256) #Cipher preference: client chooses # 0x13,0x01 - TLS_AES_128_GCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESGCM(128) Mac=AEAD # 0x13,0x02 - TLS_AES_256_GCM_SHA384 TLSv1.3 Kx=any Au=any Enc=AESGCM(256) Mac=AEAD # 0x13,0x03 - TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD # 0xC0,0x2B - ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(128) Mac=AEAD # 0xC0,0x2F - ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD # 0xC0,0x2C - ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD # 0xC0,0x30 - ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD # 0xCC,0xA9 - ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD # 0xCC,0xA8 - ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD # 0x00,0x9E - DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(128) Mac=AEAD # 0x00,0x9F - DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD 49195: 'CipherSuite: ECDHE-ECDSA-AES128-GCM-SHA256 (0xc02B)', 49199: 'CipherSuite: ECDHE-RSA-AES128-GCM-SHA256 (0xc02f)', 49196: 'CipherSuite: ECDHE-ECDSA-AES256-GCM-SHA384 (0xc02c)', 49200: 'CipherSuite: ECDHE-RSA-AES256-GCM-SHA384 (0xc030)', 52393: 'CipherSuite: ECDHE-ECDSA-CHACHA20-POLY1305 (0xccA9)', 52392: 'CipherSuite: ECDHE-RSA-CHACHA20-POLY1305 (0xcca8)', 158: 'CipherSuite: DHE-RSA-AES128-GCM-SHA256 (0x009e)', 159: 'CipherSuite: DHE-RSA-AES256-GCM-SHA384 (0x009f)', 52394: 'CipherSuite: DHE-RSA-CHACHA20-POLY1305 (0xccaa)', 49187: 'CipherSuite: ECDHE-ECDSA-AES128-SHA256 (0xc023)', 49191: 'CipherSuite: ECDHE-RSA-AES128-SHA256 (0xc027)', 49161: 'CipherSuite: ECDHE-ECDSA-AES128-SHA (0xc009)', 49188: 'CipherSuite: ECDHE-ECDSA-AES256-SHA384 (0xc024)', 49171: 'CipherSuite: ECDHE-RSA-AES128-SHA (0xc013)', 49192: 'CipherSuite: ECDHE-RSA-AES256-SHA384 (0xc028)', 49162: 'CipherSuite: ECDHE-ECDSA-AES256-SHA (0xc00a)', 49172: 'CipherSuite: ECDHE-RSA-AES256-SHA (0xc014)', 156: 'CipherSuite: AES128-GCM-SHA256 (0x009c)', 157: 'CipherSuite: AES256-GCM-SHA384 (0x009d)', # https://tools.ietf.org/html/draft-davidben-tls-grease-00 #GREASE Values # This document reserves a number of TLS protocol values, referred to # as GREASE values. These values were allocated sparsely to discourage # server implementations from conditioning on them. For convenience, # they were also chosen so all types share a number scheme with a # consistent pattern while avoiding collisions with any existing # applicable registries in TLS. #The following values are reserved as both GREASE extension values and #GREASE named group values: # 2570 (0x0A0A) # 6682 (0x1A1A) # 10794 (0x2A2A) # 14906 (0x3A3A) # 19018 (0x4A4A) # 23130 (0x5A5A) # 27242 (0x6A6A) # 31354 (0x7A7A) # 35466 (0x8A8A) # 39578 (0x9A9A) # 43690 (0xAAAA) # 47802 (0xBABA) # 51914 (0xCACA) # 56026 (0xDADA) # 60138 (0xEAEA) # 64250 (0xFAFA) 23130: 'CipherSuite: Reserved (GREASE) (0x5a5a)', 2570: 'CipherSuite: Reserved (GREASE) (0x0a0a)', 6682: 'CipherSuite: Reserved (GREASE) (0x1a1a)', 10794: 'CipherSuite: Reserved (GREASE) (0x2a2a)', 14906: 'CipherSuite: Reserved (GREASE) (0x3a3a)', 19018: 'CipherSuite: Reserved (GREASE) (0x4a4a)', 23130: 'CipherSuite: Reserved (GREASE) (0x5a5a)', 27242: 'CipherSuite: Reserved (GREASE) (0x6a6a)', 31354: 'CipherSuite: Reserved (GREASE) (0x7a7a)', 35466: 'CipherSuite: Reserved (GREASE) (0x8a8a)', 39578: 'CipherSuite: Reserved (GREASE) (0x9a9a)', 43690: 'CipherSuite: Reserved (GREASE) (0xaaaa)', 47802: 'CipherSuite: Reserved (GREASE) (0xbaba)', 51914: 'CipherSuite: Reserved (GREASE) (0xcaca)', 56026: 'CipherSuite: Reserved (GREASE) (0xdada)', 60138: 'CipherSuite: Reserved (GREASE) (0xeaea)', 64250: 'CipherSuite: Reserved (GREASE) (0xfafa)'} def ethernet_frame(raw_dados): mac_destino, mac_fonte, protocolo = struct.unpack('! 6s 6s H', raw_dados[:14]) return byte_to_hex_mac(mac_destino), byte_to_hex_mac(mac_fonte), htons(protocolo), raw_dados[14:] def byte_to_hex_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 dados_pacote_ipv4(payload_frame): tupla_dados_ipv4 = struct.unpack("!BBHHHBBH4s4s", payload_frame[:20]) versao_e_HLEN = tupla_dados_ipv4[0] tamanho_header = (versao_e_HLEN & 15) * 4 versao = versao_e_HLEN >> 4 tipo_servico = tupla_dados_ipv4[1] tamanho_total = tupla_dados_ipv4[2] identificacao = tupla_dados_ipv4[3] offset_fragmento = tupla_dados_ipv4[4] tempo_vida_ttl = tupla_dados_ipv4[5] protocolos = tupla_dados_ipv4[6] checksum_cabecalho = tupla_dados_ipv4[7] ip_origem = inet_ntoa(tupla_dados_ipv4[8]) ip_destino = inet_ntoa(tupla_dados_ipv4[9]) dados_ipv4_header = {'IPv4 Orivgem':ip_origem, 'IPv4 Destino':ip_destino, 'Protocolo': protocolos, 'Payload_ipv4': payload_frame[20:]} return dados_ipv4_header def dados_pacote_tcp(payload_ipv4): tupla_dados_tcp = struct.unpack('! HHLLBBHHH', payload_ipv4[:20]) porta_fonte = tupla_dados_tcp[0] porta_destino = tupla_dados_tcp[1] numero_sequencia = tupla_dados_tcp[2] numero_confirmacao = tupla_dados_tcp[3] # recebe dois campos do cabeçalho ( HLEN & RESERVADO ) hlen_e_reservado = tupla_dados_tcp[4] # recebe campo HLEN header_len = (hlen_e_reservado >> 4) * 4 flags = tupla_dados_tcp[5] flag_FIN = flags & 1 flag_SYN = (flags >> 1) & 1 flag_RST = (flags >> 2) & 1 flag_PSH = (flags >> 3) & 1 flag_ACK = (flags >> 4) & 1 flag_URG = (flags >> 5) & 1 flag_ECE = (flags >> 6) & 1 flag_CWR = (flags >> 7) & 1 window_size = tupla_dados_tcp[6] checksum = tupla_dados_tcp[7] urgent_pointer = tupla_dados_tcp[8] dados_tcp_header = {'Porta_Fonte':porta_fonte, 'Porta_Destino':porta_destino, 'checksum':checksum,'Payload_TCP': payload_ipv4[20:]} return dados_tcp_header def formato_tls_record(dados_tcp_payload): """ http://blog.fourthbit.com/2014/12/23/traffic-analysis-of-an-ssl-slash-tls-session """ TLS_RECORD_TYPE, TLS_VERSION, TLS_LENGTH, TESTE_HANDSHAKE_TYPE = struct.unpack('!BHHB', dados_tcp_payload[:6]) return TLS_RECORD_TYPE, TLS_VERSION, TLS_LENGTH, TESTE_HANDSHAKE_TYPE def formato_tls_hello_client(dados_tcp_payload): """ int.from_bytes(LENGTH_OBJ_BYTES, byteorder='big'), faz type casting ( conversão do tipo de dados), byte object para decimal, é necessário usar este método uma vez que o tamanho do campo Length são 3 bytes e o unpack não consegue desempacotar esse tamanho. Ver documentação: https://docs.python.org/3/library/stdtypes.htmler """ lista_cipher_suites = [] HandshakeType = dados_tcp_payload[5:] HANDSHAKE_TYPE, = struct.unpack("!B", HandshakeType[:1]) LENGTH_OBJ_BYTES = HandshakeType[1:4] LENGHT_DECIMAL = int.from_bytes(LENGTH_OBJ_BYTES, byteorder='big') VERSION, = struct.unpack('!H', HandshakeType[4:6]) RANDOM_32BITS = HandshakeType[6:38] HEX_RANDOM_32BITS = binascii.hexlify(RANDOM_32BITS).decode() SESSION_ID_LENGTH, = struct.unpack("!B",HandshakeType[38:39]) SESSION_ID = HandshakeType[39: 39 + SESSION_ID_LENGTH] HEX_SESSION_ID = binascii.hexlify(SESSION_ID).decode() CIPHER_SUITES_LENGTH, = struct.unpack("!H", HandshakeType[39 + SESSION_ID_LENGTH : 39 + SESSION_ID_LENGTH + 2]) ARRAY_OBJETO_BYTES_CIPHER_SUITES = HandshakeType[39 + SESSION_ID_LENGTH + 2 : 39 + SESSION_ID_LENGTH + 2 + CIPHER_SUITES_LENGTH] index = 2 while len(ARRAY_OBJETO_BYTES_CIPHER_SUITES) != 0: cipher_suite, = struct.unpack('!H', ARRAY_OBJETO_BYTES_CIPHER_SUITES[:index]) lista_cipher_suites.append(cipher_suite) ARRAY_OBJETO_BYTES_CIPHER_SUITES = ARRAY_OBJETO_BYTES_CIPHER_SUITES[index:] return HANDSHAKE_TYPE, LENGHT_DECIMAL, VERSION, HEX_RANDOM_32BITS, SESSION_ID_LENGTH, HEX_SESSION_ID, + \ CIPHER_SUITES_LENGTH, ARRAY_OBJETO_BYTES_CIPHER_SUITES, lista_cipher_suites def formato_tls_hello_server(dados_tcp_payload): """ int.from_bytes(LENGTH_OBJ_BYTES, byteorder='big'), faz type casting ( conversão do tipo de dados), byte object para decimal, é necessário usar este método uma vez que o tamanho do campo Length são 3 bytes e o unpack não consegue desempacotar esse tamanho. Ver documentação: https://docs.python.org/3/library/stdtypes.htmler """ HandshakeType = dados_tcp_payload[5:] HANDSHAKE_TYPE, = struct.unpack("!B", HandshakeType[:1]) LENGTH_OBJ_BYTES = HandshakeType[1:4] LENGHT_DECIMAL = int.from_bytes(LENGTH_OBJ_BYTES, byteorder='big') VERSION, = struct.unpack('!H', HandshakeType[4:6]) RANDOM_32BITS = HandshakeType[6:38] HEX_RANDOM_32BITS = binascii.hexlify(RANDOM_32BITS).decode() SESSION_ID_LENGTH, = struct.unpack("!B",HandshakeType[38:39]) if SESSION_ID_LENGTH > 0: SESSION_ID = HandshakeType[39: 39 + SESSION_ID_LENGTH] HEX_SESSION_ID = binascii.hexlify(SESSION_ID).decode() # Cipher suites só contém apenas uma ( analisar 2 bytes) #OBJETO_BYTES_CIPHER_SUITES = HandshakeType[39 + SESSION_ID_LENGTH : 39 + SESSION_ID_LENGTH + 2] CIPHER_SUITE, = struct.unpack('!H', HandshakeType[39 + SESSION_ID_LENGTH : 39 + SESSION_ID_LENGTH + 2]) return HANDSHAKE_TYPE, LENGHT_DECIMAL, VERSION, HEX_RANDOM_32BITS, SESSION_ID_LENGTH, HEX_SESSION_ID, CIPHER_SUITE else: pass def formato_application_data(dados_tcp_payload): TYPE, VERSION, LENGTH = struct.unpack('!BHH', dados_tcp_payload[:5]) BYTES_OBJ_ENCRYPTED_APPLICATION_DATA = dados_tcp_payload [5: 5 + LENGTH] HEX_ENCRYPTED_APPLICATION_DATA = binascii.hexlify(BYTES_OBJ_ENCRYPTED_APPLICATION_DATA) return TYPE, VERSION, LENGTH, HEX_ENCRYPTED_APPLICATION_DATA sock = socket(AF_PACKET, SOCK_RAW, ntohs(0x0003)) while True: raw_dados, addr = sock.recvfrom(65536) mac_destino, mac_fonte, ethernet_type, payload = ethernet_frame(raw_dados) # Se for 8 vem ai pacote IP \0/ if ethernet_type == 8: dados_ipv4_header = dados_pacote_ipv4(payload) if dados_ipv4_header['Protocolo'] == 6: dados_tcp_header = dados_pacote_tcp(dados_ipv4_header['Payload_ipv4']) if dados_tcp_header['Porta_Fonte'] == 443 or dados_tcp_header['Porta_Destino'] == 443: if dados_tcp_header['Payload_TCP']: tls_record_type, tls_version, tls_length, teste_handshake_type = formato_tls_record(dados_tcp_header['Payload_TCP']) if tls_record_type in TIPO_RECORD.keys() and tls_version in TLS_VERSAO.keys(): if tls_record_type == 22: print("##### TCP PAYLOAD (TLS) #####\n") print("TCP Checksum: {}".format(dados_tcp_header['checksum'])) print("TIPO: {}".format(TIPO_RECORD[tls_record_type])) print("VERSÃO: {}".format(TLS_VERSAO[tls_version])) print("LENGTH: {}".format(tls_length)) if teste_handshake_type == 1: (HShake_type, HShake_length, HShake_version, HShake_random_32bit, HShake_session_id_length, HShake_session_id, HShake_cipher_suites_length, HShake_array_ob_bytes_cipher_suites, HShake_lista_cipher_suites) = formato_tls_hello_client(dados_tcp_header['Payload_TCP']) print("#####(TLS) HANDSHAKE PROTOCOL #####") print("TIPO: {}".format(TIPO_HANDSHAKE[HShake_type])) print("LENGTH: {}".format(HShake_length)) print("VERSÃO: {}".format(TLS_VERSAO[HShake_version])) print("32-bit Random: {}".format((HShake_random_32bit))) print("Session id length: {}".format(HShake_session_id_length)) print("session id: {}".format(HShake_session_id)) print("Cipher suites length: {}".format(HShake_cipher_suites_length)) print("Cipher Suites({})".format(len(HShake_lista_cipher_suites))) for C_Suite in HShake_lista_cipher_suites: if C_Suite in TIPO_CIPHER_SUITE.keys(): print(TIPO_CIPHER_SUITE[C_Suite]) else: print(C_Suite) elif teste_handshake_type == 2: (HShake_type, HShake_length, HShake_version, HShake_random_32bit, HShake_session_id_length, HShake_session_id, HShake_cipher_suite) = formato_tls_hello_server(dados_tcp_header['Payload_TCP']) print("#####(TLS) HANDSHAKE PROTOCOL #####") print("TIPO: {}".format(TIPO_HANDSHAKE[HShake_type])) print("LENGTH: {}".format(HShake_length)) print("VERSÃO: {}".format(TLS_VERSAO[HShake_version])) print("32-bit Random: {}".format((HShake_random_32bit))) print("Session id length: {}".format(HShake_session_id_length)) print("session id: {}".format(HShake_session_id)) print("{}".format(TIPO_CIPHER_SUITE[HShake_cipher_suite])) elif tls_record_type == 23: print("#### APPLICATION DATA ####") (application_data_type, application_data_version, application_data_length, hex_application_data_encripted)=formato_application_data(dados_tcp_header['Payload_TCP']) print("Type: {}".format(application_data_type)) print("Version: {}".format(TLS_VERSAO[application_data_version])) print("Length: {}".format(application_data_length)) print("Encrypted Application Data: {}".format(hex_application_data_encripted))
  12. Olá @kassane tudo bem, o projeto que tu estás a indicar ele segue precisamente o caminho que eu não quero, eu não quero usar este tipo de utilitários do sistema, e como podemos ver no código do projeto em questão: def set_interface_mac(self, device, mac, port=None): """ Set the device's mac address. Handles shutting down and starting back up interface. """ # turn off device & set mac cmd = "ifconfig {} down hw ether {}".format(device, mac) subprocess.call(cmd.split()) # turn on device cmd = "ifconfig {} up".format(device) subprocess.call(cmd.split()) ele está a criar sub-processos, auxiliado com o programa " ifconfig ", eu quero ir um pouco mais fundo do que isso, aquilo que ele faz, isso eu já sei fazer qualquer das formas obrigado por mostrar esse projeto pode servir para outras coisas, nunca se sabe, tirar uma ideia... @Fernando Mercês obrigado pelas dicas com certeza vão ser muito úteis, na escolha do caminho a seguir, quando tiver pronto eu deixo ai o resultado, mas ainda vai demorar um bocado eu tenho outras prioridades no momento e não tenho cabeça para tudo, mas já vai dar para tentar desenhar uma estratégia de estudo e material a reunir, provavelmente vou ter que cair em cima do código do programa " ip ", para analisar isso melhor. Acho que vai ser interessante ficar a perceber como realmente funciona até para futuras ferramentas ou scripts que possam surgir... a estratégia de usar subprocess do python é um pouco primitivo, temos que refinar um pouco mais isso... Obrigado, abraço.
  13. @fredericopissarra não sei se me fiz entender bem. O que eu quero é fazer um script em C ou em python que altere o endereço MAC, e também não quero usar bibliotecas para executar comando do sistema, na realidade por motivos educacionais quero fazer a alteração do MAC diretamente na memória ( se for essa forma ). No exemplo que tu usaste com programa " ip " onde é que ele está a fazer essa alteração quando executamos o comando mencionado ? quando iniciamos o sistema o endereço que pertence à placa de rede deve ficar numa memória qualquer sem ser alterado, certo? onde? Questões a ponderar são: A alteração desse endereço deve ser feito ( " reescrito " ), na memória? Se deve ser "reescrito" na memória em que memória deve ser feita essa alteração? Se a opção for "reescrever" na memória riscos envolvidos nisso?
×
×
  • Create New...