Aula 2 · Python Programming for Hackers and Pentesters
Transcrição do áudio
É coleguinha, vou trazer pra você agora um exemplo real do que eu falo pra vocês aqui. Esse projeto nossa não tem nenhuma estrelinha, nenhum beijinho, nada, nenhum forquinho, mas também não está bem documentado, está um lixo, né? Mas vamos ver o código. Primeira coisa, olha só. Quando nós trabalhamos com camadas do modelo OZ, eu vou usar o modelo OZ como estudo, referência, ele não é no caso a realidade porque é aplicado no mundo real o modelo TCP, todo mundo sabe disso. Então você tem caramba mano, eu vou ter que ver todas essas camadas que vai ser foda. 7 camadas do modelo OZ não importa aqui, não importa aqui, não importa aqui, não importa aqui. Legal? Na verdade não importa pra nós essas duas aqui também não importa pra nós. Essas duas pra nós não importa, a 1 e a 2, certo? Porque a 1 e a 2 elas estão relacionadas ao meu enlace, não ao enlace da outra ponta, a não ser que o Alvo esteja no mesmo enlace que eu, né? Aí é outro assunto. Então digamos que a camada 7 ela é interessante pra nós, a camada 3 é interessante pra nós, puta que pariu, hein? Aí eu deixando a camada 4 de lado. A camada 4 ela é interessante pra nós, certo? Essas 4 camadas do modelo OZ que são interessantes pra nós, certo? Aqui nós vamos encontrar, por exemplo, um endereço universal pra LANZ e WANZ, vamos encontrar aqui o endereço famoso, o endereço IP do protocolo IP que tem a versão 4 e a versão 6, legal? Aqui nós vamos encontrar 2 carinhas que é o nosso amiguinho TCP, o nosso amigo UDP, tem mais, tá? Tem o Qwik por exemplo, tá? O Qwik é foda, mas é um outro assunto. E aqui em cima nós vamos encontrar vários carinhas interessantes, HTTP, FTP, por exemplo, pop, SMTP e aí vai mais um monte de protocolos aqui de camada de aplicação, certo? Então você pode programar, presta atenção, você pode programar em cima dessa camada ou em cima desta camada. Você pode programar em qualquer uma dessas duas camadas, certo? Legal. É lógico, poderia programar em cima das outras, mas essas aqui são as clássicas dos programadores, certo? Legal. E aqui nós vamos encontrar um protocolo chamado HTTP, certo? E o HTTPS, HTTP e HTTPS e nesse HTTP e HTTPS nós temos uma coisa chamada cabeçalha. Funciona assim, olha como que é uma página HTML, para vocês entenderem, certo? Então você tem, deixa eu ver se eu faço aqui um corpo, né? Fazer um quadrado aqui, um corpo. O corpo do HTTP, HTTPS, ele é dividido em um por aqui, uma duas linhas vazias, desculpa, duas quebras de linhas, caso uma linha vazia e o cabeçalho, certo? Aqui você tem um cabeçalho, cabecalho 1, pera aí, você tem as linhas do cabeçalho, certo? Aí você tem no final, no finalzinho, na última linha do cabeçalho você tem um barra N e você tem um barra N e aí então vem o corpo da mensagem, né? O corpo 1, corpo 2, corpo 3, corpo linha 1, corpo linha 2, corpo linha 3, corpo linha 4 e assim vai, certo? Até o final, beleza. Aqui que você vai encontrar no corpo o HTML, o XML, o texto, não sei lá o que você vai transportar aí, o binário, não sei, tá? Isso aí é um problema do programador, legal? O que eu quero mostrar pra vocês hoje é nós vamos capturar isso aqui em Python. Você vai entender porque isso aqui vai dizer as tecnologias utilizadas na outra ponta. Então a outra ponta utiliza tais e tais tecnologias, tá? Isso é importante saber. E é a outra ponta porque você sabe, né? Aqui, preste atenção nessa linha que eu tô fazendo aqui, beleza? Daqui pra cima, origem, origem enxerga destino, preste atenção, tá na teoria inclusive, tá no livro do Turnbull. Origem enxerga destino, não importa a distância, não importa número de saltos, não importa o que tenha da camada 1, 2, 3, certo? Origem enxerga destino diretamente. Origem acredita que destino está conectado num único cabo direto, no caso CaboCrossover, né? Tá conectado no CaboCrossover assim, um direto com o outro, sem nada no meio, sem nada. Não importa se uma máquina tá no Brasil e a outra máquina tá no Japão, certo? Quatro, cinco, seis, sete, assim. Um, dois, três, não. Beleza? Quem faz isso, quem faz esse jabaculê é essa camada aqui, ó. Camada três. Legal? Beleza. Nosso objetivo é ver os cabeçários. Então nós vamos trabalhar com HTTP ou barra HTTPS, beleza? Fiz um projetinho aqui bacana. Então vamos ver aqui o projetinho bacana. Eu vou primeiro, eu vou vir aqui, eu vou pegar aqui o... esse aqui é o ponto git, é o ponto git aqui, copiei, vamos lá no terminal, buscar meu terminal, pode ser feito em qualquer lugar, qualquer Linux, qualquer diabo que você tiver aí, funciona até no Windows, essa joça. CD, TMP, opa, não tem, eu vou criar um diretório temporário mil, tá? Ah não, vou direto pro TMP lá do sistema operacional, né? Git, clone, e aí eu coloco aqui o... legal. Então puxei aqui pra minha máquina, é de praxe, preste atenção, é de praxe que você olha todos os arquivos antes, cara. É sua obrigação olhar todos os arquivos antes. Esse arquivo aqui não tem malware nenhum. Olha, acho que é o único Python que tem, porque... DNS.py, ah isso, que eu ia fazer outra brincadeira. Não tem nada. É, TXT, TXT, TXT e MD. Legal, só esses dois arquivos. Você é obrigado a fazer isso. Para todo script que você puxa pra sua máquina. CD, o Asp, Crier, LES, estou aqui. Beleza? Eu não sei porque o Alot, TXT, o Rhythm estão como executáveis, é muito esquisito, cara. É muito esquisito, cara, esse GitHub as vezes, cara. Ah, tá como executável, cara, é muito escroto, cara. Muito pai. Então vamos lá. Eu vou abrir aqui o Sublime, presta atenção, sublime.barra, ele vai abrir o Sublime com os arquivos daqui, certo? Fecha esse outro aqui que é a sessão anterior. Tá aqui. Então eu já vou explicar sobre isso. Vamos direto ao código. Ah tá, isso aqui é outra coisa. Vamos direto ao código, app. Bom, nós temos as boas práticas do OASP para cabeçalhos HTTP. Preste atenção, o ASP é referência. Tudo que você for procurar de boas práticas ou de práticas ruins, tu encontra lá. Lógico que ele não vai. Aí ele vai colocar como prática ruim também. Ele diz. Ah, esse cabeçalho XFrame é isso. Xprotect, então é isso. Xcontentetypeoptions é isso. E aqui ele vem explicando cada uma tag que é importante do protocolo HTTP. Tudo bem? Ele vem explicando cada uma das tags, das que são importantes para poder você verificar. Verificar a questão de como está a sua configuração. Por exemplo, ele explica e ele dá a recomendação. Isolar o browser, o contexto do browser. Ideal que seja assim. Seja essa opção. Isso aqui é muito importante. Tá bom. Então é importante que você saiba aquilo. Tá, legal. Então o que eu fiz aqui? Um código bem idiota. Eu utilizei um tal de requestes. O que é o requestes? Vou criar um arquivo aqui. FileNew. Lógico que eu não vou fazer comit daqui, né? Test.py. Certo? Salvar. Então eu creio que o test.py. E aqui eu vou fazer uma simples requisição HTTP. Eu falei para vocês, nós podemos programar acima da camada de aplicação. Então importe requestes. Já é uma biblioteca do Python para trabalhar com a camada de aplicação. Ela já vem pronta. Você não tem que trabalhar no osso. Programando o get, o set, o seu próprio get, seu próprio set. Seu post, seu... Já tá tudo aqui, cara. Tá tudo aqui. E é muito simples. Vou programar porcamente aqui, tá? R, por exemplo, que é o response. Requestes.get. Então você coloca aqui... Opa. HTTPS2.barra.www.pursoracker.com.br. Não vai flow dar porque eu tenho defesa lá. Bom, quando eu executo essa linha, ele faz uma requisição web e retorna o que tá aqui, legal? Bom, pera aí, desculpa aí. Legal. E aí, o que que acontece? Agora eu posso imprimir... O que tá na tela, né? Por exemplo, eu posso colocar assim, ó, print. Eu quero imprimir, por exemplo, o er.status.coach, que é o código na HTTP. E, naturalmente, você pode chegar aqui e colocar assim, ó, er.text. Beleza? E o texto inteiro. Beleza? Então eu posso chegar aqui, eu posso salvar isso aqui. Eu posso vir aqui, pá, então, Tricks.test. Certo? E aí ele vai trazer toda a página, toda a página do site pra mim. Detalhe, eu estou trabalhando, eu estou trabalhando acima da camada de aplicação. Bem acima da camada de aplicação. Legal? Aqui, ó. Status code 200. Sucesso. 404. Não existe 500, em geral, erros. 403. Accesso, negação de acesso. Vai depender. Vai depender do que aconteceu lá no servidor. Ele nos manda um código e nós podemos saber o que aconteceu. Legal? Mas repare que aquele só imprimiu o corpo da mensagem. Isso aqui é o corpo da mensagem. Ele não imprimiu o cabeçalho. Para imprimir o cabeçalho é muito simples, tá? Então, em vez de a gente pedir aqui o get, nós podemos pedir o hat. Eu nunca lembro se era hats, plural ou singular aqui. Então, vamos lá dar uma olhada aqui. Tem todo mundo decorar todas essas coisas, cara. Mas o importante é que você tem que aprender a usar. Aqui, ó, é header. Não, pera aí, isso aqui é a função que eu criei, caramba. Get, R, L, A aqui, ó. R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R. É get mesmo e depois eu pego aqui, legal. Então, vamos lá, get, e aí eu coloco aqui o cabeçalho. Ah, está claro, né? Status code, text e cabeçalho. Ahn, tá, foi mal. Vamos dar uma quebra de linha aqui, barra N, barra N. E aí, eu coloco R, R, Text. Coloco statusCode, a quebra de linha, né? Barra n, quebra de linha, aí eu coloco o cabeçalho e aí dou duas quebra de linha e jogo o texto aqui na tela. Legal? Não esquece do ponto e vírgula, tu não vai viciar a fazer essa merda. Então vamos lá. Documentação galera, ó. Isso aqui é o cabeçalho HTML. Pronto. Isso aqui é o que é importante. Eu tenho que lembrar de renovar minha sessão, hein? Vou explicar pra vocês, coleguinha. Então olha só, Keep Alive é o método de transmissão que ele tá me passando. Aqui são parâmetros do Keep Alive, que é como ele tá escrevendo o socket pra mim. Olha que cagada, hein? Powered by PHP 8.1. PHPzinho tá depreciado em curso Hacker. É um PHP 8.4, 8.1 tem falha de segurança, hein? Hum, coleguinha, parece que todo cara de curso Hacker ele é vacilão, hein? Hum, bem TV, bem TV. PHP, Cessio e D, cara. É isso aqui que se roubar, dá pra fazer um sequestro de sessão. Mas mesmo que você faça um sequestro de sessão e minha sessão ainda seja válida. Ah, agora lembrei. Foi mal, pera aí. Vou explicar. Essa session foi criada para atender esse get. Então ele já não existe mais e não tá logado. Então não vai me causar nenhum problema. Tem aqui o prazo de expiração e tudo mais. Bom, outras coisas interessantes aqui. Encoding, ou seja, ele vem criptografar, ele vem compactado pra mim, tudo bem. Isso não é tão importante. Isso aqui é outra coisa muito importante. Ele é um Lightspeed. Ele não é um Apache, ele não é um Tomcat, ele não é um Internet Formation Service, ele é um Lightspeed. Então só pra vocês terem uma noção, o hacker pode pegar isso aqui, ele pode vir aqui, ele pode vir aqui no cve.org, digitar que Lightspeed, Down Searching, e aí ele procura uma vulnerabilidade, olha só, do Lightspeed, comand injectom, injection e aqui tem as versões. Cara, isso aqui é vulnerável pra caramba, tá? O Lightspeed com quick, protocolo quick, falei já hoje pra vocês aqui, e essa coisa usa quick. Então se você olhar, tem várias vulnerabilidades aqui, mas infelizmente você vai entender. Olha só quem é o fornecedor. Porra, cara, os caras colocam HP, não vai ser fudê, desculpa, foi mal, fiquei nervoso, tirem as crianças da sala, fiquei nervoso agora. O cara coloca até o PNL, cara, a versão do PNL, cara, pô, que pariu meu. Que serviço porco da Roastinger. Então Roastinger não é o lugar bom pra se manter um site. Quando terminar minha grana aqui, o que eu já paguei nessa bosta, eu vou migrar pra outro lugar, com certeza. Tá vendo? São informações. São informações do cabeçário. Dizem, naturalmente, muita coisa, muita coisa. Só que nem tudo aqui, se você olhar, eu olhei. É muita coisa que eu ignorei, porque não é importante pra ninguém. Tá bom. Então, conforme eu falei, baseado nesse site aqui, baseado nesse site, eu construí um arquivo do que eu quero, que seja muito ruim, que seja muito bosta pra mim, usando regex. Regex são validadores, que eu explico pra vocês mais pra frente. Aquilo que eu acho que é bom, que não tem nenhum problema, aquilo que não tem nenhum problema de falar, vai aparecer verdinho e aqui vai aparecer vermelhinho, certo? E uma lista de IPs, de URL's. Então vamos lá, https, dois pontos, barra, barra, mofa.gov.mm. Beleza? Por exemplo, salvo esse negócio aqui. E aí eu posso colocar várias URL's. Pode colocar as URL's da sua empresa, por exemplo. Vamos continuar olhando aqui. Então quer dizer que eu abro esse arquivo de links. Que serviço porco, que serviço porco, serviço porco.com.br. Cara, será que existe? Cara, acredito. Peraí, galera. Desculpa, é quando eu paro assim... Ruta, merda, serviço porco tá, hein? E serviço... Então não tem que ser cedilho, depois vocês testam aí. Dá pra fazer um site da hora, hein, cara, que isso aí, cara. E aí eu chamo aqui o main. A ifname igual main. E aí eu chamo o main. Ou seja, eu tô chamando isso aqui via command line, via terminal, vai rodar o main, certo? O main ele pega e o arquivo, né? A função para ler arquivo em Python é o open. Open o caminho. Se a leitura ou escrita, leitura er, escrita, é W. Leitura binária, ele vai ler binários. Leitura sem o B, ele abre linhas texto. Tá? Às vezes você precisa de abrir o arquivo em binário. Então você tem que colocar o B. Mas aí você não vai conseguir o readlines. Você vai conseguir só o read que retorna binários. Como eu estou lendo o texto, readline, ele acha as quebras de linha e me traz as linhas certinho. Beleza? E aí eu tô pedindo pra dar uma olhada no cabeçário, pegar o cabeçário e remove. O que eu remove faz? Ah, eu devo ter colocado o nome idiota, né? Verifica, caramba. Verificar, sei lá, cara. Remove não, pô. Eu acho que eu tava fazendo alguma coisa e fiz outra depois. Normal. Abro os arquivos do que eu permito que eu não quero. Faço a requisição. E aí aqui eu começo a verificar se aquela tag tá na lista do que eu quero, que eu permito, daquela lista que eu quero negar, que eu quero correr atrás dos desenvolvedores pra eles corrigirem a merda que eles fizeram. Legal? Vamos brilhar um terminal, cara. Agora que eu vi que o fechou o terminal, eu acho que o fechou o terminal formal. Então vamos dar uma olhada no resultado final desse treco aqui. Então cd barra tmp barro asp. Python 3. Python 3, eu quero o app.pipson. Então ele vai fazer uma requisição. Me foi negada, hein? Já vou explicar sobre isso. Ó, não tem problema. Não tem problema. Tem problema. Tem problema. Não sei. Não sei. Não sei. Se eu não consigo colocar ele nem num grupo, nem no outro, eu jogo em amarelo e eu não sei. Content app, não tem problema. Não sei, não sei, não sei. Não importa, não tem problema. Tem problema, tem que remover. Platform, tem que remover. O pênion tem que remover e isso aqui não tem problema. Ou desgrilo. Viram. Agora imagina que você tivesse uma lista enorme de sites e você tem que verificar tudo isso. Você pode vir aqui e colocar as URL aqui. Se você acha que alguma coisa está ruim, você pode vir aqui e criar uma regex apropriada para ele. Regex é um papo para o futuro. Não é um papo para agora. Legal? Regex é coisa do futuro porque você tem que aprender a fazer testes com regex. E usamos para caramba. Então provavelmente nós estamos sem uma VPN ativa. Provavelmente meu IP já caiu numa lista negra. Legal, então vamos lá. CD. CD Downloads. VPN. Ok. Então vamos colocar aqui agora o OpenVPN. Cara, eu acho que eu ando muito preguiçoso, Bias. Eu ando muito preguiçoso. Vamos...startar a VPN aqui. Está com um cara que eu estou, deu certo. Eu não sei, só ler ali, mas IP route, eu vejo por aqui, repare que o túnel está criado. Se eu tiver dúvida, eu mato essa regra para nunca vazar. Então vamos lá. Sudo IP route, Dell default. E aí se você pedir para ver as rotas, repare. Mas se caiu o túnel, cai tudo. Ou seja, para de funcionar tudo, tá? Essa aqui é uma forma de eu garantir que eu não vou deixar meu IP nos logs de registro de quem eu estou fazendo o pen test. Matei o default. É impossível. É impossível. Então vamos lá. Hum... Olha que interessante, hein? Ele está me retornando o erro no MOFA, hein? O MOFA está percebendo. Quando isso acontece, então você tem que colocar o que? User Agents no Python. Quando isso acontecer, você tem que chegar aqui, quer ver? Quer ver? User Agents. Aqui, ó. No request do Python. Exatamente isso aqui. Você tem que pegar um user agente, beleza? E colocar ele aqui, ó. Ah, já está prontinho que o código para nós, pô. É só chegar aqui e fazer isso aqui. Então vamos lá. Aonde eu faço request, aqui, ó. Aqui que eu faço request, certo? Aqui, ó. Legal. Pode chegar aqui e fazer isso aqui. Beleza? Então vamos lá agora. Cria um rodar. Ó, já mudou. Já mudou. Aí, ó, retorno. Vocês viram como é importante saber programar? Você sabe pelo erro? Se eu ver pelo erro, eu vou dar uma melhorada nesse código, vou subir para o GitHub. Quando esse vídeo sair, 30, 40 minutos depois, vai estar corrigido isso aqui lá. Tem duas formas de fazer isso. Uma é usar um session, que você pede a s, é igual, por exemplo, a request.session. Aí você coloca s.proxy, s.headers e aí você, em vez de chamar o... Você chama o s, sget, que é uma forma muito mais foda que tem, que eu vou explicar para vocês no futuro, tá? Aqui eu resolvi de forma muito simples com o próprio request. O Python tem isso, né? Tem muita facilidade. O que que é o user-agente? O user-agente é uma impressão digital que o seu browser deixa no alvo. Desculpe, seu browser deixa lá na outra ponta. Se você não sabe qual o seu user-agente, você pode vir aqui, lembrando que essa máquina, é uma máquina de gravar aula, tá? Ela não é minha máquina, pessoa de trabalho. User-agente-online. Então você consegue ver o seu user-agente. O maio é o user-agente. Ele colocou aqui para mim, qual é o meu user-agente? Esse aqui é o meu user-agente. Eu poderia copiar isso aqui. Eu poderia copiar isso aqui. Repare que eu estou saindo na Alemanha. Eu esperava estar saindo na Alemanha não, tá? Porque minha VPN, pelo que eu me lembro, ela não ia para lá não, mas tudo bem. Vocês sabem que eu não gosto da leste, eu não gosto dos caras lá não, mano. Você pode vir aqui agora e copiar, e colar. Então existe um API do Python que você troca esse negócio dinamicamente. Ele fica trocando. Cada vez que ele troca, ele parece que é um outro computador. Então vai trocando, vai trocando, vai trocando, vai trocando, parece na outra ponta, que são muitos computadores do lado de cá. Mas é o mesmo. É muito usado para fazer raspagem em escala. Server Engine X. Só tem isso de ruim no MOFA, cara. Olha, Chug, conexão Keep it Alive. Cara, muito bom, tá? Estou para te falar que o MOFA não está ruim. Os caras lá não são tão ruins assim não. Você vê, né? Olha o que que a Rostinger faz. Olha a desgraceira que a Rostinger faz. Me fala. Me fala se dá para aturar um negócio desse. Uma pena que eu paguei lá há anos, né? Vamos dar corrigido um código aqui. Agora que eu estou vendo, eu falo que é da porra do ponto em vírgula aqui, bicho. Tá vacilando. Tá virando programadorzinho qualquer, meu porra. Cadê os pontos de vírgula aqui? Tá virando programadorzinho qualquer, hein? Puts, Grilling, que verra, agonha. Oi, mal, galera. Aqui, olha. Olha o MOFA. Olha o RL aqui do curso HACK, olha o trâmbito de merda. Isso aqui está errado. Aí, se você está do lado da luz, você vai lá na equipe de desenvolvimento. Cara, não dá para arrancar essa merda aqui, não? Isso aqui é impossível, tá? Porque o PHP usa isso aqui para fazer a sessão. Mas você consegue mudar isso aqui, só que você tem que mudar em todo o sistema. É chato. Isso aqui você consegue remover. Isso aqui, cara, deveria remover. Isso aqui nem deveria existir. Essas duas nem deveria existir. Nem deveria existir. Nem sei nem por que colocar. Ah, puts, foda, né, galera? Legal. Pegar a ideia do que é o curso de Python, né? Programar essas coisas. Programar isso. Até mais, tchau.