Pular para o conteúdo

Conceitos

A biblioteca de conceitos da TocaiaCTF: a ideia por trás de cada desafio, para estudar na ordem que você quiser.

188 conceitos

A defesa contra SSTI A entrada do usuário entra como dado no contexto, nunca na linguagem do template.A defesa contra XSS Codificar a saída conforme o contexto fecha a falha; uma CSP sem `unsafe-inline` é a rede de segurança.A defesa, negar por padrão Decida o acesso no servidor, negue por padrão e cheque por recurso e por ação; nunca confie no cliente.A janela entre o patch e a aplicação O conserto costuma existir antes do ataque; o risco mora no tempo até ele ser instalado.Acesso decidido por um parâmetro Quando um parâmetro (um filtro, um nome de arquivo) escolhe o recurso, trocá-lo alcança o dado de outra pessoa.Adulterar um dado serializado Decodificar o blob, trocar um campo, recodificar, e o servidor aceita o objeto alterado.AES em modo CTR O modo CTR transforma o AES numa cifra de fluxo; para decifrar, é preciso a chave e o contador inicial exato.Análise de frequência Em qualquer língua algumas letras aparecem muito mais que outras, e isso denuncia a tabela de uma substituição.Análise de logs Um log é um diário do sistema, uma linha por evento, que você filtra e conta.Anatomia de um JWT Um JWT é só três textos codificados, colados por pontos. Nada ali é secreto.Anatomia de uma URL Quem manda num link é o domínio registrado, no fim do host. O resto é texto que o dono escreve como quiser.Arquivos apagados e recuperação Apagar um arquivo quase nunca apaga os dados; o sistema só marca o espaço como livre.Arquivos dentro do HTTP Sem HTTPS, tudo que o navegador baixa passa inteiro pela rede e pode ser tirado da captura como arquivo.Arquivos que o site não mostra Nem todo arquivo no servidor tem um link, mas quem sabe o nome acessa.Arquivos ZIP Um ZIP é um contêiner de arquivos, com um índice no fim.Árvore de dependências As dependências diretas que você declara trazem outras, as transitivas; a maioria dos pacotes que você roda está fundo na árvore.ASCII: letras como números Computadores guardam cada caractere como um número.Assinatura de arquivo Os primeiros bytes de um arquivo dizem o que ele é, não a extensão.Assinatura presente mas não verificada Uma assinatura só protege se alguém a conferir com uma chave secreta; presente e ignorada, não vale nada.Ataque de força bruta Testar muitas senhas até uma funcionar. No log, vira uma pilha de falhas seguida de um sucesso.Ataque de texto conhecido Quem sabe um pedaço da mensagem original consegue tirar dele a chave.Atribuição em massa Quando o servidor copia todos os campos do pedido para o modelo, um campo extra (role) muda o que não devia.Autenticação de e-mail: SPF, DKIM e DMARC Um pass quer dizer que algum domínio assumiu a mensagem, não que ela é honesta. O que importa é qual domínio passou e se ele é o do From.Autonomia em excesso Dê ao agente só as ferramentas e as permissões que ele precisa; o executor é que decide o que roda, nao o modelo.Autorização por função Checar acesso por lista de bloqueio, por método ou por grafia deixa funções de admin abertas para quem não devia.Aviso de vulnerabilidade Um aviso diz qual pacote é afetado e em qual faixa de versões; a sua versão só é vulnerável se cair dentro da faixa.Backup exposto Um arquivo .bak ou .old na raiz web é servido como texto e mostra o código e os segredos.Base64 Um jeito de escrever qualquer dado usando só letras, números, + e /.Base85 Uma codificação que usa 85 caracteres imprimíveis e guarda 4 bytes em 5 caracteres.Beaconing Um programa malicioso que liga para o servidor do atacante em intervalos regulares, como um relógio. A regularidade é o que o denuncia.Best-fit, o caractere que troca de pele Ao converter entre codificações, um caractere sem par vira um ASCII parecido, e isso muda o sentido.Billion laughs Entidades que se referenciam em camadas crescem de forma explosiva e podem travar o parser.Boleto: linha digitável e dígitos verificadores Os 47 números do boleto dizem banco, vencimento e valor, e trazem dígitos verificadores que pegam número trocado.Burlar o login Uma condição sempre verdadeira faz o banco aceitar um login sem a senha certa.Cabeçalho que vira expressão Quando um framework avalia uma linguagem de expressão sobre dado do usuário, o dado roda como código.Cabeçalhos de e-mail O campo De é fácil de forjar. Os cabeçalhos Received contam por onde a mensagem passou de verdade.Cadeia de gadgets (o conceito) Desserializar classe arbitrária deixa o atacante escolher objetos existentes cujos métodos automáticos encadeiam até um efeito danoso.Cadeia de suprimentos de software Seu app instala e roda uma árvore inteira de pacotes de terceiros; confiar nele é confiar em todos eles.Camadas e endereços Cada pacote é um envelope dentro de outro: o Ethernet leva o IP, o IP leva o TCP ou o UDP, e dentro vai a mensagem.Caminhos numa grade A busca em largura acha o caminho mais curto num mapa de casas, visitando primeiro as mais próximas.Captura de pacotes Um arquivo .pcap guarda cada pacote que passou pela rede, e o Wireshark mostra o que tem em cada um.Chave previsível Uma chave de 128 bits tirada de algo previsível só tem tantas possibilidades quanto a sua origem; chave boa vem do sorteio do sistema.Chave usada duas vezes Uma chave aleatória do tamanho da mensagem é inquebrável, desde que seja usada uma vez só.Cifra de César Cada letra anda um número fixo de casas no alfabeto.Cifra de Vigenère Uma César diferente para cada letra, comandada por uma palavra-chave.Cifras de substituição Cada letra é trocada por outra, sempre a mesma.Cifras de transposição As letras continuam as mesmas; só a ordem muda.Codificar não é cifrar Codificação muda a forma; cifra esconde o conteúdo com uma chave.Código do autenticador O segundo fator de 6 dígitos que muda a cada 30 segundos, calculado do segredo e do relógio.Código-fonte da página O navegador recebe o HTML inteiro, e você pode lê-lo.Como fechar a falha Não desserializar dado não confiável; se precisar, assinar e verificar antes, usar formato só de dados e lista de permissão.Como fechar a injeção de comando Não chame o shell, passe os argumentos como lista e valide a entrada por lista de permissão.Como fechar o SSRF Analise a URL, permita só hosts da lista, bloqueie faixas internas pelo IP resolvido, não siga redirecionamento e fixe o IP.Comparar versões com diff O diff mostra só as linhas que mudaram entre dois arquivos, com < para a versão velha e > para a nova.Conexões e fluxos TCP O TCP numera cada byte, e é por esses números que dá para remontar uma conversa inteira, mesmo picada e fora de ordem.Conferir um token direito Verificar um token é conferir a assinatura, fixar o algoritmo e checar as claims, não só decodificar.Confiança cega na resposta O modelo afirma coisas com confiança mesmo quando nao sabe; nao use a resposta como fonte de verdade.Consulta parametrizada O comando vai com um espaço reservado, e o valor vai por fora, como dado, nunca como comando.Consulta por prefixo Checar se uma senha vazou sem entregar a senha, mandando só os primeiros símbolos do hash.Consultas DNS com dig O dig pergunta qualquer coisa ao DNS: endereços (A, AAAA), nome reverso (PTR), textos como o SPF (TXT) e servidores (NS).Contornando listas de permissão Validar a URL como texto não é validar o host; fragmento, query, userinfo e codificações enganam a checagem.Contornar o filtro Uma lista negra olha a forma do texto; o atacante escreve a mesma coisa de outra forma.Contornar um filtro ingênuo Uma lista de proibição que só apaga `<script>` deixa passar dezenas de outros vetores.Controle de acesso quebrado O sistema confere que você entrou, mas não confere se você pode fazer aquela ação naquele recurso.Controle só no cliente Esconder um botão ou uma opção no navegador não tranca a rota por trás; o servidor ainda responde.Cookies Um pedaço de texto que o site guarda no seu navegador, e que você controla.Credencial de fábrica O aparelho vem com um login padrão impresso no manual. Se ninguém troca, é senha pública.Datas dentro do ZIP Um ZIP guarda a data de cada arquivo em mais de um campo, cada um com seu fuso e seu limite.Deduzir com uma tabela Marcar numa tabela o que cada pista proíbe até sobrar uma única possibilidade.Delegação e servidores autoritativos O DNS é uma árvore de zonas: cada pai diz, em registros NS, qual servidor responde pela zona filha, e só esse dá resposta autoritativa (aa).Derivação de chave Uma função de derivação transforma uma senha (mais um sal) numa chave de tamanho fixo, de propósito devagar.Desmontar e descompilar Um executável é código de máquina. O desmontador mostra esse código em assembly, e o descompilador tenta voltar a algo parecido com C.DNS: perguntas e respostas O DNS traduz nomes em endereços, e cada resposta traz registros de um tipo: A, AAAA, CNAME, MX, TXT.DNSSEC Com DNSSEC, cada zona assina os seus registros, e o pai publica um resumo da chave do filho (DS). O algoritmo de assinatura é um número: 8 é RSA, 13 é ECDSA, 15 é Ed25519.Dump de memória flash A cópia da memória de um aparelho embarcado traz o firmware e, numa partição própria, a configuração dele.Endpoint de diagnóstico Painéis de status e configuração ajudam a operar o sistema, e abrem tudo se ficam públicos.Engenharia social O golpe ataca a pessoa, não o sistema, com pressa, emoção e troca de canal. A defesa é confirmar por um canal que você já conhecia.Entidade externa Uma entidade SYSTEM manda o parser buscar um arquivo ou URL e colar o conteúdo no documento.Entidades de parâmetro e fora de banda Entidades com % vivem dentro do DTD e permitem vazar dados por uma URL, mesmo sem ver a resposta.Entrada que vira comando O perigo começa onde um valor que o usuário escolhe entra no texto de um comando.Erro detalhado Em produção, a página de erro do modo de depuração entrega caminho, versão e até segredos.Escapar para a execução A partir de um objeto comum, o atacante caminha pelo grafo de objetos até algo que executa.Espaço de chaves Quantas chaves existem, e por que poucas chaves significam cifra fraca.Esteganografia Esconder uma mensagem dentro de outro arquivo, como uma foto, de modo que ninguém perceba que ela existe.Exfiltração por DNS Quem quer tirar dados de uma rede vigiada pode escondê-los nos nomes consultados ao DNS, um pedaço por consulta.Faixa de versão e versão fixa Uma faixa como ^1.2.0 deixa a instalação puxar sozinha a versão mais nova que couber; uma versão fixa, não.Falsificação de ARP O ARP liga um IP a um endereço MAC sem conferir nada, e um atacante pode se passar pelo roteador.Fechando o XXE A defesa completa recusa o DTD; sem DTD não há onde declarar entidade, e todas as variantes somem.Filtrar dados grandes Com milhares de linhas, a resposta vem de filtrar, tirar repetidos e somar por grupo, nunca de ler no olho.Força de uma senha A força de uma senha é quantas combinações ela tem, e isso cresce com o tamanho e com o alfabeto.Forjar cabeçalhos de pedido Os cabeçalhos que o navegador envia (Referer, User-Agent) são escolhidos pelo cliente, então não servem para decidir acesso.Formato de flag O que é uma flag e como reconhecer que você achou uma.Função escondida numa variável de ambiente O Bash antigo importava funções de variáveis de ambiente e executava o que vinha depois delas.Funções de hash Uma impressão digital de tamanho fixo, que não tem volta.Guardar o hash, não a senha Um sistema sério nunca guarda a sua senha, só uma impressão digital dela que não tem volta.Hexadecimal Uma forma compacta de escrever bytes, com 16 símbolos.Homógrafos e punycode Letras de alfabetos diferentes podem ter o mesmo desenho. Por baixo, um nome com letra fora do ASCII vira um endereço que começa com xn--.HTTP: pedido e resposta Como o navegador conversa com um site, em pedidos e respostas de texto.Identificadores de sessão O identificador de sessão é uma senha temporária. Previsível ou fixável, ele troca de dono.Identificar o motor Cada motor de template tem uma sintaxe própria; o comportamento diante de sondas revela qual é.IDOR: trocar o número no endereço O site usa um id do endereço para buscar um dado e esquece de checar quem pode vê-lo.Imagem de disco Uma cópia byte a byte de um disco ou de uma partição, que a perícia examina sem ligar a máquina.Injeção cega Sem dados na tela, uma resposta de sim ou não vira um canal para ler o segredo bit a bit.Injeção de argumento Mesmo sem shell, um valor que começa com hífen pode virar uma OPÇÃO do programa, mudando o que ele faz.Injeção de comando Quando o programa monta uma linha de shell com o que você digita, o seu texto vira um comando do sistema.Injeção de comando cega Quando a saída do comando não volta para a tela, o tempo e um pedido de rede para fora viram o canal de resposta.Injeção de prompt O app junta a instrução dele e o texto do usuário num contexto só, e o modelo obedece ao texto do usuário.Injeção de prompt indireta A instrução maliciosa nao vem do usuário, vem de um documento que o app manda o modelo ler.Injeção de SQL Quando o site mistura o que você digita com o comando do banco, o texto vira comando.Injeção de template Quando a entrada do usuário entra no texto do template, o texto dela vira código do template.Integridade de arquivos Comparar o hash de um arquivo com o publicado prova que ele chegou igual, desde que a lista venha de um lugar confiável.Interpolação que busca sozinha Quando a biblioteca resolve ${...} dentro de um texto do usuário, o texto vira instrução.Ler além do que chegou Confiar num tamanho informado, em vez de medir o dado, faz o programa devolver memória vizinha.Ler código à mão Seguir um programa linha por linha, anotando os valores, para saber o que ele aceita ou faz.Ler outra tabela com UNION O UNION anexa à resposta uma linha vinda de qualquer tabela, se as colunas casarem.Linha do tempo do incidente Juntar os eventos de vários registros, em ordem de hora, numa única história.Listagem de diretório Sem um arquivo índice, o servidor pode listar os arquivos da pasta. Aparece o que ninguém linkou.Log de acesso web Uma linha por requisição ao site, com endereço, caminho pedido, código de resposta e tamanho.Log de auditoria do banco Registra cada consulta ao banco; serve para medir quanto dado alguém leu, sem contar duas vezes.Log de autenticação O registro de quem tentou entrar no servidor, com sucesso ou não.Log de segurança do Windows O Windows registra cada login, cada falha de senha e cada programa aberto com um número de evento. Alguns números contam quase toda a história de uma invasão.Login no HTTP O HTTP Basic manda usuário e senha juntos, só codificados em Base64, que qualquer um lê.Mapeamento de IP para ASN Todo endereço IP público pertence a uma rede (um ASN), anunciada como um bloco (um prefixo BGP). Serviços como o da Team Cymru dizem qual é a rede de cada IP.Mapear o banco O próprio banco guarda a lista das suas tabelas e colunas, e a injeção pode lê-la.Máquina de instruções Registradores, instruções simples e saltos; executar à mão ou com um interpretador mostra o que o programa faz.Metacaracteres do shell Um punhado de caracteres não é texto para o shell: eles separam comandos, encanam saída e rodam comandos dentro de comandos.Metadados Informações que o arquivo guarda sobre si mesmo.Metadados de nuvem Instâncias de nuvem perguntam sobre si mesmas num endereço link-local fixo que, sem autenticação, pode guardar credenciais.Modo ECB O ECB cifra cada bloco de 16 bytes sozinho; blocos iguais saem iguais, e a forma da mensagem aparece no cifrado.MQTT Um protocolo leve de publicar e assinar mensagens por tópicos, muito usado em aparelhos de IoT.Navegação forçada Uma página sem link não está protegida; quem descobre o endereço e digita chega nela.Nomes de arquivo encrencados Um ponto no começo esconde o arquivo; espaço, hífen e apóstrofo no nome confundem o shell.Notificação de incidente na LGPD Quem vazou dados pessoais precisa avisar a ANPD e as pessoas afetadas, em prazo definido.O algoritmo none A assinatura é o que torna o token confiável. Um servidor que aceita alg none abre mão dela.O contexto da saída Onde a entrada cai (corpo, atributo, dentro de script) decide o que o payload precisa fazer para virar código.O contexto do template Um template enxerga tudo o que o programa colocou no contexto, inclusive segredos.O que é desserialização insegura Ler bytes do cliente de volta para um objeto e confiar nesse objeto como se o servidor o tivesse criado.O que é SSRF Um recurso busca uma URL que você controla, e quem abre a conexão é o servidor, de dentro da rede dele.O sal Um valor diferente por conta, somado à senha antes do hash, para que senhas iguais não virem hashes iguais.O terminal Uma janela onde você digita comandos; pwd, ls, cd e cat bastam para andar pelas pastas e ler arquivos.O tipo embutido no dado Quando o dado carrega o próprio tipo e o servidor usa esse tipo para escolher código, o cliente escolhe o código.Pacotes tar e gzip O tar junta vários arquivos num só, o gzip comprime um arquivo; .tar.gz é os dois, e o comando file diz o que cada arquivo é.Padrões e sequências Achar a regra que explica todos os termos de uma sequência e usá-la para prever o próximo.Path traversal Usar `..` para sair da pasta que o site pretendia servir e ler outros arquivos.Permissões de arquivo Cada arquivo diz quem pode ler, alterar e executar, separando o dono, o grupo e todo o resto.Persistência do atacante Depois de entrar, o atacante deixa uma porta para voltar, como uma conta nova ou uma chave.Pipes, um comando alimenta o outro A barra vertical liga a saída de um comando à entrada do próximo; com sort, uniq -c e wc você conta qualquer coisa.Pix copia e cola (BR Code) O código do Pix é uma fila de campos, cada um com ID, tamanho e valor. A chave que recebe o dinheiro fica dentro do campo 26.Por dentro do PNG Um PNG é uma assinatura fixa seguida de blocos, e cada bloco tem tamanho, tipo, dados e um código de verificação.Por dentro do ZIP Cada arquivo de um ZIP vem com um cabeçalho local que diz nome, tamanhos e método; o índice do fim só repete isso.Prever um gerador pseudoaleatório Um gerador comum, como o random do Python, tem estado interno; quem descobre o estado prevê todos os próximos números.Princípios da LGPD O art. 6º da LGPD lista dez princípios que todo tratamento de dados pessoais precisa seguir.Procurar com grep e find O grep procura dentro dos arquivos, pelo conteúdo; o find procura os arquivos pela ficha deles, como nome, tamanho e data.Protocolo binário Quando cliente e servidor trocam mensagens em bytes, o próprio código do cliente ensina o formato, e você pode montar as mensagens na mão.Protocolos de hora Máquinas contam a hora pela rede de vários jeitos: NTP, o protocolo Time (porta 37), Daytime (porta 13) e o cabeçalho Date do HTTP. Os mais antigos contam segundos desde 1900.Reconhecer o tipo de hash O formato de um hash (o tamanho e o começo) já diz qual algoritmo o gerou.Registros de fluxo de rede Um resumo de cada conversa na rede: origem, destino, porta e quantos bytes correram.Reúso de senha Uma senha vazada num lugar, testada em muitas contas de outro, derruba quem repetiu a senha.RSA A chave pública cifra e só a privada decifra; a segurança está em ninguém conseguir fatorar o módulo n.Scripts de instalação (postinstall) Um pacote pode declarar um script que o instalador roda sozinho na instalação, com as suas permissões.Segredo HMAC fraco Com HS256, quem sabe o segredo pode assinar qualquer token. Um segredo adivinhável entrega isso.Segredo no contexto Qualquer dado que o app poe no contexto pode sair; proteger só a palavra exata nao protege o dado.Segurança nos cabeçalhos A resposta HTTP controla boa parte da defesa pelos cabeçalhos: CORS, cookie e proteções.Semente de números pseudoaleatórios O computador não sorteia de verdade. A partir da mesma semente, o gerador repete sempre a mesma sequência.Senha em texto claro Protocolos antigos como FTP, Telnet e HTTP sem TLS mandam usuário e senha do jeito que foram digitados.Serviços internos e localhost Muitos serviços confiam em quem está na rede interna ou no localhost; o SSRF põe o servidor lá por você.Sessão guardada no cliente Se o crachá fica no navegador e o servidor confia nele como veio, o cliente decide quem é.SSRF cego (fora de banda) Quando a resposta não volta para você, o sinal é a chamada chegar num host seu, ou uma diferença de tempo.SSTV, imagem transmitida como som Radioamadores mandam fotos pelo rádio transformando cada ponto da imagem num tom. Um decodificador refaz a imagem a partir do áudio.Teclado USB numa captura Um teclado USB manda cada tecla em 8 bytes, e uma captura do barramento USB mostra tudo o que foi digitado.Termos-chave da LGPD O art. 5º da LGPD define dado pessoal, dado sensível, titular, controlador, operador e encarregado.Texto como número Um texto vira bytes, e os bytes em fila formam um único inteiro em base 256; é assim que o RSA enxerga a mensagem.Texto dentro de binários Arquivos binários quase sempre têm trechos de texto legível escondidos.TLS e o nome do servidor (SNI) O HTTPS cifra o conteúdo, mas o nome do site vai às claras no primeiro pacote, o ClientHello.Tratar a saída do modelo A resposta do modelo é entrada nao confiável; usar adiante sem validar vira injeção em outro sistema.Túnel por ICMP O ping tem um corpo livre, e dá para esconder dados nele para sair sem passar pelo caminho normal.Typosquatting de pacotes Um pacote malicioso ganha um nome quase igual ao de um popular, para você instalar o errado por um erro de digitação.Varredura de portas Uma varredura testa centenas de portas em segundos, e a resposta a cada SYN diz se a porta está aberta, fechada ou filtrada.Vazamento do prompt de sistema Tudo que está no prompt de sistema pode ser arrancado; ele nao é um lugar seguro para esconder segredo ou regra.Web shell Um arquivo que o atacante planta no site e que executa comandos passados pela URL.Whois e RDAP Todo domínio tem uma ficha pública de registro: quem é o registrador, quando foi criado, quando expira. O whois e o RDAP mostram essa ficha.XML, DTD e entidades Um XML pode declarar apelidos (entidades) num bloco DTD, e o parser os troca pelo valor quando lê.XOR Uma operação entre bits que se desfaz aplicando a mesma chave de novo.XOR com chave repetida Uma chave de vários bytes repetida ao longo da mensagem, como a Vigenère, só que com bytes.XSS armazenado O payload é salvo no servidor e roda sozinho para todo mundo que abrir a página.XSS baseado em DOM A falha está só no JavaScript do cliente: ele lê uma fonte que você controla e a joga num sink perigoso.XSS refletido O site devolve na página o que você mandou, e o navegador executa isso como código.ZIP com senha Um ZIP pode cifrar o conteúdo com uma senha, mas a lista de arquivos continua à vista.