30 KiB
80,443 - Metodologia de Pentesting Web
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Verifique os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os HackTricks e HackTricks Cloud repositórios do github.
Dica de recompensa por bugs: inscreva-se no Intigriti, uma plataforma premium de bug bounty criada por hackers, para hackers! Junte-se a nós em https://go.intigriti.com/hacktricks hoje e comece a ganhar recompensas de até $100,000!
{% embed url="https://go.intigriti.com/hacktricks" %}
Informações Básicas
O serviço web é o serviço mais comum e extenso e existem muitos tipos diferentes de vulnerabilidades.
Porta padrão: 80 (HTTP), 443(HTTPS)
PORT STATE SERVICE
80/tcp open http
443/tcp open ssl/https
nc -v domain.com 80 # GET / HTTP/1.0
openssl s_client -connect domain.com:443 # GET / HTTP/1.0
Orientação sobre Web API
{% content-ref url="web-api-pentesting.md" %} web-api-pentesting.md {% endcontent-ref %}
Resumo da Metodologia
Nesta metodologia, vamos supor que você está atacando um domínio (ou subdomínio) e apenas isso. Portanto, você deve aplicar esta metodologia a cada domínio, subdomínio ou IP descoberto com um servidor web indeterminado dentro do escopo.
- Comece por identificar as tecnologias usadas pelo servidor web. Procure por dicas para lembrar durante o restante do teste se conseguir identificar com sucesso a tecnologia.
- Alguma vulnerabilidade conhecida da versão da tecnologia?
- Usando alguma tecnologia conhecida? Alguma dica útil para extrair mais informações?
- Algum scanner especializado para executar (como wpscan)?
- Execute scanners de propósitos gerais. Nunca se sabe se eles vão encontrar algo ou se vão encontrar alguma informação interessante.
- Comece com as verificações iniciais: robots, sitemap, erro 404 e verificação SSL/TLS (se HTTPS).
- Inicie o spidering da página web: É hora de encontrar todos os arquivos, pastas e parâmetros possíveis sendo usados. Além disso, verifique descobertas especiais.
- Observe que sempre que um novo diretório for descoberto durante brute-forcing ou spidering, ele deve ser spidered.
- Brute-Forcing de Diretórios: Tente forçar todos os diretórios descobertos em busca de novos arquivos e diretórios.
- Observe que sempre que um novo diretório for descoberto durante brute-forcing ou spidering, ele deve ser forçado.
- Verificação de Backups: Teste se consegue encontrar backups dos arquivos descobertos adicionando extensões de backup comuns.
- Brute-Force de Parâmetros: Tente encontrar parâmetros ocultos.
- Depois de ter identificado todos os pontos finais possíveis que aceitam entrada do usuário, verifique todos os tipos de vulnerabilidades relacionadas a eles.
- Siga esta lista de verificação
Versão do Servidor (Vulnerável?)
Identificar
Verifique se existem vulnerabilidades conhecidas para a versão do servidor em execução.
Os cabeçalhos HTTP e cookies da resposta podem ser muito úteis para identificar as tecnologias e/ou versão sendo usadas. A varredura Nmap pode identificar a versão do servidor, mas também podem ser úteis as ferramentas whatweb, webtech ou https://builtwith.com/:
whatweb -a 1 <URL> #Stealthy
whatweb -a 3 <URL> #Aggresive
webtech -u <URL>
webanalyze -host https://google.com -crawl 2
Busque vulnerabilidades da versão da aplicação web aqui
Verifique se há algum WAF
- https://github.com/EnableSecurity/wafw00f
- https://github.com/Ekultek/WhatWaf.git
- https://nmap.org/nsedoc/scripts/http-waf-detect.html
Truques de tecnologia web
Alguns truques para encontrar vulnerabilidades em diferentes tecnologias bem conhecidas sendo usadas:
- AEM - Adobe Experience Cloud
- Apache
- Artifactory
- Buckets
- CGI
- Drupal
- Flask
- Git
- Golang
- GraphQL
- H2 - Banco de dados SQL Java
- Truques do IIS
- JBOSS
- Jenkins
- Jira
- Joomla
- JSP
- Laravel
- Moodle
- Nginx
- PHP (o php tem muitos truques interessantes que podem ser explorados)
- Python
- Spring Actuators
- Symphony
- Tomcat
- VMWare
- Teste de Pentesting de API Web
- WebDav
- Werkzeug
- Wordpress
- Aplicativos Desktop Electron (XSS para RCE)
Leve em consideração que o mesmo domínio pode estar usando tecnologias diferentes em portas, pastas e subdomínios diferentes.
Se a aplicação web estiver usando alguma tecnologia/plataforma conhecida listada anteriormente ou qualquer outra, não se esqueça de pesquisar na Internet novos truques (e me avise!).
Revisão de Código Fonte
Se o código fonte da aplicação estiver disponível no github, além de realizar um teste White box da aplicação por conta própria, há algumas informações que podem ser úteis para o teste Black-Box atual:
- Existe um arquivo de Change-log ou Readme ou Versão ou qualquer coisa com informações de versão acessíveis via web?
- Como e onde estão salvadas as credenciais? Existe algum arquivo (acessível?) com credenciais (nomes de usuário ou senhas)?
- As senhas estão em texto simples, criptografadas ou qual algoritmo de hash é usado?
- Está usando alguma chave mestra para criptografar algo? Qual algoritmo é usado?
- Você pode acessar algum desses arquivos explorando alguma vulnerabilidade?
- Há alguma informação interessante no github (problemas resolvidos e não resolvidos) issues? Ou no histórico de commits (talvez alguma senha introduzida em um commit antigo)?
{% content-ref url="code-review-tools.md" %} code-review-tools.md {% endcontent-ref %}
Scanners automáticos
Scanners automáticos de propósito geral
nikto -h <URL>
whatweb -a 4 <URL>
wapiti -u <URL>
W3af
zaproxy #You can use an API
nuclei -ut && nuclei -target <URL>
# https://github.com/ignis-sec/puff (client side vulns fuzzer)
node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi2rVUN/?query=FUZZ"
Scanners de CMS
Se um CMS for usado, não se esqueça de executar um scanner, talvez algo interessante seja encontrado:
Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish
CMSScan: WordPress, Drupal, Joomla, vBulletin websites para problemas de segurança. (GUI)
VulnX: Joomla, Wordpress, Drupal, PrestaShop, Opencart
CMSMap: (W)ordpress, (J)oomla, (D)rupal ou (M)oodle
droopscan: Drupal, Joomla, Moodle, Silverstripe, Wordpress
cmsmap [-f W] -F -d <URL>
wpscan --force update -e --url <URL>
joomscan --ec -u <URL>
joomlavs.rb #https://github.com/rastating/joomlavs
Neste ponto, você já deve ter alguma informação sobre o servidor web usado pelo cliente (se houver dados fornecidos) e algumas dicas a serem lembradas durante o teste. Se tiver sorte, você pode até ter encontrado um CMS e executado algum scanner.
Descoberta de Aplicativos da Web Passo a Passo
A partir deste ponto, vamos começar a interagir com o aplicativo da web.
Verificações Iniciais
Páginas padrão com informações interessantes:
- /robots.txt
- /sitemap.xml
- /crossdomain.xml
- /clientaccesspolicy.xml
- /.well-known/
- Verifique também os comentários nas páginas principal e secundárias.
Forçando erros
Os servidores web podem se comportar de forma inesperada quando dados estranhos são enviados a eles. Isso pode abrir vulnerabilidades ou divulgar informações sensíveis.
- Acesse páginas falsas como /whatever_fake.php (.aspx,.html,.etc)
- Adicione "[]", "]]" e "[[" nos valores de cookie e nos valores de parâmetro para criar erros
- Gere erro fornecendo entrada como
/~randomthing/%s
no final da URL - Experimente diferentes Verbos HTTP como PATCH, DEBUG ou incorretos como FAKE
Verifique se é possível fazer upload de arquivos (verbo PUT, WebDav)
Se você descobrir que o WebDav está habilitado mas não tem permissões suficientes para fazer upload de arquivos na pasta raiz, tente:
- Força Bruta de credenciais
- Faça upload de arquivos via WebDav para o restante das pastas encontradas dentro da página da web. Você pode ter permissões para fazer upload de arquivos em outras pastas.
Vulnerabilidades SSL/TLS
- Se a aplicação não estiver forçando o uso de HTTPS em nenhuma parte, então está vulnerável a MitM
- Se a aplicação estiver enviando dados sensíveis (senhas) usando HTTP. Então é uma vulnerabilidade alta.
Use testssl.sh para verificar vulnerabilidades (em programas de Bug Bounty, provavelmente esses tipos de vulnerabilidades não serão aceitos) e use a2sv para re-verificar as vulnerabilidades:
./testssl.sh [--htmlfile] 10.10.10.10:443
#Use the --htmlfile to save the output inside an htmlfile also
# You can also use other tools, by testssl.sh at this momment is the best one (I think)
sslscan <host:port>
sslyze --regular <ip:port>
Vulnerabilidades do SSL/TLS:
- https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/
- https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/
Spidering
Inicie algum tipo de spider na web. O objetivo do spider é encontrar o máximo de caminhos possível na aplicação testada. Portanto, a rastreabilidade da web e fontes externas devem ser usadas para encontrar o máximo de caminhos válidos possível.
- gospider (go): Spider HTML, LinkFinder em arquivos JS e fontes externas (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
- hakrawler (go): Spider HTML, com LinkFinder para arquivos JS e Archive.org como fonte externa.
- dirhunt (python): Spider HTML, também indica "arquivos suculentos".
- evine (go): Spider HTML interativo CLI. Também pesquisa no Archive.org.
- meg (go): Esta ferramenta não é um spider, mas pode ser útil. Você pode apenas indicar um arquivo com hosts e um arquivo com caminhos e o meg buscará cada caminho em cada host e salvará a resposta.
- urlgrab (go): Spider HTML com capacidades de renderização JS. No entanto, parece estar desatualizado, a versão pré-compilada é antiga e o código atual não compila.
- gau (go): Spider HTML que usa provedores externos (wayback, otx, commoncrawl).
- ParamSpider: Este script encontrará URLs com parâmetros e as listará.
- galer (go): Spider HTML com capacidades de renderização JS.
- LinkFinder (python): Spider HTML, com capacidades de embelezamento JS capazes de buscar novos caminhos em arquivos JS. Também vale a pena dar uma olhada no JSScanner, que é um wrapper do LinkFinder.
- goLinkFinder (go): Para extrair endpoints tanto na fonte HTML quanto em arquivos javascript incorporados. Útil para caçadores de bugs, equipes vermelhas, ninjas de segurança da informação.
- JSParser (python2.7): Um script python 2.7 usando Tornado e JSBeautifier para analisar URLs relativas de arquivos JavaScript. Útil para descobrir facilmente solicitações AJAX. Parece estar desatualizado.
- relative-url-extractor (ruby): Dado um arquivo (HTML), ele extrairá URLs dele usando uma expressão regular engenhosa para encontrar e extrair os URLs relativos de arquivos feios (minify).
- JSFScan (bash, várias ferramentas): Reúna informações interessantes de arquivos JS usando várias ferramentas.
- subjs (go): Encontre arquivos JS.
- page-fetch (go): Carregue uma página em um navegador sem cabeça e imprima todos os URLs carregados para carregar a página.
- Feroxbuster (rust): Ferramenta de descoberta de conteúdo misturando várias opções das ferramentas anteriores
- Javascript Parsing: Uma extensão do Burp para encontrar caminhos e parâmetros em arquivos JS.
- Sourcemapper: Uma ferramenta que, dado o URL .js.map, fornecerá o código JS beatificado
- xnLinkFinder: Esta é uma ferramenta usada para descobrir endpoints para um alvo específico.
- waymore: Descubra links do wayback machine (também baixando as respostas no wayback e procurando mais links
- HTTPLoot (go): Rastreie (mesmo preenchendo formulários) e também encontre informações sensíveis usando regexes específicas.
- SpiderSuite: Spider Suite é um avançado Crawler/Spider de segurança web GUI multi-feature projetado para profissionais de segurança cibernética.
- jsluice (go): É um pacote Go e ferramenta de linha de comando para extrair URLs, caminhos, segredos e outros dados interessantes do código-fonte JavaScript.
- ParaForge: ParaForge é uma simples extensão do Burp Suite para extrair os parâmetros e endpoints da solicitação para criar uma lista de palavras personalizada para fuzzing e enumeração.
Força Bruta em diretórios e arquivos
Inicie a força bruta a partir da pasta raiz e certifique-se de forçar todos os diretórios encontrados usando este método e todos os diretórios descobertos pelo Spidering (você pode fazer essa força bruta de forma recursiva e anexando no início da lista de palavras usada os nomes dos diretórios encontrados).
Ferramentas:
- Dirb / Dirbuster - Incluído no Kali, antigo (e lento) mas funcional. Permite certificados autoassinados e pesquisa recursiva. Muito lento em comparação com as outras opções.
- Dirsearch (python): Não permite certificados autoassinados, mas permite pesquisa recursiva.
- Gobuster (go): Permite certificados autoassinados, não tem pesquisa recursiva.
- Feroxbuster - Rápido, suporta pesquisa recursiva.
- wfuzz
wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ
- ffuf - Rápido:
ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ
- uro (python): Isso não é um spider, mas uma ferramenta que, dada a lista de URLs encontrados, irá excluir URLs "duplicados".
- Scavenger: Extensão do Burp para criar uma lista de diretórios do histórico do burp de diferentes páginas
- TrashCompactor: Remova URLs com funcionalidades duplicadas (com base em importações de js)
- Chamaleon: Ele usa o wapalyzer para detectar tecnologias usadas e selecionar as listas de palavras a serem usadas.
Dicionários recomendados:
- https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt
- Dicionário incluído no Dirsearch
- http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10
- Listas de palavras do Assetnote
- https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content
- raft-large-directories-lowercase.txt
- directory-list-2.3-medium.txt
- RobotsDisallowed/top10000.txt
- https://github.com/random-robbie/bruteforce-lists
- https://github.com/google/fuzzing/tree/master/dictionaries
- https://github.com/six2dez/OneListForAll
- https://github.com/random-robbie/bruteforce-lists
- /usr/share/wordlists/dirb/common.txt
- /usr/share/wordlists/dirb/big.txt
- /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
Obs.: Sempre que um novo diretório for descoberto durante a força bruta ou spidering, ele deve ser forçado.
O que verificar em cada arquivo encontrado
- Verificador de links quebrados: Encontre links quebrados dentro de HTMLs que podem estar propensos a ataques de takeover.
- Backups de arquivos: Depois de encontrar todos os arquivos, procure backups de todos os arquivos executáveis (".php", ".aspx"...). Variações comuns para nomear um backup são: file.ext~, #file.ext#, ~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp e file.old. Você também pode usar a ferramenta bfac ou backup-gen.
- Descobrir novos parâmetros: Você pode usar ferramentas como Arjun, parameth, x8 e Param Miner para descobrir parâmetros ocultos. Se possível, tente procurar parâmetros ocultos em cada arquivo web executável.
- Todos os wordlists padrão do Arjun: https://github.com/s0md3v/Arjun/tree/master/arjun/db
- Param-miner “params” : https://github.com/PortSwigger/param-miner/blob/master/resources/params
- Assetnote “parameters_top_1m”: https://wordlists.assetnote.io/
- nullenc0de “params.txt”: https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773
- Comentários: Verifique os comentários de todos os arquivos, você pode encontrar credenciais ou funcionalidades ocultas.
- Se você está jogando CTF, um "truque" comum é esconder informações dentro de comentários no lado direito da página (usando centenas de espaços para que você não veja os dados se abrir o código-fonte com o navegador). Outra possibilidade é usar várias novas linhas e esconder informações em um comentário na parte inferior da página da web.
- Chaves de API: Se você encontrar alguma chave de API, há um guia que indica como usar chaves de API de diferentes plataformas: keyhacks, zile, truffleHog, SecretFinder, RegHex, DumpsterDive, EarlyBird
- Chaves de API do Google: Se você encontrar alguma chave de API parecida com AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik, você pode usar o projeto gmapapiscanner para verificar quais APIs a chave pode acessar.
- Buckets S3: Enquanto estiver spidering, verifique se algum subdomínio ou algum link está relacionado a algum bucket S3. Nesse caso, verifique as permissões do bucket.
Descobertas Especiais
Enquanto realiza o spidering e a força bruta, você pode encontrar coisas interessantes que precisa observar.
Arquivos interessantes
- Procure links para outros arquivos dentro dos arquivos CSS.
- Se encontrar um arquivo .git, algumas informações podem ser extraídas
- Se encontrar um arquivo .env, informações como chaves de API, senhas de bancos de dados e outras informações podem ser encontradas.
- Se encontrar pontos de extremidade de API, você também deve testá-los. Esses não são arquivos, mas provavelmente "parecerão" com eles.
- Arquivos JS: Na seção de spidering, foram mencionadas várias ferramentas que podem extrair caminhos de arquivos JS. Além disso, seria interessante monitorar cada arquivo JS encontrado, pois em algumas ocasiões, uma alteração pode indicar que uma vulnerabilidade potencial foi introduzida no código. Você poderia usar, por exemplo, JSMon.
- Você também deve verificar os arquivos JS descobertos com RetireJS ou JSHole para verificar se são vulneráveis.
- Desofuscador e Descompactador de Javascript: https://lelinhtinh.github.io/de4js/, https://www.dcode.fr/javascript-unobfuscator
- Embelezador de Javascript: http://jsbeautifier.org/, http://jsnice.org/
- Desofuscação JsFuck (javascript com caracteres:"[]!+" https://ooze.ninja/javascript/poisonjs/)
- TrainFuck:
+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.
- Em várias ocasiões, você precisará entender as expressões regulares usadas, isso será útil: https://regex101.com/
- Você também pode monitorar os arquivos onde formulários foram detectados, pois uma alteração no parâmetro ou o surgimento de um novo formulário pode indicar uma nova funcionalidade vulnerável potencial.
403 Forbidden/Basic Authentication/401 Unauthorized (bypass)
{% content-ref url="403-and-401
Protocol_Name: Web #Protocol Abbreviation if there is one.
Port_Number: 80,443 #Comma separated if there is more than one.
Protocol_Description: Web #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for Web
Note: |
https://book.hacktricks.xyz/pentesting/pentesting-web
Entry_2:
Name: Quick Web Scan
Description: Nikto and GoBuster
Command: nikto -host {Web_Proto}://{IP}:{Web_Port} &&&& gobuster dir -w {Small_Dirlist} -u {Web_Proto}://{IP}:{Web_Port} && gobuster dir -w {Big_Dirlist} -u {Web_Proto}://{IP}:{Web_Port}
Entry_3:
Name: Nikto
Description: Basic Site Info via Nikto
Command: nikto -host {Web_Proto}://{IP}:{Web_Port}
Entry_4:
Name: WhatWeb
Description: General purpose auto scanner
Command: whatweb -a 4 {IP}
Entry_5:
Name: Directory Brute Force Non-Recursive
Description: Non-Recursive Directory Brute Force
Command: gobuster dir -w {Big_Dirlist} -u {Web_Proto}://{IP}:{Web_Port}
Entry_6:
Name: Directory Brute Force Recursive
Description: Recursive Directory Brute Force
Command: python3 {Tool_Dir}dirsearch/dirsearch.py -w {Small_Dirlist} -e php,exe,sh,py,html,pl -f -t 20 -u {Web_Proto}://{IP}:{Web_Port} -r 10
Entry_7:
Name: Directory Brute Force CGI
Description: Common Gateway Interface Brute Force
Command: gobuster dir -u {Web_Proto}://{IP}:{Web_Port}/ -w /usr/share/seclists/Discovery/Web-Content/CGIs.txt -s 200
Entry_8:
Name: Nmap Web Vuln Scan
Description: Tailored Nmap Scan for web Vulnerabilities
Command: nmap -vv --reason -Pn -sV -p {Web_Port} --script=`banner,(http* or ssl*) and not (brute or broadcast or dos or external or http-slowloris* or fuzzer)` {IP}
Entry_9:
Name: Drupal
Description: Drupal Enumeration Notes
Note: |
git clone https://github.com/immunIT/drupwn.git for low hanging fruit and git clone https://github.com/droope/droopescan.git for deeper enumeration
Entry_10:
Name: WordPress
Description: WordPress Enumeration with WPScan
Command: |
?What is the location of the wp-login.php? Example: /Yeet/cannon/wp-login.php
wpscan --url {Web_Proto}://{IP}{1} --enumerate ap,at,cb,dbe && wpscan --url {Web_Proto}://{IP}{1} --enumerate u,tt,t,vp --passwords {Big_Passwordlist} -e
Entry_11:
Name: WordPress Hydra Brute Force
Description: Need User (admin is default)
Command: hydra -l admin -P {Big_Passwordlist} {IP} -V http-form-post '/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log In&testcookie=1:S=Location'
Entry_12:
Name: Ffuf Vhost
Description: Simple Scan with Ffuf for discovering additional vhosts
Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H "Host:FUZZ.{Domain_Name}" -c -mc all {Ffuf_Filters}
Dica de recompensa por bugs: Cadastre-se na Intigriti, uma plataforma premium de recompensas por bugs criada por hackers, para hackers! Junte-se a nós em https://go.intigriti.com/hacktricks hoje e comece a ganhar recompensas de até $100,000!
{% embed url="https://go.intigriti.com/hacktricks" %}
Aprenda hacking na AWS de zero a herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o swag oficial do PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os repositórios do HackTricks e HackTricks Cloud.