Pular para o conteúdo
Todos os conceitos

Ler outra tabela com UNION

O UNION anexa à resposta uma linha vinda de qualquer tabela, se as colunas casarem.

O UNION do SQL junta o resultado de dois SELECT numa lista só. Numa injeção, isso deixa o atacante anexar à resposta da página linhas vindas de outra tabela, bem diferente da que a consulta devia ler. A regra é uma: os dois lados do UNION precisam ter o mesmo número de colunas.

Por isso o primeiro passo é contar as colunas. Duas técnicas:

  • ORDER BY n: ordena pela coluna de número n. Vai funcionando até n passar do total, quando dá erro. O maior n que funciona é o número de colunas.
  • UNION SELECT NULL, NULL, ...: só funciona com o número exato de colunas; você aumenta os NULL até parar de dar erro.

Sabendo o número (digamos 4) e quais posições a página imprime, você monta -1 UNION SELECT NULL, name, email, NULL FROM employees: o -1 zera o resultado original, e os campos da outra tabela caem nas colunas visíveis.

consulta original (4 colunas) id name price description oculta impresso na pagina UNION SELECT (4 colunas) da tabela employees NULL name email note o segredo mesmo numero de colunas
A consulta original tem quatro colunas e imprime três; o UNION SELECT com quatro colunas anexa uma linha da tabela employees, que aparece no lugar do produto.

Aparece nestes desafios