Transcrição do áudio
Agora, chegou a hora de um ataque muito mais sofisticado. Por quê? O seguinte, inúmeros ataques só são possíveis porque os hackers são pessoas dotadas, naturalmente, aqueles do ataque, dotados de muito conhecimento. Não todo hacker é dotado de conhecimento. Vimos, inclusive, um hacker brasileiro muito famoso, entregue por um bem-te-vi, que disse que você não precisa ser programador, é só comprar o curso dele, não precisa aprender a programar. O curso aqui, no curso hacker, ele não é um curso, gente. Ele é uma filosofia. Ele é a sua vida. Se você reparar, meu próprio canal também, ele é a vida do hacker. Essa é a ideia que eu passo para vocês. Então, você sim tem que saber programar. Legal? E aí eu coloco muitas coisas para você na internet. Coloco livros, vídeos, cursos, vídeos gratuitos, notícias, para você viver isso. Tem um livro interessante, então agora eu vou mostrar para você esse papo. Tem esse livro interessante aqui, desse autor Zé Ruela, que eu não conheço, nunca ouvi, nem mais gordo, nem mais magro. Nem mais magro, talvez. Você vai vir aqui no tópico de recursividade. Legal? Vamos entender como é feita uma chamada de um procedimento local por um processo. Então, um processo... Esse livro aqui é muito zoeira. Eu já pensei em colocar uns gremlins aqui, uns trecos assim. Legal? Tem um tópico interessante, isso aqui. Legal. Legal. Legal. Legal. Isso aqui é importante. Beleza? Vamos falar um pouco aqui sobre o Stack Overflow e como são feitas chamadas de métodos internos ou funções internas de um processo. Para você entender o que é RPC. Vamos chamar de procedimento local. RPC, procedimento remoto. Aqui no livro vamos chamar de procedimento local, enquanto eu explicar aqui para você. Legal? Então, no local, nós temos um programa executável. Não é provavelmente uma linguagem de máquina. Nós temos um número mágico, informando que esse arquivo tem que ser executado. Então, quando você carrega esse cara na memória, por ele ter um número mágico, ele é montado de uma certa forma, na estrutura, sim. Beleza? Texto. Entenda-se texto como o código em linguagem de máquina. Beleza? A parte de dados. Dados estáticos, constantes, globais, entre outras coisas. E aí você tem a memória RIP, onde variáveis são criadas. E você tem a stack, onde métodos são empilhados. É aqui que nós temos que brincar. Legal? Então, sempre que você está em um programa e você chama, naturalmente, quando você chama uma funcionalidade, e recursividade é interessante. É interessante porque isso aparece aqui no livro de estrutura de dados em recursividade. Porque recursividade você fica chamando métodos ou, se eu tivesse estruturado, funções. E aí ele fica chamando. E aí ele fica empilhando aqui na stack os procedimentos locais. Vou repetir. Procedimento local. Ele fica empilhando aqui. Essa stack tem a tendência de crescer para o lado azul aqui. Bom, stack overflow acontece quando essa área azul acaba. Esse é o papo. Legal? Desculpa. Quando essa área azul acaba, e eu vou abrir um novo procedimento local. Aí dá um stack overflow. Beleza? Tem essa jogadinha mágica aí. Então aqui ficam os procedimentos sendo carregados localmente aqui. E sempre que teu código ele executa, sempre que teu código ele executa, quando você chama um procedimento, e ele vai ser empilhado aqui, em uma coisa chamada stack frame, cara. Onde você vai ver isso? Essa teoria. GitHub. Do não importa. Beleza? Caracas, vou abrir o meu GitHub para vocês verem. Puta que pariu, hein? Ainda bem que não mostra muita coisa, né? Essa paginazinha. Pega meu livro aqui. Nesse livro, nesse livro, você vai no capítulo de memória. Pega esse livro, vai no capítulo de memória. Se não falha a minha memória, a piadinha, é o capítulo 8. E aí eu vou falar sobre stack frame. Como que os procedimentos são empilhados localmente na máquina. Beleza? Tá bom. Show de bola. Então você vai entender como que o procedimento local é feito, quando você chama a função, a função só para executar da outra, porque é um stack. Stack frame de, do, do procedimento. Legal. E aí você vai pegar esse livro aqui, livro, ó, ah, Tannenball Redes de Computadores. Lembrando que qualquer tipo de pirataria é crime, tá? Por isso que eu, dou meus livros aqui de graça para vocês, e eu mesmo escrevo os livros, para não recomendar pirataria e ter problema com pirataria, tá? Já vou falar isso porque eu vou entrar, na busca de livro do Tannenball aqui. Eu não sou louco de clicar nesse link aqui, que é o primeiro link do Google, repare, o primeiro link do Google, é a pirataria em si. Tá aqui. É a, acho que é a edição 6, ó. Nesse livro, preste atenção, nesse livro, você vai procurar no capítulo, de camada de transporte. Camada de transporte. Quando ele estiver falando do protocolo UDP, ele vai falar sobre chamada de procedimento remoto. Beleza? Então vamos ver se eu puxo aqui um terminal aqui. Colo. Colo. Paint. Sim. Eu nem sei porque eu disse sim. Eu nem sei porque ele me perguntou, eu não li. Pô, dá sim. Ah, tô sacaneando, cara. Geralmente eu erro color paint. Cara, isso eu acho um risco fudido do Kali Linux. Eu acho essa a maior merda que o Kali Linux inventou de fazer. Quando você chama um programa e ele não tá, ele chama a instalação. Cara, você não faz ideia. Cara, você não faz ideia. Você não faz ideia do risco de um pacote com uma letra trocada malicioso ali dentro pode fazer uma desgraça na vida das pessoas. Eu não entendo porque o Kali Linux fez isso. Eu não entendo. É justamente uma ferramenta para hackers experts. Eu não entendo, cara. Confesso que eu não entendo. Vamos esperar a instalação que eu quero desenhar pra vocês. Legal. Vamos rodar o color paint aqui. Aqui o color paint. Então vamos lá. Então quando eu tenho a montagem do procedimento, certo, que eu tenho que ocupar de código. Aqui eu tenho a heap e eu tenho a stack. A heap não me importa nessa aula. Não importa, né? Texto. Então vamos colocar heap e nós vamos colocar a memória, aqui a stack. A stack. Então a stack ela é empilhada assim. Sempre que você chama um código, uma função, tipo, vou chamar mem. Certo? E aí ele coloca aqui. Aí mem chama uma função chamada soma. Soma chama função chamada valida. E aí eu vou, naturalmente, crescendo a minha stack assim. Legal? Então por que que o soma nunca executa? O soma nunca executa... Quer dizer, o soma não está em execução aqui porque a função valida está na cabeça da stack. Enquanto ele não terminar essa, ele não participa dessa stack. Ele não volta para essa. Enquanto ele não terminar essa, ele não volta para essa. Então, primeiro eu venho empilhando, processando, jogando o resultado na memória. O que que você acha que tem? Int como retorno. String como retorno no teu código. Void como retorno. Porra, void é retorno, cara. Retorno na memória. Então aqui nós temos a memória, né? Então, sempre que você tem o retorno, ele joga alguma informação aqui. Legal? Depois que ele joga uma informação na memória, que é o return. É o return. Então, ele... Cadê onde eu consigo apagar esse negócio? Depois que ele volta com o return, ele apaga. Pegou a jogada? Ele apaga. Aí ele volta a executar o soma. Soma provavelmente acessa esses valores de memória e tudo mais. Quando o soma termina a sua execução, aí o soma joga na memória alguma coisa, que é o return. E aí ele apaga esse cara aqui. Legal? Apaga esse cara aqui. E aí o programa voltou pro main. Voltou com o main, com os resultados dos returns. Beleza? Tranquilo. O que que os caras bolaram? Tá lá no livro do Turnable. O que que os caras bolaram? Os caras bolaram o seguinte. Ó. Eu tenho aqui o meu programa, certo? E aqui dentro, na parte de código, eu vou colocar agora código, tá? Eu vou colocar uma biblioteca, uma skeleton, uma biblioteca, chamada de biblioteca de RPC. Vou chamar assim, tá galera? Pra vocês entenderem. É RPC. Chamada biblioteca de RPC. Legal? Legal. E aí eu empilho o main lá em cima, como diz o exemplo. Legal. Só que o soma, o soma, ele tem um cálculo da Receita Federal. Você acha que a Receita Federal vai deixar o cálculo dele exposto? Não, né? Vai ser feito aonde? Ah, vai ser feito aonde? Eu vou fazer o seguinte, galera. Imagina que aqui é o... Eu vou até colocar aqui, client. E aqui o server. Legal? E no meio tá a rede. O que que vai acontecer? O main, quando ele chamar o soma, o main, quando ele chamar o soma, na verdade, o soma, ele é um esqueleto, vamos colocar assim, e, na verdade, ele vai chamar o código do RPC pra ser encapsulado ali dentro. Legal? Esse código do RPC, ele faz uma coisa que tá lá no livro de sistemas operacionais modernos. Cara, lá vamos nós para o quarto livro, gente. Tá? Escrevi errado? Não sei. Cara, eu não vou clicar nesse link aqui. Eu não vou clicar nesse link aqui. E provavelmente a pirataria, já falei que pirataria é crime. Aqui, ó, esse livro aqui. Legal. Esse livro vai falar o seguinte pra você no capítulo de processos. No capítulo de processos. É que ele foi reescrito, dependendo da versão que você pega do livro, capítulo de processos tem números diferentes. Posição diferente. Legal. Então, vamos lá. Ele diz o seguinte, que o seu processo tá em execução, certo? Se você chama algo bloqueante, se você chama algo bloqueante como um dispositivo de entrada e saída, como uma placa de rede, não é? Por exemplo, um disco. Ele vai para a fila de bloqueados. Legal? Ele vai ser mandado para a fila de bloqueados. Então, ele sai da execução e vai pra fila de bloqueados. Quando o seu processo cliente, ele chama o RPC, o RPC, ele aciona essa jogadinha. Beleza? E ele vai esperar uma interrupção do sistema operacional. Tá lá no livro de sistemas operacionais modernos, que é uma interrupção. Agora, você vai pegar o livro do Morimoto. Morimoto Hardware. Você tá em que livro mesmo? É, né? Eu não vou clicar, tá? Eu não quero cair em pirataria. Tu vai me pegar esse livro aqui. Um, dois, três, quatro, cinco. Cinco livros já. Pros babaquinha que diz que você não tem que saber nada. É só comprar um curso, idiota, e você vira hacker. Não. Ó, interrupção. Beleza? Vai chamar interrupção. Da interrupção do IRQ. Por isso que eu chamei o Morimoto. IRQ. Da placa de rede. Beleza? Então, quer dizer o seguinte. Que o processo cliente, ele vai ficar bloqueado. Enquanto não chegar uma interrupção do IRQ do sistema. IRQ da placa de rede. Pra ser tratado. Beleza? Legal. Quando chegar isso, preste atenção. Quando chegar isso, então o processo ele sai de bloqueado. Ele vai pra fila de pronto. É um array. É um array isso aqui. E quando chegar o momento certo, ele vai pra fila de execução. E aí ele fica aqui, ó. Execução. Enquanto ele tá no procedimento local. Enquanto ele tá processando o local. E não tá usando dispositivo de entrada e saída. Ele fica aqui, ó. EIP. EIP. EIP. Precisou de algo bloqueante. Bloqueante. Depois da interrupção, pra P. E ele fica nesse papo aqui. Beleza. Então vamos lá. Agora que eu relembrei os senhores desse papo. Os caras que falam que você não precisa de aprender e estudar, né cara? Muito ruim os caras. Então quando você chama o RPC. Uma chamada de procedimento remoto. O teu processo. Ele tem um skeleton. Tem todo um código. Que ele faz com que esse seu processo cliente ele cai na fila de bloqueado. E esse RPC dispara contra o RPC do server. Uma chamada de procedimento lá. Olha que louco. Olha que louco, cara. Ele dispara lá. E a soma vai ser executada aonde? Lá no server. Legal? Beleza. E aí eu falei pra você que quando a soma termina. Ele retorna pra memória. Pelo return. Lembra do return? Então vamos colocar de verde aqui. Ele vai jogar pra memória. Beleza. Pra uma pequena memoriazinha lá. A informação. E isso aqui vai ser usado pelo RPC. Pra retornar pela rede. E... Foi mal galera. Deu uma escorregada no kibe aqui. Escorreguei no kibe. Aí ele retorna. Na hora que ele retorna pro RPC. É o IRQ que estava sendo chamado. A placa de rede. E uma interrupção. IRQ 8. Placa de rede. Tô chutando um número aqui, tá galera? Interrupção. Do processo número 500. Aí opa. Aí vai vir a troca de contexto. O schedule que faz a troca de contexto. Pega o processo cliente. Pega o processo cliente. Tira ele da fila de bloqueado. Coloca ele na fila de pronto. Então magicamente. Preste atenção. Magicamente. Vou dar um CTRL Z. Quando o cliente acorda desse papo todo. Cara, vou ter que dar um CTRL Z aqui. Quando o cliente acorda desse papo todo. Adivinha. Ele acorda assim sabe. Tá lá a resposta. Ele nem sabe o que aconteceu. Ele dormiu. Toda a resposta foi construída. Chegou a resposta. E ele acordou quando a resposta chegou. Ele continua o processamento dele. De main. Isso é o RPC. Então o sistema operacional tá lotado de RPC. É por isso que é bom saber programar. É por isso que é bom saber programar. Conforme eu mostrei pra vocês. Inúmeros livros pra ler. Você tem que aprender a programar. Você tem que aprender tudo. Nós estamos num mundo hacker. O mundo hacker é o mundo do conhecimento. É o mundo do dia a dia e do conhecimento. Não tem um papinho de um curso não. Não adianta também você vir comprar meu curso. E deixar ele lá. Sem acessar. Não me acompanhar. Até nos vídeos gratuitos. Não ler meus textos também. Não adianta. É sua vida agora. Sua vida é me acompanhar e outros hackers também. Você pode acompanhar hackers como por exemplo. O coach de Osasco. O Penegui. Você pode acompanhar vários hackers fodas. O Slack Jeff. Acompanha esses caras. Legal. Viram o papo da RPC? Caracas que viagem. Eu achei que era só um RPC. Era só executar um comandinho. Não cara. Então vamos para nossa prática. Agora que nós vimos tudo isso. Nós temos capacidade de entender. O que está acontecendo lá no sistema operacional. E tentar localizar falhas. Então inúmeros sistemas. Inúmeras bibliotecas. Inúmeros processos. Dentro de um sistema operacional. Possuem RPC. E o Samba é um desses. E esse Samba. É extremamente vulnerável. E esse Samba. Tem usuários convidados. Se eu tenho usuário convidado. Há grande chance de eu conseguir. Explorar esse tipo de. Vulnerabilidades. Algum tipo de vulnerabilidade lá. Eu posso conseguir localizar lá. Beleza. Então vamos usar um comando chamado. RPC client. Que é um comando genérico de RPC. Ele é. Um comando clássico. Ele não é do mundo hacker. Então o rastro. Dele. Não é tão perceptível. Como o rastro de um comando do mundo hacker. Pegou a jogada. RPC client. Tem dois C's. Esse é o comando. E aí nós dizemos. Legal. Nós vamos nos conectar. Usuário. Vamos tentar utilizar um usuário genérico. Tentar ser um usuário. Praticamente. Tipo um bypass. Poderia se chamar isso de um bypass. Contra o 10. 137.0.24 O traço N galera. Ele é um argumento. De acesso do Samba. Então agora nós vamos. Encontrar talvez alguns argumentos para Samba. E outros para o próprio comando. RPC client. O nosso comando. Que nós vamos executar. É o enundouusers. O que é enundouusers? Lembra que eu falei para vocês. Que ele executou remotamente. O tal do soma. Preste atenção. O cliente não criou uma função soma. E injetou no server. Não. Soma já era uma função que estava lá. Então nós. Só invocamos o soma. Então quer dizer que o sistema operacional. Possui muitas funcionalidades. Que estão lá. As vezes no sistema operacional. E as vezes no processo alvo. Nosso. Que no caso é o Samba. O Samba tem o enundouusers. Para fazer numeração de usuários. E se eu conseguir. Sem nenhum tipo de usuário. Tipo um. Não vou dizer bypass. Mas é bem parecido com isso. E ele me responder. Ele vai começar a me trazer. Usuários que existem lá. Eu tenho duas charadas para matar. Usuários. E senhas. Se eu conseguir. Ah mas ele só roubou os usuários. Matou a primeira charada. Para ele já é importante. Eu sei que nós temos dois usuários agora. O RPC está aberto meu amiguinho. Agora. Dependendo da permissão de acesso desses caras. Nós podemos ser Deus. Ou nós podemos ser plebeus. Agora é que nós vamos tentar entender isso. Como assim? Vai lá no meu livro. De Linux. Vai lá no meu livro de Linux. Nesse livro aqui. Vai no capítulo de usuários. Vai aonde eu explico. ETC para WD. E aí eu explico sobre a questão. Do UID do cara. Do processo que ele pode. Do Shell que ele pode executar. Também faz o seguinte. Avance nesse material. E leia sobre grupos. Sobre a questão dos. Do grupo. Os admins. Roots e tudo mais. Beleza? Volta agora aqui. Nossa o alvo é fácil coleguinha. Foi essa brincadeira aqui. Que foi assim. Minha primeira captura de flag assim daorinha. Que eu gostei para caralho. RPC cliente. Só que o professor não esperava essa vulnerabilidade. Ele não tinha montado isso. Traço N. Traço do usuário. Asterisco. Beleza? Agora vamos pegar o alvo 10.137. E 0.24. Beleza? Tá bom. E o comando agora que eu vou executar. Eu quero um query domain info. Eu quero obter informações ali. A visão de domínio daquele servidor. Vamos tentar entender os. Os papéis ali. Que nós encontramos ali. Então vamos lá. E aí. Query. Query domain. É aqui é meu grande problema. Info. De agora que eu seja super usuário aqui. Tá ali. Do meu computador gente. É do meu computador. Porque eu abri um pipe de retorno. Ele deu problema. Com SMB versão 2. Cara. Olha. Eu esperava outro assunto aqui agora. Galera. Cometi um erro aqui tá. Além do domain info. É N maiúsculo. E aqui nós temos então. Dois usuários. E desses dois usuários ali. Nós temos naturalmente. Ele é um servidor de arquivo. E ele tem ali um. Tipo um domínio local ali. Onde nós podemos acessar. Ele não tá ligado a nenhum. A nenhum AD. Isso é ruim. Seria muito bom se ele tivesse ligado a um AD. Se ele tivesse ligado a um AD. Então eu conseguiria naturalmente. É. Eu conseguiria naturalmente. Como eu posso dizer. É. É ter acesso a alguns recursos mais avançados. Legal. Tá bom. Agora o nosso próximo passo. É fazer o seguinte. Vamos voltar a fazer o enum. Vamos voltar aqui a fazer o enum. Olha eu errei ali. O domain info ali errado né. Vacilo hein. Vamos pegar o enum. Users. Vamos pegar um usuário. Então os usuários são locais daquela máquina. Os usuários não são de domínios. Claro pra mim aqui que ele não é de domínio. Tá claro pra mim que ele não é de domínio. Ele é do workgroup. Ele é de domínio da máquina. Mas ele é um servidor de arquivos. E o nome dele é FileServer. Beleza. Da máquina não. Da máquina se chama Debian. É o serviço. E agora vamos tentar por exemplo. Pegar aqui algum desses usuários aqui. E começar a tentar. Obter alguma query. Desses usuários. Então vamos pegar aqui o primeiro usuário. Que seria então. RPC cliente. Traço N maiúsculo. Traço U. Beleza. Tentar sem. Passar credenciais de usuário. Vamos usar isso aqui né galera. Não é mais simples. Bom. Até o momento. Aspas simples. Aspas simples. Porque o comando não tinha espaço. Agora query. Agora eu vou precisar. Query user. E agora eu coloco. Qual desses usuários eu quero. Eu vou usar o usuário 0x3e8. E aí eu vou disparar. Legal. Então ele é o usuário. Fsadmin. Ele é um usuário FileServer. Aqui eu tenho. O logon time dele. Logoff time dele. Dados de quando ele alterou o password. Entre outras coisas. Já começamos a entender. Por que. Olha só. Por que que você vai invadir um usuário que é ativo. Você tenta primeiro invadir os usuários que não são ativos. Pega o password. Desculpa. A última vez que ele. Logou. O tempo de password. Três anos atrás. Vai atrás de data leak. Por aí na internet. Ah não. Ele trocou a senha dele. Há dois meses atrás. Você vai perder seu tempo indo atrás de data leak. Sério mesmo. Então aqui nós temos algumas informações. É. Já dá para. Já dá para agora. Começar a conhecer o nosso. Usuário. Agora uma coisa interessante. Lá dentro. Ele tem o home dir. Esse aqui é o diretório dele. Dentro do servidor de arquivos. Nós talvez conseguiríamos. Acessar esse cara. Ali. Poderia ser uma força bruta. Poderia também. Deixa eu ver. Olha o password. Aqui fala sobre password. Repara. Todo o trabalho dele de password foi recente. Password dele em listas. É difícil. Então provavelmente nós vamos. Ter que tratar isso. Ou uma força bruta. Ou fazer uma engenharia. Para tentar fazer uma lista de possíveis. Password do sujeito. Então vamos lá. Vamos tentar entender. Essa política de senha. Que nós podemos fazer. A política de senha. Ele está no getdom. Né. Pwinfo. Lembrando. Lembra que eu falei de soma. Que era uma função. Isso que eu estou chamando aqui. São funções. Existe um sistema função. Query user. Aquela getdomaininfo. Getdomainwp. Pwinfo. Está tudo lá. Está tudo no sistema. Então o que você tem que fazer. Ler sobre o serviço. Sobre o sistema operacional. Que são outros livros além disso aqui. Porque eu coloco só o que é. Básico aqui. Para a gente brincar. O que é normal. Getdomain. Lá vai eu errar de novo. Cara é aquele negócio. Eu estou com domain na cabeça. Dom de domain. Pwinfo. E a complexidade desse password. Primeira coisa. Password mínimo. Cinco caracteres. E nenhuma complexidade. Exigida. Desse password. Das pessoas. Cara isso aqui. Ou seja. O cara coloca o que ele quiser. Se ele quiser colocar um 20456. Ele coloca. Você também tem. Se não falha a memória. Deixa eu dar uma olhada aqui. É. Então vamos lá. Eu vou adicionar para vocês. Dois links no livro. Esse link aqui. E esse link aqui. Esse link aqui. Ele tem os principais comandos. Baseado no. SAMS Instituto. Para certificação cara. Aqui você tem todos os comandos RPC. E parâmetros esperados. Só que esse cara documenta assim. Igual a bunda dele sabe. Igual a bunda dele. Essa é a verdade. Então você vai encontrar aqui. CTRL F. DOM. PWINFO. Aqui PWINFO. É a questão de. Ele retorna a questão de password. Informações de password. Não do password. Informações sobre o password. Aqui por exemplo. Nós estamos vendo aqui alguns exemplos. GET USR DOMAIN. Do usuário 1000. Aqui foi minha cagada. Acho que é. Então GET USR. Vai precisar dar aspas simples. Do usuário 1000. Vamos ver se ele retorna. Não é garantido não. Minimum password 5. Item 5. Propriedades. Zero complexidade. Zero tudo. É questão de. Ser obrigatório. De. Passwords idiotas. Que tem que ter letras. Números. Ou seja. Complexidade nada. O cara coloca o que quer. E isso aqui. É a mesma informação desse aqui. Só que aqui é mais bonitinho. E aqui então eu vou adicionar. Na edição 10. O livro. Então hoje 9. Na edição 10. Já vamos ter. Esses carinhas aqui. Esses dois links. Um que é a lista total de RPCs. E aqui são os principais RPCs usados. Pela galera. Que dá manutenção. Por RPC em SMB. Eu acho que vale a pena. Não é da treva. Isso aqui é da luz. Mas nós podemos utilizar isso. Beleza. Próximo vídeo. Nós vamos tentar algumas credenciais. Vamos tentar bater aqui nesse negócio. A próxima. Próximo vídeo. Já vamos estar na edição 10 do livro. Mas tchau. Desculpa os erros. Até mais tchau.