PHP e Null Bytes issues

  1. if (file_exists(realpath($_GET[‘teste’] . “.php”))){
  2. echo ‘OK’;
  3. }
  4. else{
  5. echo ‘Fail’;
  6. }

Aparentemente esta verificação é bastante segura né?

Infelizmente não. O PHP usa o padrão de strings usado em C (aquelas terminadas com ‘\0′), o que gera um problema bastante conhecido chamado de Null Byte issue [1].

O que acontece se seu $_GET['teste'], aparentemente seguro, tiver um ‘\0′?
Sua função realpath vai verificar apenas o $_GET['teste'] e nem vai saber que existe um “.php”

Faça o teste:

http://localhost/labs/teste.php?teste=/etc/passwd%00
(%00 é o código hexadecimal aceito pelos browsers para o \0)

E o resultado:

OK

[1] http://en.wikipedia.org/wiki/Null_character

Comments (1) left to “PHP e Null Bytes issues”

  1. Fernando Bittencourt wrote:

    Post muito útil, Danilo.

    Acredito que a maneira mais simples de contornar esse problema seja o uso de trim() ou rtrim(), que retiram, entre outros caracteres, o byte NULL.

Post a Comment

*Required
*Required (Never published)