Olá Gustavo.
Tudo bem?
Sobre o erro que você encontrou ao tentar usar o comando =Pets' UNION SELECT * FROM users --
, a explicação está relacionada à estrutura das tabelas que você está tentando unir com o comando UNION. No SQL, o comando UNION é usado para combinar os resultados de duas ou mais consultas SELECT. No entanto, para que o UNION funcione corretamente, cada SELECT dentro do UNION deve ter o mesmo número de colunas na consulta, e essas colunas devem ter tipos de dados compatíveis.
No seu primeiro comando, ao usar SELECT *
, você tenta selecionar todas as colunas da tabela users
. Se a tabela de onde você está tentando extrair os dados inicialmente (no seu contexto, parece ser uma tabela relacionada a produtos) não tiver o mesmo número de colunas que a tabela users
, isso resultará em um erro, pois o SQL não será capaz de unir os resultados de forma adequada.
No segundo comando que funcionou, =Pets' UNION SELECT username, password FROM users --
, você especificou exatamente quais colunas queria selecionar (username
e password
). Isso provavelmente corresponde ao número e tipo de colunas que estão sendo selecionadas na consulta original que você está tentando injetar. Por exemplo, se a consulta original está selecionando duas colunas (como um título e uma descrição de produto), seu comando UNION precisa também selecionar exatamente duas colunas, o que você fez corretamente na segunda tentativa.
Portanto, o segredo aqui é garantir que o número de colunas e os tipos de dados nas colunas correspondam em todas as consultas que você está unindo com UNION. Isso explica por que a segunda abordagem foi bem-sucedida.
Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.