Transcrição do áudio
É, coleguinha, você deve conhecer o tal do NetCatch. NetCatch é uma ferramenta muito utilizada no mundo hacker para backdoors e transmissão de arquivos na rede. O livro traz um NetCatch dele no capítulo 2, logo no começo. Só que eu achei muito fraco, decidi aqui dar uma melhorada nele. Então vamos lá. Vou precisar de importar o SIS para finalizar a execução. Quando você coloca SIS.edit, por esta atenção, todas as threads da caixa de areia são destruídas. Se você só colocar exit, as threads não são destruídas. Por isso que nós precisamos do SIS, pois nós vamos trabalhar com threadings. Nós vamos precisar do socket, o socket para transmitir dados entre processos. Já falei para vocês e já dei a teoria para vocês sobre IPC. Get OPT. Ou seguir o livro, mas eu não acho legal. O melhor é o que está lá no meu livro hacker. Se você for no GitHub, no Não Importa, lá em Book, você vai encontrar o que? No meu livro, você vai ver depois disso tudo aqui. O argpars. O argpars é uma forma profissional de tratar argumentos de execução. O que é um argumento de execução? Vamos lá. Então eu estou aqui e coloco LS, traço ele. Isso aqui é o argumento. Isso aqui é o argumento. Isso aqui é o comando. Então esse comando tem um argumento. O argumento, naturalmente, é quebrado por espaço. Então eu vou listar tudo, inclusive os arquivos ocultos da raiz. São dois argumentos que eu passei. O LA e o BAR. Alguns precisam do tracim, outros não. Você só vai entender isso quando você lê o meu livro de Linux, quando eu falo de POSIX. Então vai lá, pega o meu livro e lê. Lá ele não... Desculpa, eu utilizo o argpars. Aqui ele usa getopts. Eu prefiro argpars. O argpars dá para fazer... Como eu posso dizer... Dá para você colocar helper na passagem de parâmetros. Dá para você obrigar que um parâmetro seja passado. Dá para você ter o default valway. Você ter o... Como caso ali... Múltiplos argumentos. Dá para fazer bastante coisa no argpars. Dá uma olhadinha no meu livro de Linux. Dá para a página 350. Vamos lá. Então ele usou o getopts. Threadin, lembra da nossa aula de socket que tivemos agora em pouco? Threadin é obrigatório para que eu atenda múltiplos clientes ao mesmo tempo. Então vou precisar do Threadin. Subprocess do Python. Subprocess é para executar processos filhos. Então esse netcat nosso, ele é capaz de executar processos filhos. Tudo bem? Aqui ó. Tópico 12.6 do meu livro de Linux. Você tem opção 1. Open. Call. Check call. Check output. Quais são os dois mais bosta que existem? Os dois últimos. Bosta. Ah esses dois aqui é o que você trata, como eu posso dizer, de uma forma muito mais profissional o output. Tudo bem? Isso é importante. Aqui você tem como utilizar. Legal? Bom vamos lá. Que... E traceback. Traceback é para exibir a stack trace de erros do processo caso ocorre algum erro. Lógico. Legal. Chalbank. Aqui o Chalbank. O srbinpag.com 3. Porque o netgato, por incrível que pareça, ls.l, o nosso comando se chama netgato porque é netquete. Brazuca, porra. Listnem. Cara, uma coisa muito louca, meu. Qualquer programador separaria um script server e um script client. Só que isso no mundo hacker dá muita merda. O que nós fazemos? Foda-se, Lândia. Metemos tanto client como server no mesmo script makeshift. É assim que nós fazemos no mundo hacker. Se você quer programar bonitinho, ó. Tem curso que ensina a fazer telinha, sabia? Formuláriozinho. Esse curso aqui é porra nenhuma, cara. É hacker, porra. Então é assim que nós fazemos no mundo hacker. O único script. Eu posso usar esse único script como servidor ou eu posso usar ele como cliente. E aí eu só tenho um script para carregar de um lado para o outro. Eu não tenho dor de cabeça e tenho que carregar dois scripts. Entendeu? Soltou em modo de command line, soltou em modo de upload. Então são os modos da execução do nosso script. O que é para executar e o alvo. Cara, eu poderia ter metido aqui, ó. O alvo padrão 127.0.0.1. E eu poderia ter colocado aqui porta-padrão 5.5.5.5. Porque no net-cat, Ingress é 4.4.4.4. Por padrão. Mas o nosso portugues 5.5.5.5.5. Legal? É o telefone da Scully. Tá? Qual é o telefone da Scully? Eu nem sei se é assim que escreve. Ah, que vuxiço. Eu acho que é 5.5.5.5. Pô, vou falar um modelo, não quero ver um modelo. Eu quero ver um modem descando. A piada. Modem descando. Pô, é que não conhecem. Legal. Então já estou parametrizando. Preste atenção. São variáveis de script. O escopo deles é o script todo. Entendeu? Legal. Tá. Isso aqui tá muito diferente do livro. Pego o livro e vei que eu já mudei um monte de coisa. Já melhorei o código do cara. Não sei por que. Um livro. É assim, de nome sem inferior ao livro do Zecu Brasileiro. Não sei. Eu não sei. Não sei o que acontece. Mas sim, é muito inferior o código dos caras. Já mudei muita coisa. Legal. E aí, naturalmente, eu tenho isso aqui. É tipo um helper. É um helper. Eu executo comando e passo traço H. Tá aqui. Então, bom. A documentação do cara não está completa, né? Traço H. Traço real. É uma opção. É uma opção, certo? E vamos colocar aqui um exemplo de uso do NetGato. Traço H. Legal. Ele está onde? Ele está lá no GitHub, que eu vou deixar mais aqui no final. NetGato. Traço H. Ele mostraria esse helper aqui. Beleza? Vamos usar. Legal. Tá claro? Ele só escreve. Print, print, print, print, print. Beleza, coleguinha. Então, tudo começa aqui, né? If name é igual a main. Certo? Legal. Então, se for main, ou seja, se o cara está vindo aqui no terminal e chamando NetGato, traço H, opa, traço H, opa. Certo? Certo. Traço H. Ele vai... Esse name vai passar por essa linha com esse nome. E aí, main. Por quê? Esse script pode ser importado, meu amigo. Você pode fazer esse script ser importado por um outro assistente, por exemplo. E não necessariamente entraria como main. Então, ele seria importado e não faria nada. Então, você usaria ele. Tipo Python usando Python. Entenderam? Legal. Bom, main. Por que global? PHP também tem isso, tá? Global, porque você está dizendo que todas essas variáveis têm o escopo de todo o script. Olha elas aqui. Entende? Então, todas essas variáveis que têm o escopo de todo o script estão entrando em main. Tá? Aqui. E aí, se você manipula uma delas, se você manipula uma delas, você manipula aqui dentro do main com o escopo do script. Então, se eu manipular o port aqui dentro, ele vai estar alterando essa variável aqui em cima. E tem o escopo de todo o script. Tá claro? Legal. Por isso que se usa global. Beleza. Legal. Então, ele está dizendo que se eu não tiver argumento, eu vou rodar simplesmente o usage para ver o cara contra o C, contra o F. Eu vou chamar de helper. Vou chamar essa bolsa de helper. Vou chamar de helper. Pelo amor de Deus. Nome feio do caramba, mano. É o helper. Legal? Todo mundo conhece como helper. E a mensagem de helper. Certo? Do helper. Bom, aqui nós temos então aqui nós temos o esse get.opts ele vai pegar essa linha de comando que eu executei essa linha de comando que eu executei vai localizar o que é o comando, o que são os argumentos e vai carregar essas duas variáveis que é um array. É para isso que ele utiliza o get.opts. No meu caso eu recomendo o uso do nosso amigo argpars, tá? O argpars. Aqui, acho que é 355. Bom, e aí aqui eu faço um aço de repetição por todos os argumentos. Só para você ter uma noção, eu poderia muito bem chegar aqui, ó, e vir aqui e colocar assim, por exemplo, traço target 9283.12 traço porte 55555 traço command line Eu poderia muito bem fazer isso aqui. Certo? E tudo isso aqui são argumentos. São os argumentos dele. E esses argumentos viram array então aqui eu passo o aço de repetição nesses argumentos e aí eu altero, é para executar alguma coisa? Sim. É para ser modo list, né? Ou seja, o cara passou o traço L Sim é traço H é o helper o cara para ele usar. É um comando, né? Traço C Sim, então, command gotru Então, aquele testas variáveis e verifica Você não precisa fazer isso no arg pass O arg pass embutido dentro do arg pass tem esse cara aqui Então, o arg pass te entrega algo muito melhor galera, estou bebendo café, tá? Vocês não vão acreditar eu já gravei esse vídeo eu esqueci de habilitar o som, cara ou eu fiz uma live e esqueci de habilitar o som e merda mas vamos lá aqui eu verifique, olha se eu estou no modo cliente é para editar um control D para ele destravar o STD e iniciar ele como cliente caso contrário caso eu esteja em modo listening caso eu esteja no modo listening então, eu inicio server loop então, essa aqui é a função que vai chamar se eu estou rodando o meu net catch modo cliente e essa aqui é a função que vai rodar se eu estiver rodando o meu net catch no modo servidor legal? o modo servidor, vamos entender o modo servidor aqui, olha o modo servidor, eu já mudei pra caramba o código do cara fiz um código mais decente aqui target se eu não tenho um target definido ah, galera esse é o default target, gente não é esse aqui, não é esse aqui que eu default target tá bom? então, eu estou com um target definido ah, pera aí cara é que eu estou mudando o código dos caras né? legal eu tenho aqui, o listen legal olha então, se eu não tenho nenhum target colocado em branco, digamos que o cara passou vazio o target eu chumo porque é o 0, 0, 0, 0 por que? no servidor quer dizer que o servidor vai aceitar conexão de qualquer IP client caso você fale, não eu só quero que ele aceite por exemplo, da máquina 192.1681 um 192.1681 só vai aceitar dessa máquina tá pra você trabalhar com um card um yield um yield e aí essa lá ele simplesmente faz assim cara porcamente porcamente o cara fez isso não estou brincando porcamente o cara fez assim cara eu fiquei pistola quando eu vi isso ele fez assim cara cara isso aqui é horrível bicho isso aqui é horrível não cara por que você precisa dessa estrutura witch nem sei como é que se fala é witch né o TH tem um um sinal tem um som de um F meio com a língua mordida né coleguinha ordem a língua aí coleguinha eu me caso com café cara mas tá tirando sal do aluno o cara apaga e o estrutura te laçar dele ainda mano ah se lascar essa estrutura é obrigatória meu amigo sabe por que é obrigatória vou te explicar essa variável aqui server que foi criado nessa linha essa variável essa estrutura garante e quando terminar a última linha desse bloco vai ser executado de estrutura em cima de tudo que tiver alinhado ao server isso é muito parecido com o usem do C sharp cara essa estrutura é fantástica para garantir limpeza de recursos você tem que usar ela para abrir arquivos para abrir conexão com banco para cursor de banco para socket para abrir um stream de transmissão não importa se é local remoto você tem que usar isso cara beleza você vai fazer um pdf digamos que seu seu aplicativo gere um pdf então você vai ter que usar isso para garantir que você vai destruir esse objeto em memória server bind então eu vou dar um binding no target 0000 a princípio porta que eu usei como padrão beleza e aqui eu só estou imprimindo não precisaria ah não cara, pera beleza é meu netgato né aguardando do endereço no netgato é netgato mesmo galera olha o nome do arquivo netgato e aí eu posso esperar 50 execuções concorrentes preste atenção nós vamos executar comandos no servidor remoto pode demorar minutos pode demorar dias já pensou nisso então naturalmente esse nosso server vai esperar aqui 50 concorrentes trabalhar com 50 concorrentes se ele tiver os deputantes 50 comandos que não terminaram ainda e chegar ao 51 ele dropa negação de serviço, DOS então um tu aqui aceitando os client sockets cara tem como melhorar é recomendado que se coloque esses caras dentro de um trycatch except 3cb printexec mas você sempre que fizer preste atenção um try except dentro de um iotru obrigatoriamente você tem que usar isso aqui except kboard interrupt galera posso ter escrito errado program muito escreve errado cara vocês viram? é um exception de terminal do control c quando o mando parar escreve errado meu amor exatamente e aqui você simplesmente dá um break para a execução do laço de repetição beleza você poderia chegar aqui meter um cis exit zero poderia também mas já que é um servidor iotru é mais suave um break seria mais suave o que ele para o iotru e o server loop seria chamado nessa linha final então seria finalizado na linha 146 beleza? então não precisaria galera eu não dou curso de digitação não você tem que digitar legal bom como que eu recebo então cada cliente ou seja, cada solicitação de execução aqui no alvo simples eu tenho cliente socket e o address que está chegando logo em seguida thread aí eu chamo isso aqui o que é o target? target é a função que eu quero executar eu vou chamar essa função passando isso aqui como argumento você não está vendo errado não realmente tem esse espaço aqui para ele encarar isso aqui como uma tubula realmente tem isso aí cara primeira vez que eu vi isso aqui e o programador java programador cichar tem mais ou menos um negócio mais estranho do mundo cara mas tem sim então você vai criar um new object aqui esse cara vai retornar um new object que é uma thread a synchrona e então você start a thread a synchrona então você start a thread a synchrona e volta para o iotool para chamar o a7tg novo legal então esse aqui é o servidor bom eu falei que ele vai chamar client handler handler sempre está ligado a tratativa de eventos sempre que você ver essa palavra essa palavra está sempre ligada a tratativa de eventos tratativa de eventos do client quer dizer que o client se conectou do servidor vamos dar um olhada então no client handler galera eu trabalho analisando o código fonte empresa e é assim mesmo você acha a função e aí você tem um momento de decisão você escolhe um caminho você vai percorrendo todo o caminho e volta depois você escolhe o outro caminho é assim mesmo eu vou olhando linha linha eu até brinco lá linha linha global upload global execute global command caso tenha alguma coisa para ser colocada no upload eu vi que eles estão usando aqui upload destination e aqui vai dar, vai adorar se tiver um texto se tiver um texto olha que interessante 1024 4196 eu vou fazer o seguinte galera para a extensão vou melhorar o código dos caras aqui eu vou colocar aqui um global e eu vou chamar isso aqui porque caso eu precise passar de 4k bytes para outro k bytes tudo mais basta eu mudar aqui legal então tamanho de bloco aqui aqui é o tamanho de bloco aqui é o tamanho de bloco tamanho de bloco e aí eu vou receber esse tamanho de bloco receber esse tamanho de bloco receber esse tamanho de bloco beleza até chegar até o fim do arquivo conseguir ler até o final do arquivo se tudo deu certo olha que lixo width s white binário já vou explicar isso aqui isso que eu estou dizendo legal o caminho de destino é um caminho de um sistema de arquivos então guarda esse arquivo lá esse arquivo está sendo transmitido no modo binário por isso é white o arquivo em binário e então o descriptor tem que ser essa variável deixa eu dar um tab porque tudo que eu utilizo o file de descriptor tem que estar dentro do width aqui e dentro desse bloco e aqui eu venho cara, mosquito nojento outra vez que eu venho nesse studio são 50 mosquitos e aí eu escrevo o arquivo lá beleza talvez caso de merda o youtube mais o try não está dentro do youtube então eu não preciso do keyboard interrupção legal caso eu queira executar alguma coisa é só eu executar esse comando executo isso aqui esse one command já vou mostrar pra vocês one command está aqui ele executa o comando, legal? e se eu tiver comando se eu tiver comando lá simplesmente o youtube e eu mando pro cliente a informação uma coisa interessante que é a primeira vez que eu passo por aqui e aí eu escrevo pro cliente certo? legal depois repare que eu sempre venho aqui e rodo o command line que o cara escreveu lá no terminal lá no terminal isso aqui, esse command como se fosse o command do prompt e esse aqui é do modo interativo do yubar estou dentro dessa função e eu posso tratar como um bloco aqui legal? então esse é o server loop uma coisa que eu acho uma bosta, é isso aqui ele utiliza checkout put shell go to obrigatório tá galera? por exemplo, tá comando shell obrigatório esse parâmetro por que eu acho isso aqui uma grande bosta? eu vou explicar pra você porque eu acho isso aqui uma grande bosta porque eu imagino que o comando demora duas horas pra ser feito essa linha 83 só vai ser finalizada depois do tempo necessário de duas horas mesmo que seja verboso a outra ponta fica vendo nada do verboso isso aqui poderia ser muito bem alterado eu não vou alterar ainda e vou melhorar esse script vou pôr criptografia vai ficar foda o netgat o netgat vai ficar melhor que o netcad você vem aqui em não importa web você vai procurar um projeto meu cadê? você vai vir em repositórios avulso olha só o netgato tá aqui esse aqui é o netgato beleza esse é o netgato aqui esse processo eu acho interessante esse cara aqui esse código eu fiz um tempo atrás olha só que que esse cara faz interessante cadê? eu não estou usando o check o check call estou usando o poppin e aí olha que interessante eu estou pegando ah vou colocar pipe pipe pipe certo? eu estou pegando o proxess o proxess que retorna do poppin então eu faço um iotool nesse iotool eu leio a linha em tipo de execução ele vai soltando vai entregando e eu já vou fazendo alguma coisa eu não espero executar todo o processo eu leio de forma interativa conforme o processo vai cuspindo as linhas eu já vou lendo muito diferente esse código que é meu tá galera muito diferente desse código aqui que ele só solta o texto depois que ele termina se terminar dois dias depois vai ser dois dias depois fazer o que? e você fica na outra ponta sem saber se está funcionando ou não tudo bem? legal mas eu vou dar uma melhorada nisso aqui fora criptografia beleza expliquei a execução de comando servidor o cliente tá o cliente já a parte cliente é muito fácil né a cada vez que eu executo algo então eu crio uma conexão cliente que conforme eu falei não tá legal é esse cliente lembrando que eu estou seguindo o material eu tenho um outro problema que eu fiz uma cagada aqui que vê que vê tá dois pontos tá certo aqui eu tenho uma linha de manter os dois pontos quando eu corri o código dos outros eu estava com ponto e vírgula tem esse problema aqui eu tenho um try certo um try accept try accept cliente no stack traces de errado cliente connect target port legal isso aqui tá ruim tá? isso aqui tá ruim, sabe por que? olha só o correto aqui é um final por que um final como funciona a estrutura try try accept se der erro dando certo ou dando errado eu rodo cliente ponto close um cliente existe olha o cliente aqui tá certo? vamos ter isso aqui isso aqui dando certo ou dando errado o final sempre vai ser executado e é importante sim você fechar as conexões esse cara viu tanto livro né? elamor de Deus bom, também aquele negócio né? eu não sou um hacker de natureza eu sou um programador de natureza eu programo eu programo desde 1998 entende? escrevi um livro em 2002 de programação então é natural que eu tenho uma visão de programador os caras não hum vamos lá, global bloca se eu posso fazer direito eu faço direito tá melhor? legal tamanho do bloco de leitura e aí eu conecto cliente conectado eu não poderia colocar aqui tem que colocar baixo legal aqui e aí? caso tenha alguma coisa para enviar eu mando caso contrário eu entro no ioutroom de ler dados ler dados ler dados ler o command line aqui aqui eu vou ler o command line do netcatch mando e fico aqui até o cara dá um control c beleza? até dá um control c e fechar a execução do cliente beleza? cara eu vou ter coisa pra caramba que eu nem sei como é que tá ó caramba netgatter ponto netgatter legal parece que sim beleza então vamos controlar um alvo vamos controlar um alvo conforme eu falei pra vocês eu gravei esse vídeo sem audio deixa eu até confirmar se eu tô com audio tá aqui to com audio puts cara eu vou ficar muito louco agora ah mas tem um mosquito ainda na faixa puta que parinho ah tem um aqui que tá cara eu não sei se é a racquetinha o mosquito é zumbi ressuscita eu não sei eu vou fazer o seguinte bom eu vou rm traço rm temmp install o que eu tinha já cach temmp bar install repara não existe o arquivo certo? legal eu tinha instalado o arredo lá na mac eu tinha feito uma instalação e tudo chato né cara beleza pra que eu esqueci do audio né que chato cd bar temmp rm netket não tá cara ls traço l cadê o netket tá aqui não legal eu tinha baixado o arredo o sudo rm arredo eu vou colocar o netket aqui tá aaaano netgat vamos copiar o netgat o netgat pra lá bom tática de como você leva o malware pro cliente é algo que vai ser feito atualmente mais pra frente tá como você manter a execução como você mantém a execução dele você vai chamar ele com bêche você vai chamar via python mesmo cara mais pra frente netgat ponto bar netgat traço porta 5 5 5 5 tá traço ele eu vou ficar esperando o command line vindo lá do cliente qual é o ip meio dessa máquina 312 se não faria memória vamos lá vamos rodar aqui o cliente tá o cliente ó vamos lá ó é 5 5 5 né aqui ó aqui eu já tinha rodado né netgat o ip porta 5 5 5 target a máquina 12 em modo de command line para control d pra iniciar e aí agora ele me pede um comando linux e repare que ele executou um comando linux lá no cali linux nessa outra máquina virtual beleza tá bom então vamos executar um comando vim no livro tem aqui vou executar de novo a prática aqui do livro é chato né cara vacilei cara mas agora já o meu audio vou acredito que eu não vou mais ter esse problema e tá bom copiar ó eu quero executar lá no alvo isso aqui beleza ó ele vai fazer um download com W get desse arquivo e vai jogar aqui dentro desse diretório tá foi vamos dar uma olhada lá aqui tá preso aqui ó ls opa cd barro tmp clear aqui ó opa py eu sou muito burro né eu poderia ter chegado aqui e ter feito um ls cara ó ls junto com o outro outro put do outro tá então W agora só chegar aqui em Python se eu tentar instalar não vai dar certo sabe por que ah ah o netcat tá sendo executado aqui como usuário comum então eu não consigo fazer uma execução naturalmente mais robusta não conseguiria fazer execução mais robusta do negócio então vamos lá sudo ah esse cachorro é bom hein ah ah ah vai vai tentar comunista ali cachorro pega rapaz legal control d vamos executar Python 3 barra tmp install.py e aquilo que eu te falei ele vai demorar é um processo de instalação grande ó e ele só me entrega no final cara ele só tá me entregando no final eu vou fazer aquela mudança que eu falei pra vocês de fazer ele me entregando parcialmente a medida que ele vai executando ele vai me entregando aqui no cliente parcialmente então eu vou mudar esse netgato dos caras fiz a instalação quer ver? fazer um teste beleza clear pip3 tá aqui pouxa vida eu posso chegar aqui agora deixa eu ver o o DNS util será que o DNS util tá aqui de DNS lookup.com tá tudo instalado é o cali vem tudo instalado tudo instalado é fazer o seguinte apt update traço y pronto entrou no update no cali linux tá aqui o sudo apt update é muito rápido né então desde que é facinha eu controlar a outra máquina usando netcat bom o pá parte ruim conforme eu falei isso não tá criptografado isso tem cara de backdoor na rede qualquer programinha um pouco mais inteligente vai chegar aqui e vai criticar a comunicação dele na rede então nós vamos nas próximas aulas colocar criptografia nisso aqui beleza até mais tchau