Se tornando um Jedi em PenTest Web

Introdução

Ataques em aplicações webs é o principal foco, afinal a maioria das invasões partem de um serviço web vulnerável ou mal implementado. Infelizmente esse número é muito grande e estima-se que 80% da web ou mais, esteja vulnerável.

Nesse artigo, nosso objetivo não é apresentar receita de bolo de como fazer esses ataques, mas sim te levar para uma jornada que vai fazer você pensar fora da caixa.

Provavelmente você lendo artigos por ai, já se deparou com conceitos e prática de alguns ataques, certo? Mas você sabe como ir mais além?

Ataques Web

Esses são conceitos básicos sobre uma aplicação web, apresentei os mais básicos que você pode até saber de maneira concreta todos esses conceitos, afinal é algo que você aprende em um curso básico, assim você não deu muita importância sobre esses conceitos. Porém entra em um aspecto que poucos realmente observam, que é a questão dos fundamentos essenciais para você auditar uma aplicação web. Muitos esperam uma receita de bolo como ganhar uma shell reversa no servidor daquela aplicação, porém não sabem como é o processo por trás e até mesmo ficam perdidos quando recebem um block do Firewall.

Os fundamentos são essenciais, pois com base nisso você vai conseguir mesclar diferente tipos de ataques, ao qual vou demonstrar.

Mas antes, vamos falar sobre vulnerabilidades e demonstrar algumas delas por meio de exemplos práticos.

Porém antes de iniciarmos alguns exemplos práticos, vamos falar sobre o OWASP TOP 10, um documento de conscientização aonde reúne as principais vulnerabilidades em aplicações web.

  1. Injection . Falhas de injeção, como SQL, NoSQL, OS, XSS e LDAP, ocorrem quando dados não confiáveis são enviados a um intérprete como parte de um comando ou consulta. Os dados hostis do invasor podem induzir o intérprete a executar comandos não intencionais ou acessar dados sem a devida autorização.
  2. Autenticação quebrada . As funções de aplicativo relacionadas à autenticação e ao gerenciamento de sessões geralmente são implementadas incorretamente, permitindo que os invasores comprometam senhas, chaves ou tokens de sessão ou explorem outras falhas de implementação para assumir a identidade de outros usuários temporária ou permanentemente.
  3. Exposição de dados confidenciais . Muitos aplicativos da Web e APIs não protegem adequadamente dados confidenciais, como financeiro, assistência médica e PII. Os invasores podem roubar ou modificar esses dados com pouca proteção para realizar fraudes no cartão de crédito, roubo de identidade ou outros crimes. Os dados confidenciais podem ser comprometidos sem proteção extra, como criptografia em repouso ou em trânsito, e requerem precauções especiais quando trocados com o navegador.
  4. Entidades externas XML (XXE) . Muitos processadores XML mais antigos ou mal configurados avaliam referências de entidades externas em documentos XML. Entidades externas podem ser usadas para divulgar arquivos internos usando o manipulador de URI de arquivos, compartilhamentos de arquivos internos, varredura de portas internas, execução remota de código e ataques de negação de serviço.
  5. Controle de acesso quebrado . Restrições sobre o que os usuários autenticados têm permissão para fazer geralmente não são aplicadas adequadamente. Os invasores podem explorar essas falhas para acessar funcionalidades e / ou dados não autorizados, como acessar contas de outros usuários, visualizar arquivos confidenciais, modificar dados de outros usuários, alterar direitos de acesso etc.
  6. Configuração incorreta de segurança . A configuração incorreta da segurança é o problema mais comum. Isso geralmente resulta de configurações padrão inseguras, incompletas ou ad hoc, armazenamento em nuvem aberta, cabeçalhos HTTP configurados incorretamente e mensagens de erro detalhadas que contêm informações confidenciais. Não apenas todos os sistemas operacionais, estruturas, bibliotecas e aplicativos devem ser configurados com segurança, mas devem ser corrigidos / atualizados em tempo hábil.
  7. XSS de script entre sites . As falhas do XSS ocorrem sempre que um aplicativo inclui dados não confiáveis em uma nova página da Web sem a validação ou escape adequados, ou atualiza uma página da Web existente com dados fornecidos pelo usuário usando uma API do navegador que pode criar HTML ou JavaScript. O XSS permite que os invasores executem scripts no navegador da vítima, que podem seqüestrar sessões do usuário, desfigurar sites ou redirecionar o usuário para sites maliciosos.
  8. Desserialização insegura . A desserialização insegura geralmente leva à execução remota de código. Mesmo que as falhas de desserialização não resultem em execução remota de código, elas podem ser usadas para executar ataques, incluindo ataques de repetição, ataques de injeção e ataques de escalonamento de privilégios.
  9. Usando componentes com vulnerabilidades conhecidas . Componentes, como bibliotecas, estruturas e outros módulos de software, são executados com os mesmos privilégios que o aplicativo. Se um componente vulnerável for explorado, esse ataque poderá facilitar a perda séria de dados ou a aquisição de servidores. Aplicativos e APIs que usam componentes com vulnerabilidades conhecidas podem minar as defesas de aplicativos e permitir vários ataques e impactos.
  10. Registro e monitoramento insuficientes . O registro e o monitoramento insuficientes, juntamente com a integração ausente ou ineficaz com a resposta a incidentes, permitem que os invasores continuem atacando os sistemas, mantenham a persistência, façam o giro para mais sistemas e violem, extraiam ou destruam dados. A maioria dos estudos de violação mostra que o tempo para detectar uma violação é superior a 200 dias, normalmente detectado por partes externas, em vez de processos ou monitoramento interno.

Fonte: https://owasp.org/www-project-top-ten/

Para por em práticas algumas vulnerabilidades, você pode utilizar um laboratório com algumas máquinas, sendo elas:

Kali Linux

Metasploitable

PenTest Lab

Máquinas do Vulnhub

Vamos começar vendo algumas vulnerabilidades simples

Vulnerabilidade de Cross Site Scripting (XSS)

Os ataques XSS (Cross-Site Scripting) são um tipo de injeção.Esses ataques geralmente ocorrem quando um invasor usa um aplicativo da Web para enviar código malicioso, geralmente na forma de um script do lado do navegador, para um usuário final diferente. As falhas que permitem que esses ataques sejam bem-sucedidos são bastante difundidas e ocorrem em qualquer lugar em que um aplicativo Web use entrada de um usuário na saída gerada sem validá-lo ou codificá-lo.

Um invasor pode usar o XSS para enviar um script mal-intencionado a um usuário inocente. O navegador do usuário final não tem como saber que o script não deve ser confiável e o executará. Como ele acha que o script veio de uma fonte confiável, o script mal-intencionado pode acessar todos os cookies, tokens de sessão ou outras informações confidenciais retidas pelo navegador e usadas com esse site. Esses scripts podem até reescrever o conteúdo da página HTML.

Aposto que você já deve ter visto alguma prática no decorrer dessa revista, porém você já se perguntou como expandir o seu conhecimento para ir além de um simples alert?

Geralmente uma empresa que se preocupa com segurança da sua aplicação, ele utiliza WAF (Web Application Firewall) e Filtros para coibir a tentativa desses ataques.

Caso você queira ir além é essencial conhecer de métodos de prevenção desses ataques, obviamente que um payload e uma POC pública não vai adiantar contra mecanismo de segurança, por isso é essencial que você conheça da Linguagem de Programação JavaScript, assim você vai conseguir desenvolver seus próprios payloads e até mesmo bypassar filtros e Firewall que coibe alguma exploração bem sucedida.

Além disso é essencial que você desenvolva laboratórios para que você explore diversas tentativas e métodos de explorar uma vulnerabilidade de XSS, pois em conceito temos as vulnerabilidades (Refletidas, Armazenadas e Baseadas em DOM). Então é o seu trabalho saber como elas funcionam e como se da sua forma de exploração, pois eu até poderia passar uma receita de bolo, porém isso é algo que aprendemos no inicio, quando queremos fazer um simples bolo para o nosso café da manhã. Mas caso você queira chegar em um nível profissional, você precisa se virar com ingredientes que são pouco explorados.

Você já parou para tentar explorar vulnerabilidades, mesclando elas?

Exemplo:

XSS to RCE

XSS with CSRF

XSS to SQL Injection

XSS to LFI

XSS and Hijacking Sessions

Sim isso é possível, caso você aprenda a cozinhar um bolo misturando os seus sabores e até mesmo colocando cobertura extras para você ir mais além de um simples Alert() ou roubo de Cookies de sessão.

Você pode procurar métodos de exploração mesclando esses exemplos acima, por exemplo, você tem alguns exploits que misturam XSS e LFI

Confira: https://www.exploit-db.com/exploits/46753

Outro método é o XSS to RCE

Confira: https://blog.ripstech.com/2019/mybb-stored-xss-to-rce/

Com isso, usando sua imaginação, você consegue ir mais além! Para isso é essencial conhecer dos conceitos de cada vulnerabilidade e seus métodos de exploração básica.

Outras vulnerabilidades interessante é a vulnerabilidade de CSRF (Cross-Site Request Forgery), SQL Injection, Command Injection e Unrestricted File Upload

Cross-Site Request Forgery é um tipo de ataque que ocorre quando um site, email, blog, mensagem instantânea ou programa mal-intencionado faz com que o navegador da web do usuário execute uma ação indesejada em um site confiável quando o usuário é autenticado. Um ataque de CSRF funciona porque as solicitações do navegador incluem automaticamente quaisquer credenciais associadas ao site, como o cookie da sessão do usuário, o endereço IP, etc. Portanto, se o usuário for autenticado no site, o site não poderá distinguir entre a solicitação forjada ou legítima enviada pela vítima. Precisamos de um token / identificador que não seja acessível ao invasor e não seja enviado juntamente (como cookies) com solicitações forjadas que o invasor inicia.

SQL Injection consiste na inserção ou “injeção” de uma consulta SQL através dos dados de entrada do cliente para o aplicativo. Uma exploração bem-sucedida da injeção SQL pode ler dados confidenciais do banco de dados, modificar dados do banco de dados (Inserir / Atualizar / Excluir), executar operações de administração no banco de dados (como desligar o DBMS), recuperar o conteúdo de um determinado arquivo presente no arquivo DBMS sistema e, em alguns casos, emita comandos para o sistema operacional. Os ataques de injeção SQL são um tipo de ataque de injeção , no qual comandos SQL são injetados na entrada do plano de dados para efetuar a execução de comandos SQL predefinidos.

Command Injection é um ataque no qual o objetivo é a execução de comandos arbitrários no sistema operacional host por meio de um aplicativo vulnerável. Os ataques de injeção de comando são possíveis quando um aplicativo passa dados inseguros fornecidos pelo usuário (formulários, cookies, cabeçalhos HTTP etc.) para um shell do sistema. Nesse ataque, os comandos do sistema operacional fornecidos pelo invasor geralmente são executados com os privilégios do aplicativo vulnerável. Os ataques de injeção de comando são possíveis em grande parte devido à validação de entrada insuficiente.

Esse ataque difere da Injeção de código, pois a injeção de código permite que o invasor adicione seu próprio código que é executado pelo aplicativo. Na Injeção de Comando, o invasor estende a funcionalidade padrão do aplicativo, que executa comandos do sistema, sem a necessidade de injetar código.

Unrestricted File Upload primeiro passo em muitos ataques é obter algum código no sistema a ser atacado. Então o ataque precisa apenas encontrar uma maneira de executar o código. O uso de um upload de arquivo ajuda o invasor a executar a primeira etapa.

As consequências do upload irrestrito de arquivos podem variar, incluindo controle completo do sistema, um sistema de arquivos ou banco de dados sobrecarregado, encaminhamento de ataques para sistemas de back-end, ataques do lado do cliente ou desfiguração simples. Depende do que o aplicativo faz com o arquivo carregado e, principalmente, de onde está armazenado.

Cada vulnerabilidade dessa podem ser mescladas para chegar em um nível de exploração mais avançado, pois uma vulnerabilidade pode levar a outras vulnerabilidade até mesmo críticas para o sistema.

Indo além dos ataques comuns

Seguir receita de bolos ou explorar uma falha simples é extremamente fácil, pois com um simples video no YouTube você consegue explorar uma vulnerabilidade, apenas seguindo um passo a passo.

Porém existe maneiras de você ir muito mais além e entrar em um campo de exploração maior, mas para isso é necessário que você se aprofunde muito em alguns tópicos, sendo eles

  • Linguagens de Programação voltado a WEB
  • Frameworks para WEB
  • Vulnerabilidades voltadas a aplicação WEB
  • Conhecimentos em sistemas operacionais (Windows e Linux)

Esses 4 tópicos em dia já vai te ajudar a se desenvolver mais em ataques em aplicações web, pois essa é a base fundamental para você desenvolver, manter ela segura e disponibilizar ela de alguma forma.

Para você ir além é necessário mesclar algumas vulnerabilidades e até mesmo saber desenvolver, pois é essencial para saber como uma aplicação web funciona.

Alguns métodos de exploração são poucos explorados e alguns conceitos até mesmo deixado de lado, pois existem milhares de exploração que pouco são analisadas em um teste de vulnerabilidade web, segue uma pequena lista de algumas

Arbitrary file access

 Binary planting

 Blind SQL Injection

 Blind XPath Injection

 Brute force attack

 Buffer overflow attack

 Cache Poisoning

 Cash Overflow

 Clickjacking

 Command injection attacks

 Comment Injection Attack

 Content Security Policy

 Content Spoofing

 Credential stuffing

 Cross Frame Scripting

 Cross Site History Manipulation (XSHM)

 Cross Site Tracing

 Cross-Site Request Forgery (CSRF)

 Cross Site Port Attack (XSPA)

 Cross-Site Scripting (XSS)

 Cross-User Defacement

Custom Special Character Injection

Denial of Service

 Direct Dynamic Code Evaluation (‘Eval

 Injection’)

 Execution After Redirect (EAR)

 Exploitation of CORS

 Forced browsing

 Form action hijacking

 Format string attack

 Full Path Disclosure

 Function Injection

 Host Header injection

 HTTP Response Splitting

 HTTP verb tampering

 HTML injection

LDAP injection

 Log Injection

 Man-in-the-browser attack

 Man-in-the-middle attack

 Mobile code: invoking untrusted mobile code

 Mobile code: non-final public field

 Mobile code: object hijack

 One-Click Attack

 Parameter Delimiter

 Page takeover

 Path Traversal

 Reflected DOM Injection

 Regular expression Denial of Service — ReDoS

 Repudiation Attack

 Resource Injection

Server-Side Includes (SSI) Injection

 Session fixation

 Session hijacking attack

 Session Prediction

 Setting Manipulation

 Special Element Injection

 SMTP injection

 SQL Injection

 SSI injection

 Traffic flood

 Web Parameter Tampering

 XPATH Injection

 XSRF or SSRF

Alguns ataques já parte do sistema ou da rede para chegar na aplicação web, porém o impacto é óbvio e isso resulta em muitos danos e até em negação de serviço.

Vale ressaltar que alguns ataques eles partem de outros, pois para haver um sequestro de sessão, geralmente parte dos ataques de XSS, ou até mesmo para ter um ataque de execução de comandos remoto, algumas vulnerabilidades como LFI, LFU, SQL Injection, XSS e ente outras, são aproveitadas também.

Conhecer de Exfiltração de dados, Deserialization, Bypassing Regex, XSS Persistent já é uma base essencial para explorações mais avançadas e sofisticadas. Além disso uma simples vulnerabilidade pode resultar em grandes danos.

Exemplo: 

“Um 0day que achei nos roteadores da Intelbras”

https://mundohacker.net.br/vulnerabilidade-zero-day-em-roteadores-intelbras-podem-impedir-usuarios-de-acessar-a-internet/

CVE-2019–17222 e CVE-2019–17411

Um simples Alert() resultou em uma negação de serviço, pois precisei resetar o roteador, porém eu poderia ir mais além de um simples alert() se eu explora-se mais um pouco, quem sabe até mesmo ter achado outras vulnerabilidades.

Agora se o roteador tivesse filtros para coibir XSS já seria um problema e para isso eu teria que utilizar payloads ou eu mesmo fazer o bypass dos filtros e para isso eu preciso conhecer de JavaScript e entender como funciona os filtros, pois tem casos que apenas um ; entre uma palavra já basta.

XSS bypassing WAF ou XSS bypassing Filters, são técnicas que você pode bypassar esses mecanismos e até mesmo utilizando Regex para isso, além do JavaScript, PHP, técnicas de CSP Injection e HTML para efetuar o bypass dessas proteções.

O Livro Real World Bug Hunting, mostra provas de conceitos de vulnerabilidades como CSRF e XSS em sites e serviços de grandes empresas, eu recomendo tal leitura.

Ataques Web Avançados

Efetuar ataques avançados é um trabalho difícil e requer pensar fora da caixa, infelizmente não tem receita de bolo para isso, porém existem técnicas que você pode utilizar para conseguir explorar de maneira mais eficaz uma aplicação web.

Para isso é necessário conhecimentos profundos em desenvolvimento web, sistemas operacionais e redes de computador, pois esses conhecimentos vão contar muito na hora de fazer uma exploração avançada e ir até camadas mais profundas.

É necessário que você saiba analisar um código fonte e manje de compiladores, além das tecnologias que esta por trás de uma aplicação como banco de dados para você fazer Blind Sql Injection e explorar de maneira cabal um banco de dados SQL.

Além disso, muitas exploração já partem de vulnerabilidades em plugins, frameworks e CMS e muitos deles estão vulneráveis, e ai entra a analise do código fonte para procurar brechas e maneira de explorar uma vulnerabilidade.

A certificação OSWE tem um dos melhores conteúdos de ataques e exploração avançada com foco em aplicações web

  • Persistent Cross-Site Scripting
  • Session Hijacking
  • .NET Deserialization
  • Data Exfiltration
  • Bypassing File Extension Filters
  • Magic Hashes
  • PostgreSQL Extension and User Defined Functions
  • Bypassing REGEX restrictions
  • Cross-Site Request Forgery
  • Type Juggling
  • Blind SQL Injection
  • Bypassing File Upload Restrictions
  • Loose Comparisons
  • Bypassing Character Restrictions
  • PostgreSQL Large Objects
  • Debugging .NET Assemblies

Esses são meios de exploração mais avançados que requer um conhecimento em desenvolvimento, pois o objetivo é explorar a partir do código fonte.

Veja alguns casos práticos para você estudar e pensar fora da caixa:

  • Atmail Mail Server Appliance Case Study (CVE-2012–2593)
  • X-Cart Shopping Cart Case Study (CVE-2012–2570)
  • SolarWinds Orion Case Study — (CVE-2012–2577)
  • DELL SonicWall Scrutinizer Case Study — (CVE-2012-XXXX)
  • SolarWinds Storage Manager 5.10 — (CVE-2012–2576)
  • WhatsUp Gold 15.02 Case Study — (CVE-2012–2589)
  • Symantec Web Gateway Blind SQLi- (CVE-2012–2574)
  • AlienVault OSSIM — (CVE-2012–2594, CVE-2012–2599)
  • PHPNuke CMS Case Study — CVE — 2010-XXXXX
  • Symantec Web Gateway 5.0.3.18 RCE — CVE-2012–2953
  • FreePBX Elastix Remote Code Execution — CVE — 2012-XXXX

Exemplos de ataques Avançados

Um exemplo de ataque é de SQL Injection mesmo sendo uma falha de fácil correção, muitos websites ainda possuem tal vulnerabilidade.

Veja uma demonstração de um ataque de SQL Injection to Shell, utilizando um laboratório do Vulnhub

https://medium.com/@mrhenrike/vulnhub-dc-serie-1-walkthrough-cd81418cce74

Conclusão

Busque ir mais além das técnicas convencionais, para isso é necessário estudar e se aprofundar em campos que são pouco explorados. A minha recomendação é que você sempre corra atrás de técnicas avançadas de exploração e aprenda desenvolvimento web para maior proveito em um teste, pois muitas brechas de segurança podem partir de uma simples vulnerabilidade ou até mesmo um erro na hora de desenvolver o código daquela aplicação.

Procure Write-ups de CTFs e Bug Bounty e invista seu tempo quebrando desafios e até mesmo criando, pois o importante é você conhecer o que esta por trás e saber como a aplicação funciona para que você explore da melhor forma.

E como eu ressaltei, você precisa se aprofundar em conhecer Redes de computadores, sistemas operacionais e desenvolvimento web, pois todas essas questões são interligadas e muita das vezes as falhas partem de um serviço web vulnerável ou de uma vulnerabilidade no sistema operacional.

Veja outros artigos: https://www.linkedin.com/in/joas-antonio-dos-santos/

Hits: 39

Leave a Reply

Your email address will not be published. Required fields are marked *