GTFOBins
(gtfobins.org)- Mantém uma lista de binários Unix organizada por função, com links diretos para páginas detalhadas e links de âncora de cada ação possível em cada binário
- As categorias que se repetem com frequência são Shell, File read, File write, Command, Inherit, Upload, Download, Reverse shell, Library load e Privilege escalation, e alguns itens também incluem Bind shell
- File read e Shell aparecem de forma muito ampla, e ferramentas como dd, sed e sqlite3 acumulam leitura e escrita, tornando menos nítida a fronteira com ferramentas de consulta simples
- Ferramentas como apt, git, journalctl e systemctl frequentemente incluem Command e Inherit, e também reaparecem binários multifuncionais que combinam transferência de rede e operações de shell, como bee, pipx, sqlmap e a família vim
- Privilege escalation aparece limitado a alguns binários com link dedicado, e a ampla lista que vai de 7z a zypper mostra de relance as diferenças nas combinações de comportamento de ferramentas comuns
Distribuição principal de funcionalidades
- Itens dedicados à leitura de arquivos ou centrados em leitura aparecem de forma muito ampla
- Há também um grande número de itens com execução de shell
- Muitos itens combinam escrita em arquivos e leitura, o que torna menos clara a divisão com ferramentas meramente consultivas
- Execução de comandos ou herança de privilégios aparecem com frequência em gerenciadores de pacotes, ferramentas de sistema e programas interativos
- apt, apt-get, git, journalctl, man, systemctl, timedatectl, zless são exemplos representativos
Binários multifuncionais
- Binários multifuncionais com várias ações ao mesmo tempo aparecem repetidamente
-
Itens multifuncionais baseados em Inherit
- apport-cli, batcat, cargo, crash, gcloud, git, journalctl, man, opencode, psql, run-mailcap, systemd-resolve reúnem Inherit com Shell, Command, File read e File write
-
Itens que incluem rede e movimentação de arquivos
-
Família de editores e depuradores
-
Família de gerenciadores de pacotes e runtimes
Rede, shell e carregamento de bibliotecas
- As funções de upload/download aparecem não apenas em ferramentas de rede, mas também junto com shells e runtimes de linguagem
-
Ferramentas focadas em transferência
-
Reverse shell e Bind shell
-
Itens com Library load
1 comentários
Comentários do Hacker News
Como parece que houve confusão nos comentários, um exemplo de quando isso é usado em um contexto de segurança/CTF seria o seguinte
Em ambientes com shell restrito ou onde só é possível executar alguns comandos/binários, normalmente ainda dá para passar argumentos com bastante liberdade
Nesses casos, usando o GTFOBins, é possível chegar a leitura/escrita de arquivos ou até execução de comandos, escapar do contexto restrito e obter um shell
Se alguém deixou o sudo aberto ou deu o bit SUID a um GTFOBin, também pode ser possível ler ou escrever arquivos sensíveis e executar comandos privilegiados de formas que nem quem configurou imaginava
O tratamento de permissões é bem primitivo, centrado em block-list e allow-list
Uma vez, em uma sessão, dei por engano ao Claude permissão para powershell e, depois disso, quando ferramentas como git eram bloqueadas, ele contornava a restrição escrevendo scripts de powershell que faziam a mesma coisa e executando-os
Em um sistema normal, ninguém colocaria powershell numa allow-list geral, mas se houver lacunas entre os níveis de permissão por ferramenta, parece bem possível contornar usando as técnicas desta página
Em uma empresa, vi uma implantação em que programas presentes na allowlist definida pelo administrador podiam ser executados com
sudosem senha, e desde o início já estavam lá ferramentas genéricas como vim e bashTrabalhando de casa, isso até pareceu uma sorte, porque esse software que dizia "proteger" meu computador acabou tornando muito mais fácil para alguém chegar, enquanto eu saía por um instante e esquecia de bloquear a tela, e executar qualquer coisa
Alguns anos atrás, a equipe de suporte precisava fazer captura de rede com
tcpdump, então, para agilizar, criaram uma regra de sudo que deixava alguns argumentos relativamente abertosComo porta ou NIC podiam mudar, isso pareceu natural na época, mas na verdade a opção
-zdotcpdumppermite especificar um comando de compressão, então, colocando ali um comando "especial", dá para tomar o servidor inteirosudo tcpdump -i any -z '/home/despicable_me/evil_cmd.sh' -w /tmp/dontcare.pcap -G 1 -Z rootParece pequeno, mas esse tipo de coisa é realmente fácil de deixar passar
Hoje em dia camadas como apparmor às vezes reduzem esse risco, mas em troca trazem outros problemas e ainda são fáceis de configurar errado
A última vez que usei algo parecido foi em computadores de escola por volta de 1995, com Windows 3.11
Haviam bloqueado para só permitir a execução de alguns apps aprovados, e um deles era o Word
No Word, dava para usar macros e chamar o shell para executar outros aplicativos
Então aqueles computadores travados, que pareciam mostrar só alguns apps, na prática conseguiam executar qualquer coisa
Na época foi bem empolgante, e depois disso quase não vi mais casos parecidos
Às vezes vejo relatos de ser possível escapar do kiosk mode em displays touch de lojas ou shopping centers, e isso parece da mesma categoria
Ao ver
restic - Shell, Command, Upload, sinto que fica um pouco mais justificada a decisão de ajustar o backup para não rodar como rootEm vez disso, ele roda como usuário comum, recebendo apenas a capability de ler todos os arquivos, e sem shell de login
Claro que, em desktop, isso talvez seja exagero, e um invasor que chegasse tão longe provavelmente já conseguiria ler quase todos os arquivos e implantar um backdoor no backup mesmo assim
[0] https://man7.org/linux/man-pages/man7/capabilities.7.html
Há formas de lidar com atacantes humanos remotos, bots remotos e até, em certa medida, atacantes humanos locais, mas bots locais capazes de escrever código por conta própria viraram um alvo que exige muito mais atenção do que antes
Isso também não é exatamente a mesma categoria de malware
Eu mesmo já tratei contêineres como esse tipo de fronteira e fiz todos os processos internos rodarem como root, mas com LLM no meio fica difícil saber se a segurança em nível de sistema operacional de repente ficou mais importante ou se ficou menos relevante
Fiquei confuso: isso quer dizer usar
base64 /path/to/input-file | base64 --decodeno lugar decat /path/to/input-filequando não existecat?Ou quer dizer que
base64 /path/to/input-file | base64 --decodecontorna a própria permissão de leitura do arquivo?O processo chamado normalmente herda as permissões do usuário que o executou, e só há exceção quando existe setuid bit
A ideia é que, em ambientes que tentam impedir a movimentação lateral do atacante desabilitando ferramentas Unix padrão, ainda é possível fazer a mesma coisa com outras ferramentas
Não se trata de furar a permissão em si, mas de obter o mesmo resultado com outro binário dentro de um shell restrito onde apenas alguns comandos são permitidos
Isso é realmente muito comum em CTF
Rodando
base64como root para codificar o conteúdo do arquivo em base64 e decodificando a saída com outro processo base64, no fim você consegue ver o conteúdo do arquivoNa prática, vira um
catcom etapas extrasEu era mantenedor de uma dessas ferramentas e foi engraçado ver alguém conseguir um shell com ela
É criativo, divertido e um bom material de referência
Quando eu fazia
hackthebox.eu, usava isso demaisO GTFOBins já existe faz bastante tempo e já era um recurso útil antes da IA
O motivo de a IA ser útil é justamente conseguir trazer à tona materiais úteis como esse, que já existiam
Não entendo muito bem por que
base64está na listaPelo que penso, isso só conseguiria ler arquivos aos quais o usuário já tem acesso; será que estou enganado?
Ou a descrição de contornar restrições locais de segurança em sistemas mal configurados quer dizer algo diferente do que entendi?
O exemplo mais simples é trocar o shell padrão por rbash: se o usuário puder simplesmente executar
bashe entrar num shell normal, a restrição perde o sentidosudoerspode ter sido configurado para permitir executar base64 como rootNão sei por que alguém faria isso, mas, nessa situação, isso permitiria contornar a limitação de privilégios pretendida e ler qualquer arquivo do sistema
Ou, se o Claude Code estiver configurado para permitir executar
base64sem revisão, isso pode acabar abrindo acesso até a arquivos secretos como.envSeja por estarem explicitamente permitidas em
sudo -l, seja porque outra coisa as chama como rootSeria bom mostrar também formas de mitigação para esses desvios
Por exemplo, no caso de obter um shell via
moredefinir
SHELLcomo/bin/falseantes de executarmoretrocar para
lessem secure modeou, se
moreestiver sendo usado comsudo, usar a flag NOEXECO resto, no fim das contas, depende um pouco da sorte
Bem legal, e aparecem abordagens criativas que eu não esperava
Por exemplo, eu nunca teria pensado em yt-dlp
Acho que vou repensar instalar isso por padrão