SlideShare uma empresa Scribd logo
Desofuscando um webshell em PHP
POR RICARDO LOGAN
Ao ajudar um amigo em uma perícia sobre crimes virtuais
em um servidor Web comprometido, nos deparamos
com um código que nos deixou intrigados. O código
estava ofuscado, então resolvemos desofuscar e ver do que
se tratava. Foi então que chegamos a conclusão que era
um webshell (backdoor) feito em PHP, escondido dentro do
código de uma página de erro 404 (Not Found). O objetivo
desse artigo é demonstrar como foi feita a desofuscação do
webshell.
Um trecho do código encontrado na página de erro 404
pode ser visto no Código 1.
preg_replace é uma função que realiza busca e substituição
utilizando expressão regular. Ressalta-se o uso da flag “e”,
que ocasionará a execução de código presente na string.
A string que potencialmente possui código malicioso está
presente no segundo parâmetro da chamada da função
preg_replace (Código 1). Nota-se que ela está ofuscada. Para
fins didáticos, a string ofuscada foi dividida em 3 partes: a
ideia é separar a utilização de representação hexadecimal
(Partes 1 e 3) dos demais caracteres (Parte 3).
Olhando rapidamente para as Partes 1 e 3, aparentemente,
nota-se a utilização de caracteres ASCII representados em
hexadecimal. A fim de se obter os caracteres ASCII dessas
duas partes, foi desenvolvido o programa analise.c, que
pode ser observado no Código 2. A Listagem 1 ilustra a
execução de tal programa.
Bingo! Observando os resultados obtidos na Listagem 1,
podemos perceber que realmente as partes 1 e 3 tratam-se
de caracteres ASCII representados em hexadecimal.
A primeira parte da string nada mais é do que uma
chamada para as funções eval, gzinflate e base64_decode.
Essas funções serão interpretadas em tempo de execução
por causa do modificador “e”, que pode ser observado na
chamada da função preg_replace no Código 1.
Adicionalmente, ressalta-se que a segunda parte da string
será submetida diretamente à função base64_decode, logo
percebe-se que ela se trata de dados codificados com
Base64.
A terceira parte da string ofuscada simplesmente fecha os
parêntesis abertos pela primeira e encerra o comando PHP
com um“;”.
Até agora foi descoberto que a chamada a preg_replace,
observada no Código 1, ocasionará a interpretação do
código presente na Listagem 2.
Observando a Listagem 2, nota-se claramente que a
segunda parte da string é um parâmetro passado para a
função base64_decode. Logo, essa parte é uma string com
dados codificados em Base64. Desta forma, tem-se que o
primeiro e último caracteres da Parte 2 são, simplesmente,
indicadores para que o PHP interprete o resto dos dados
dessa parte como string.
A fim de desobfuscar a segunda parte da string, foi
desenvolvido o programa analise2.php (Código 3), cujo
objetivo é desfazer as ações realizadas pelas funções
presentes na Listagem 2.
A execução do programa analise2.php pode ser observada
na Listagem 4.
Código 1 –Trecho de código encontrado na página de erro 404. O código completo pode ser obtido em [1].
Parte 1 – Primeira parte da string ofuscada.
Parte 2 – Segunda parte da string ofuscada. Essa parte pode ser vista em sua totalidade em [2].
Parte 3 – Última parte da string ofuscada.
Código 2 – Programa analise.c.
Código 3 – Programa analise2.php.
Listagem 1 – Execução do programa analise.c nas Partes 1 e 3 da string ofuscada.[1].
Listagem 2 – Código a ser interpretado como resultado da chamada a preg_replace observada no Código 1.
21
Pronto! Agora basta abrir o arquivo
webshellfinal.php para ver a string que
estava ofuscada (Listagem 5).
Analisando a Listagem 2, percebe-se
que o código presente na Listagem
5 é o que, de fato, será interpretado
pelo PHP. Agora, fica a cargo do leitor
estudar o funcionamento do webshell.
NOTA DO EDITOR:
Durante o processo de revisão deste artigo,
notou-se que alguns antivírus consideraram
o documento .docx enviado pelo autor como
infectado. Após alguns testes, ficou claro que
o motivo de tal comportamento foi a presença
dasstringsrelativas aoscódigoselistagensaqui
presentes. Após alguns outros testes, obteve-se
um resultado curioso:
1. O código presente em [1] foi submetido
ao virustotal.com. Resultado: de 55 antivírus
utilizados, 28 detectaram o arquivo como sendo
malicioso.
2. Do código presente em [1], apenas uma
modificação foi realizada: na linha do preg_
replace(),aprimeirarepresentaçãohexadecimal
(“x65”)foisubstituídapelorespectivocaractere
(“e”).Utilizandoovirustotal.com,somente6dos
55 antivírus detectaram o arquivo como sendo
malicioso.
Fica uma sugestão de exercício aos leitores:
utilizar o código presente em [1] e o site
virustotal.com para estudar o comportamento
dos antivírus.
Referências:
[1]Códigocompleto.Disponívelem:http://pastebin.
com/GxNe5DhM. Acessado em: 07/09/2014.
[2] Parte 2 ofuscada. Disponível em: http://pastebin.
com/501LVZa6. Acessado em: 07/09/2014.
[3] Parte 2 desofuscada. Disponível em http://
pastebin.com/sAGqxJP9. Acessado em: 07/09/2014.
Listagem 4 – Execução do programa analise2.php.
Listagem 5 – Segunda parte da string desofuscada.
RICARDO LOGAN
Analista de segurança, formado em ciências da computação e pós-graduado
em segurança da informação. Entusiasta em pesquisas sobre malware e testes
de intrusão. Conhecimento em configuração, hardening e tunning em várias
plataformas, tais como Windows, Linux, Cisco. Contribui para comunidade
Slackware Brasil (Slackshow e Slackzine) e faz parte do Staff dos eventos H2HC,
SlackwareShow e Bsides SP.

Mais conteúdo relacionado

PPTX
Mail server on linux
POTX
IBM Domino / IBM Notes Performance Tuning
PDF
(130216) #fitalk potentially malicious ur ls
PDF
Spo2 t19 spo2-t19
PDF
Applying Anti-Reversing Techniques to Machine Code
PDF
Binary Obfuscation from the Top Down: Obfuscation Executables without Writing...
PPT
Intrusion detection and prevention
PDF
Generic attack detection engine
Mail server on linux
IBM Domino / IBM Notes Performance Tuning
(130216) #fitalk potentially malicious ur ls
Spo2 t19 spo2-t19
Applying Anti-Reversing Techniques to Machine Code
Binary Obfuscation from the Top Down: Obfuscation Executables without Writing...
Intrusion detection and prevention
Generic attack detection engine

Destaque (20)

PPT
Applciation footprinting, discovery and enumeration
PDF
Obfuscation, Golfing and Secret Operators in Perl
PDF
EvasionTechniques
PPTX
Back to the CORE
PPTX
Attack on the Core
PDF
CSIRT_16_Jun
PPTX
TakeDownCon Rocket City: WebShells by Adrian Crenshaw
PPTX
Endpoint Security Evasion
PDF
Deobfuscation and beyond (ZeroNights, 2014)
PPT
Top Tactics For Endpoint Security
PDF
Got database access? Own the network!
PPTX
An Introduction of SQL Injection, Buffer Overflow & Wireless Attack
PPTX
Roadsec 2016 Mach-o A New Threat
PPTX
Windows Kernel Exploitation : This Time Font hunt you down in 4 bytes
PPTX
Endpoint Protection
PDF
Expanding the control over the operating system from the database
PPT
Detection of Idle Stealth Port Scan Attack in Network Intrusion Detection Sys...
PPT
Network Security
PDF
AntiVirus Evasion Reconstructed - Veil 3.0
PDF
Object Oriented Exploitation: New techniques in Windows mitigation bypass
Applciation footprinting, discovery and enumeration
Obfuscation, Golfing and Secret Operators in Perl
EvasionTechniques
Back to the CORE
Attack on the Core
CSIRT_16_Jun
TakeDownCon Rocket City: WebShells by Adrian Crenshaw
Endpoint Security Evasion
Deobfuscation and beyond (ZeroNights, 2014)
Top Tactics For Endpoint Security
Got database access? Own the network!
An Introduction of SQL Injection, Buffer Overflow & Wireless Attack
Roadsec 2016 Mach-o A New Threat
Windows Kernel Exploitation : This Time Font hunt you down in 4 bytes
Endpoint Protection
Expanding the control over the operating system from the database
Detection of Idle Stealth Port Scan Attack in Network Intrusion Detection Sys...
Network Security
AntiVirus Evasion Reconstructed - Veil 3.0
Object Oriented Exploitation: New techniques in Windows mitigation bypass
Anúncio

Mais de Ricardo L0gan (6)

PPTX
Nullbyte 6ed. 2019
PPTX
H2HC - R3MF
PPTX
Andsec Reversing on Mach-o File
PPTX
Bsides SP 2015 - Mach-O - A New Threat
ODP
Latinoware 2015 Mach-O
PPTX
Bhack 2015 - mach-o Uma Nova Ameaça
Nullbyte 6ed. 2019
H2HC - R3MF
Andsec Reversing on Mach-o File
Bsides SP 2015 - Mach-O - A New Threat
Latinoware 2015 Mach-O
Bhack 2015 - mach-o Uma Nova Ameaça
Anúncio

Último (20)

PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PPTX
Curso de Java 11 - (Serializable (Serialização de Objetos)).pptx
PPTX
Curso de Java 12 - (JDBC, Transation, Commit e Rollback).pptx
PPTX
Curso de Java 17 - (JEE (Sessões e Cookies)).pptx
PPTX
Curso de Java 15 - (Uso de Servlets (Entendendo a Estrutura)).pptx
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PPTX
Aula sobre banco de dados com firebase db
PPTX
Curso de Java 16 - (JEE (Utilizando o Padrão MVC)).pptx
PPTX
Curso de Java 14 - (Explicações Adicionais (Classes Abstrata e Interface)).pptx
PPTX
Émile Durkheim slide elaborado muito bom
PPTX
Aula 18 - Manipulacao De Arquivos python
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Curso de Java 13 - (JavaEE (JSP e Servlets)).pptx
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Curso de Java 11 - (Serializable (Serialização de Objetos)).pptx
Curso de Java 12 - (JDBC, Transation, Commit e Rollback).pptx
Curso de Java 17 - (JEE (Sessões e Cookies)).pptx
Curso de Java 15 - (Uso de Servlets (Entendendo a Estrutura)).pptx
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
COBITxITIL-Entenda as diferença em uso governança TI
Aula sobre banco de dados com firebase db
Curso de Java 16 - (JEE (Utilizando o Padrão MVC)).pptx
Curso de Java 14 - (Explicações Adicionais (Classes Abstrata e Interface)).pptx
Émile Durkheim slide elaborado muito bom
Aula 18 - Manipulacao De Arquivos python
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Curso de Java 13 - (JavaEE (JSP e Servlets)).pptx
Processos na gestão de transportes, TM100 Col18
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Apple Pippin Uma breve introdução. - David Glotz
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26

Desofuscando um webshell em php h2hc Ed.9

  • 1. Desofuscando um webshell em PHP POR RICARDO LOGAN Ao ajudar um amigo em uma perícia sobre crimes virtuais em um servidor Web comprometido, nos deparamos com um código que nos deixou intrigados. O código estava ofuscado, então resolvemos desofuscar e ver do que se tratava. Foi então que chegamos a conclusão que era um webshell (backdoor) feito em PHP, escondido dentro do código de uma página de erro 404 (Not Found). O objetivo desse artigo é demonstrar como foi feita a desofuscação do webshell. Um trecho do código encontrado na página de erro 404 pode ser visto no Código 1. preg_replace é uma função que realiza busca e substituição utilizando expressão regular. Ressalta-se o uso da flag “e”, que ocasionará a execução de código presente na string. A string que potencialmente possui código malicioso está presente no segundo parâmetro da chamada da função preg_replace (Código 1). Nota-se que ela está ofuscada. Para fins didáticos, a string ofuscada foi dividida em 3 partes: a ideia é separar a utilização de representação hexadecimal (Partes 1 e 3) dos demais caracteres (Parte 3). Olhando rapidamente para as Partes 1 e 3, aparentemente, nota-se a utilização de caracteres ASCII representados em hexadecimal. A fim de se obter os caracteres ASCII dessas duas partes, foi desenvolvido o programa analise.c, que pode ser observado no Código 2. A Listagem 1 ilustra a execução de tal programa. Bingo! Observando os resultados obtidos na Listagem 1, podemos perceber que realmente as partes 1 e 3 tratam-se de caracteres ASCII representados em hexadecimal. A primeira parte da string nada mais é do que uma chamada para as funções eval, gzinflate e base64_decode. Essas funções serão interpretadas em tempo de execução por causa do modificador “e”, que pode ser observado na chamada da função preg_replace no Código 1. Adicionalmente, ressalta-se que a segunda parte da string será submetida diretamente à função base64_decode, logo percebe-se que ela se trata de dados codificados com Base64. A terceira parte da string ofuscada simplesmente fecha os parêntesis abertos pela primeira e encerra o comando PHP com um“;”. Até agora foi descoberto que a chamada a preg_replace, observada no Código 1, ocasionará a interpretação do código presente na Listagem 2. Observando a Listagem 2, nota-se claramente que a segunda parte da string é um parâmetro passado para a função base64_decode. Logo, essa parte é uma string com dados codificados em Base64. Desta forma, tem-se que o primeiro e último caracteres da Parte 2 são, simplesmente, indicadores para que o PHP interprete o resto dos dados dessa parte como string. A fim de desobfuscar a segunda parte da string, foi desenvolvido o programa analise2.php (Código 3), cujo objetivo é desfazer as ações realizadas pelas funções presentes na Listagem 2. A execução do programa analise2.php pode ser observada na Listagem 4. Código 1 –Trecho de código encontrado na página de erro 404. O código completo pode ser obtido em [1]. Parte 1 – Primeira parte da string ofuscada. Parte 2 – Segunda parte da string ofuscada. Essa parte pode ser vista em sua totalidade em [2]. Parte 3 – Última parte da string ofuscada. Código 2 – Programa analise.c. Código 3 – Programa analise2.php. Listagem 1 – Execução do programa analise.c nas Partes 1 e 3 da string ofuscada.[1]. Listagem 2 – Código a ser interpretado como resultado da chamada a preg_replace observada no Código 1. 21
  • 2. Pronto! Agora basta abrir o arquivo webshellfinal.php para ver a string que estava ofuscada (Listagem 5). Analisando a Listagem 2, percebe-se que o código presente na Listagem 5 é o que, de fato, será interpretado pelo PHP. Agora, fica a cargo do leitor estudar o funcionamento do webshell. NOTA DO EDITOR: Durante o processo de revisão deste artigo, notou-se que alguns antivírus consideraram o documento .docx enviado pelo autor como infectado. Após alguns testes, ficou claro que o motivo de tal comportamento foi a presença dasstringsrelativas aoscódigoselistagensaqui presentes. Após alguns outros testes, obteve-se um resultado curioso: 1. O código presente em [1] foi submetido ao virustotal.com. Resultado: de 55 antivírus utilizados, 28 detectaram o arquivo como sendo malicioso. 2. Do código presente em [1], apenas uma modificação foi realizada: na linha do preg_ replace(),aprimeirarepresentaçãohexadecimal (“x65”)foisubstituídapelorespectivocaractere (“e”).Utilizandoovirustotal.com,somente6dos 55 antivírus detectaram o arquivo como sendo malicioso. Fica uma sugestão de exercício aos leitores: utilizar o código presente em [1] e o site virustotal.com para estudar o comportamento dos antivírus. Referências: [1]Códigocompleto.Disponívelem:http://pastebin. com/GxNe5DhM. Acessado em: 07/09/2014. [2] Parte 2 ofuscada. Disponível em: http://pastebin. com/501LVZa6. Acessado em: 07/09/2014. [3] Parte 2 desofuscada. Disponível em http:// pastebin.com/sAGqxJP9. Acessado em: 07/09/2014. Listagem 4 – Execução do programa analise2.php. Listagem 5 – Segunda parte da string desofuscada. RICARDO LOGAN Analista de segurança, formado em ciências da computação e pós-graduado em segurança da informação. Entusiasta em pesquisas sobre malware e testes de intrusão. Conhecimento em configuração, hardening e tunning em várias plataformas, tais como Windows, Linux, Cisco. Contribui para comunidade Slackware Brasil (Slackshow e Slackzine) e faz parte do Staff dos eventos H2HC, SlackwareShow e Bsides SP.