Passo 3: O Parser do PDO (A Confusão)
Agora, vamos analisar com calma como o PDO interpreta essa query que ele mesmo montou.
O Gatilho da Confusão: O parser do PDO encontra a crase de abertura
que encontrar aqui dentro."
A Quebra: No entanto, dentro dessas crases, ele encontra o payload do atacante. O null byte (
A Reinterpretação: Nessa reavaliação, ele vê o
A "Cegueira" do Parser: Imediatamente após, o parser vê o caractere
O resultado é que o PDO conclui que a consulta tem apenas um marcador (
Agora, vamos analisar com calma como o PDO interpreta essa query que ele mesmo montou.
O Gatilho da Confusão: O parser do PDO encontra a crase de abertura
(`\) que estava no código original e pensa: "Ok, estou lendo um nome de coluna. Vou ignorar qualquer ?`
que encontrar aqui dentro."
A Quebra: No entanto, dentro dessas crases, ele encontra o payload do atacante. O null byte (
\0) no final age como um terminador inesperado e quebra a leitura do nome da coluna. O parser fica confuso e reavalia o que acabou de ler.A Reinterpretação: Nessa reavaliação, ele vê o
? não mais como parte de um nome de coluna, mas como um marcador de parâmetro válido.A "Cegueira" do Parser: Imediatamente após, o parser vê o caractere
#. Ele o reconhece como o início de um comentário do MySQL e para de analisar a query ali. Por isso, ele ignora completamente a parte " FROM fruit WHERE name = ?", pois acredita que tudo aquilo é um comentário.O resultado é que o PDO conclui que a consulta tem apenas um marcador (
?) para substituir: aquele que o atacante injetou.