Jump to content

gnoo

Membros
  • Content Count

    157
  • Joined

  • Last visited

Everything posted by gnoo

  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?
  14. Para além das dúvidas deveria ser uma área onde se FALASSE de assembly na área da programação os tópicos ficariam diluidos. Até porque este fórum tem foco na área de engenharia reversa e para mim ( apesar de não perceber nada do assunto ) não me faz muito sentido falar de engenharia reversa sem falar de assembly enrre outras coisas, especialmente quando o foco são iniciantes.
  15. Saudações, Eu queria tentar fazer um "mac changer", e tenho lido algumas coisas que me indicam que o mac poderá ser alterado na eeprom, eprom, talvez... Mas não compreendi muito bem. Alguém sabe como isso é feito na prática?
  16. Saudações, Falta uma área no fórum para conteúdo relacionado com assembly que é a base dos treinamentos do mente binária, e não se está a dar a devida atenção a essa matéria.
  17. Eu também faço o mesmo, não com assembly porque não tenho interesse ( pelo menos por agora ), ter várias fontes de informação é benéfico na maioria das vezes, o ponto de vista que eu quero deixar aqui tem a ver com a falta de objetividade ( na minha opinião ) em relação ao conteúdo que pode ajudar um individuo que queira iniciar ou complementar os seus estudos nessa área. Tópicos deste tipo devem ser pensados para disponibilizar informação de forma objetiva sobre um determinado tema, para fazer um "apanhadão" de assembly um utilizador não precisa vir aqui para encontrar fontes de informação, basta que abrir o seu browser preferido num motor de busca qualquer e fazer uma busca por " livros assembly PDF". Um tópico sobre assembly para ser entendido como um guia através da informação que nele é disponibilizado deve ser pensado de forma a que um iniciante obtenha a informação necessária e repito outra vez OBJETIVA em relação a como iniciar estudos nessa área, tem de haver um guia que seja consensual e prático ( no sentido de entendimento fácil ), para quem obtem essa informação. Exemplos: Como obter informação sobre o nosso processador ? Como escolher a versão ou tipo de assembly a usar mediante o processador que temos na nossa máquina ? Como obter informação sobre arquitetura de de computadores ( ULA, registadores, cache, barramentos, etc), fontes com informação objetiva, de linguagem simples ? Onde ir buscar informação sobre a arquitetura que vamos usar? É isso que uma pessoa que se inicia nesta matéria precisa... eu até acredito que os livros tragam alguma informação nesse sentido, mas será suficiente? não sei talvez ( eu não percebo nada disso)... NOTA: Eu não estou a pôr em causa o conteúdo deste tópico nem a fazer uma depreciação da participação dos seus intervenientes. Eu só acho é que se é para falar, que se fale realmente de assembly... exemplos, conceitos, demonstrações... não me parece que despejar aqui 30 gb de PDF's vá acrescentar alguma coisa.
  18. Eu acho que a solução não seria fazer um "apanhadão" de livros de assembly, mas sim quais são os melhores livros recomendados de forma consensual ( entre aqueles que estudam essa matéria ), ou seja, quais as fontes mais vezes citadas entre a comunidade ( pessoas que REALMENTE têm conhecimento de causa ). Eu também sei que as pessoas aprendem de formas diferente, e em ritmos diferentes, e o material de estudo para uns não é o melhor para outros e que o assembly segundo ouvi dizer "por aqui e por ali", tem varias versões e características diferentes... mas ... Eu há uns tempos também andava atrás de livros de redes feito louco à procura do livro que me iria abrir os olhos para o mundo e iluminar o meu caminho, e essas coisas poéticas que se costuma dizer, mas a realidade é que mesmo de uma forma diferente eles dizem mais ou menos a mesma coisa. Então o que eu fiz foi escolher dois que achei interessantes e comecei a estudar a matéria. Isso de andar à procura de PDF's a olhar o "table of contents" do livro a pensar "é mesmo este, é mesmo este", a ser redireccionado de página para página e os recursos da tua rede a serem utilizados pelo site em que estas a fazer o download não se sabe bem para quê, não é proveitoso em vez de um estudante de assembly passas a ser um caçador de livros profissional, com 10 gb de PDF's no disco e não leste nenhum deles em condições. Eu também já tive o hobby de caçar PDF's eu tenho à vontade uns 15 gb de PDF's que nunca li.
  19. Vocês levam mais tempo à procura de livros do propriamente a estudar a matéria ☺️
  20. Saudações, Este conteúdo está sujeito a erros de interpretação por parte da minha pessoa, se vires algum erro ou achas que tens algo a acrescentar deixa nos comentários para ser corrigido/adicionado... Os conceitos de redes aqui apresentados foram retirados desta página: https://tools.ietf.org/html/rfc792 Para complementar a informação da página acima indicada deve ser lido este ou outro livro da especialidade: NOTA: O script em python que aqui é apresentado apenas suporta os seguintes TIPOS de mensagem: TIPO 8 TIPO 0 TIPO 11 SCRIPT COM PYTHON #coding:utf-8 #!/usr/bin/env python3 from socket import * import struct import binascii ICMP_TYPE_NUMBERS = {8:'Echo request (8)', 0:'Echo reply (0)', 11:'Time Exceeded (11)'} 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): tupla_dados_ipv4 = struct.unpack("!BBHHHBBH4s4s", payload[: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 = {'Versão':versao,'Tamanho do Header':tamanho_header, 'Tipo de Serviço': tipo_servico, 'Tamanho Pacote':tamanho_total, 'Identificação':identificacao, 'Fragmento':offset_fragmento, 'TTL':tempo_vida_ttl, 'Protocolo':protocolos, 'Checksum':checksum_cabecalho, 'IPv4 Orivgem':ip_origem, 'IPv4 Destino':ip_destino} return dados_ipv4_header, payload[20:] def mensagem_time_exceeded(payload_ipv4): tupla_dados_icmp = struct.unpack("!BBHi", payload_ipv4[:8]) print("Type: {} \nCode: {}\nChecksum: {}\nUnused: {}".format(ICMP_TYPE_NUMBERS[tupla_dados_icmp[0]], \ tupla_dados_icmp[1], tupla_dados_icmp[2], tupla_dados_icmp[3])) header_pacote_ipv4, _ = dados_pacote_ipv4(payload_ipv4[8:29]) print("{}\n".format(header_pacote_ipv4)) def icmp_header(tupla_dados_icmp): print("Type: {} \nCode: {}\nChecksum: {}\nIdentifier (BE): {}\nSequence Number (BE): {}\n".format(ICMP_TYPE_NUMBERS[tupla_dados_icmp[0]], \ tupla_dados_icmp[1], tupla_dados_icmp[2], tupla_dados_icmp[3], tupla_dados_icmp[4])) def dados_pacote_icmp(payload_ipv4): tupla_dados_icmp = struct.unpack("!BBHHH", payload_ipv4[:8]) if tupla_dados_icmp[0] == 8 or tupla_dados_icmp[0] == 0: icmp_header(tupla_dados_icmp) elif tupla_dados_icmp[0] == 11: mensagem_time_exceeded(payload_ipv4) else: pass sock = socket(AF_PACKET, SOCK_RAW, ntohs(0x0003)) while True: raw_dados, addr = sock.recvfrom(65536) mac_destino, mac_fonte, protocolo, payload = ethernet_frame(raw_dados) # A variavel (protocolo) está a referir-se ao # tipo de frame # Se for 8 vem ai pacote IP \0/ if protocolo == 8: dados_ipv4_header, payload_ipv4 = dados_pacote_ipv4(payload) if dados_ipv4_header['Protocolo'] == 1: dados_pacote_icmp(payload_ipv4)
  21. Existe alguém no mundo que ainda use windows ??? Temos que salvar essas pessoas rapidamente... = |
  22. O meu conhecimento de redes também não é grande coisa, mas vai-se aprendendo aos poucos :)
×
×
  • Create New...