Вы находитесь на странице: 1из 22

[En las aplicaciones Web de Recursos

Análisis de código - II]

[Mehmet Dursun INCA <  me mehmet.ince@intelrad.co~~V~~singular~~1st  >]

[10o de junio de 2013]

1
INTRODUCCIÓN

este documento  El análisis de código fuente de aplicaciones Web  Él está escribiendo una serie de documentos 2. Esta serie de artículos está

destinado a las pruebas de penetración e intercambio de información en el desarrollo de aplicaciones seguras.

Las vulnerabilidades de aplicaciones Web identificadas en el estudio se realiza en 2 concepto diferente.

1 - Caja de prueba de penetración Negro

justo enfrente de los expertos en pruebas de penetración tiene la dirección de la aplicación web de destino. plataforma sobre la que se desarrolla la

aplicación, cualquier información sobre el servidor web o sistema de base de datos no está disponible. En este caso, mediante la realización de

herramientas automatizadas y pruebas manual para vulnerabilidades son detectados.

2 - Blanco caja de la prueba de penetración

Toda la información acerca del estudio es identificar las prácticas a disposición de los puntos débiles. En este caso, especialista en pruebas de penetración, puede

detectar vulnerabilidades mediante la lectura del código fuente de la aplicación de destino.

Esta prueba de penetración de dos enfoques diferentes tiene ventajas y desventajas en comparación con la otra. White Box Prueba de

penetración será analizado en este documento.

PREPARATIVOS

Antes de empezar  Análisis de Aplicación Web Fuente Código II  Le aconsejo leer el documento. Apache, partes asociadas con la
instalación de las herramientas de investigación necesarias, como entorno de PHP no es el foco de este documento. 1. Por favor
haga uso de documentos sobre este tema.

Linux

análisis de código estático en áreas tales como la fuerza de Linux es en muchas áreas también nos proveen con facilidad. Como una
persona que es esencial y conocimientos de programación Linux sea una penetración exitosa probarse a sí mismo  Bash Scripting y
Linux  Le recomiendo que se desarrollan sucesivamente.

2
12:04 64 bits distribución Ubuntu se usa en el presente documento. Se puede seleccionar cualquier distribución deseada.

Experiencia Lenguaje de Programación

análisis de código fuente es, por supuesto, la parte más importante de su experiencia de trabajo en el lenguaje de programación. En particular, es

importante tener conocimientos de programación orientada a objetos de campo y MVC. Estos documentos serán analizados con el software

desarrollado en lenguaje PHP. Pero si usted tiene un lenguaje de programación PHP no sabe de su experiencia, no se plantean un problema.

Entorno de trabajo y software de prueba

Entorno de funcionamiento para la preparación; en Ubuntu Apache, MySQL y la instalación PHP se realizó. Asumo personalmente
prefiero paquetes integrados tales como XAMPP. 1. pasos necesarios para la instalación de Apache, MySQL y PHP Se puede obtener el
documento.

Fue elegido para ser analizada como la versión de software 6.3.1 SugarCRM. Los factores más importantes en esta decisión, el
software SugarCRM en el Negro Caja de penetración de una vulnerabilidad que no puede ser detectado por la prueba, el usuario se
publican en egix 23.06.2012 haciendo especialista en pruebas de penetración. Un segundo factor que ser mencionado es que
muchos desarrolladores y PHP desde un punto desconocido por el especialista en las pruebas de penetración.

http://www.exploitdb.com/exploits/19381/

mediante la introducción de la dirección antes mencionada  Aplicación vulnerables:  Puede descargar la aplicación haciendo clic en el siguiente verde a la imagen

del disco en el poste.

3
Después de completar la instalación, nos encontraremos con una pantalla como la de abajo.

Después de completar la instalación de la aplicación que ahora podemos fuente de análisis de código.

ANÁLISIS DE CÓDIGO FUENTE

entrada

Todos los ataques, comienza en el punto donde entran en contacto con la solicitud del usuario. aplicaciones web, los
usuarios pueden ingresar y la entrada en su sitio con. En resumen, las entradas de usuario, son críticos de la
administración. Cualquier falta de control contiene una vulnerabilidad potencial.

Conectar con los usuarios

Todos los lenguajes de programación web se incluyen con cierta lógica de entrada de los usuarios. Pensar en un hombre hecho clic con el ratón,

como en la sección de ejemplos del Foro pide aplica esta lógica. Por ejemplo, Google

4
motor de búsqueda "resistir" la palabra Buscar mi google.co cuando se ejecuta en la aplicación web de usuario que
"resistió" fue introducido como una cadena.

PHP usuarios se comunican con $ _POST, $ _GET, $ _REQUEST se proporcionan con variables especiales como $ _COOKIE. puntos importantes

tanto para los usuarios regulares y expertos en pruebas de penetración están en esta variable. La aparición de estas variables en el análisis de

código estático yaparkende ordena el primer sencillo escritura del golpe con el archivo PHP que puede ser detectado.

directorio en el disco de nuestra aplicación SugarCRM / var / www / azúcar  Esta es la carpeta.

los realizados anteriormente que se describen el paso-a-paso de salida por debajo.

1 encontrar comando con el directorio / var / www / todos los archivos de la carpeta se muestran bajo el azúcar. carpetas dentro de carpetas que se incluyen en

esta salida.

Dos archivos se indican por el tipo f. diciendo que puede escribir la lista d directorio.

3 se utiliza con el fin de obtener la salida de las primeras 10 filas de la imagen de la pantalla. Mientras tanto, la línea recta de la tubería izquierda en la

salida del comando sirve como entrada a la derecha de comandos en la cabeza.

5
Hay comandos escritos en la última línea de la captura de pantalla anterior. En la mayor producción de la línea de comandos es una parte

de ti está presente. Si analizamos el comando de escritura de Linux;

1 / var / www / azúcar en el tipo de archivos que componen toda la red. 2 del extremo de salida en ".php" traído
por las líneas, presione la izquierda de la pantalla.

archivos CSS en el proyecto Web, JavaScript y png archivos, como archivos de imagen JPEG se encuentran con frecuencia. código
PHP proceso de análisis de los últimos en hacer de estos archivos sólo los archivos ".php" que terminan con greplen ha sido capturado.

Obtenemos una bajo la lista de las últimas extensión de archivo .php. Con el comando anterior para abrir estos archivos uno por uno, la línea de

lectura por la línea 'PHPKOMUT de' líneas que contienen la cadena se da como salida a la pantalla.

Todos los proyectos sobre la base de $ _GET, $ pases de todas las líneas de código PHP como entrada de los usuarios recibieron _POST puede

ver de esta manera. 10000+ salida mostrará hasta que se pueda imaginar. A continuación vamos a analizar esta salida de nuevo con comandos

de Linux.

grep a "\ | "Con caracteres se tratan o lógica. En pocas palabras, $ _GET o $ _POST o $ _REQUEST última línea será
impreso a la pantalla.

6
Aparece una pequeña parte de la salida del comando anterior. De hecho, tiene exactamente 5378 de la raya. leer la ruta completa del archivo

php en la columna de la izquierda a la derecha está escribiendo en líneas que contienen la palabra clave que buscamos.

Los casos de falsos positivos

Actualmente se han identificado sólo los usuarios que están en contacto con el lugar donde pasamos filas que utilizan las variables de PHP

personalizados. 2 muestras y discutir situaciones que tienen lugar en nuestra producción

archivo test.php

zafiyet_iceren_fonksiyo de ($ _ GET [ 'parámetro']);

test2. archivo PHP

$ Param = $ _GET [ 'parámetro']; de


zafiyet_iceren_fonksiyo ($ param);

7
Cuando nuestro comando hemos probado y analizado los archivos test2 nos dará la salida que sigue.

prueba.php zafiyet_iceren_fonksiyo de ($ _ GET [ 'parámetro']);


test2.php $ Param = $ _GET [ 'parámetro'];

Cuando analizamos esta salida es una vulnerabilidad potencial en la línea 1, 2 líneas es que no podemos pensar en eso. Esto
es un error. Dado que los usuarios de $ _GET, $ _POST entrada recibida a través de una variable antes de ser enviados a ser
asignada a otra función. En este caso, es posible que no detecte el punto de vulnerabilidad. Cabe señalar que a fin de evitar que
la línea donde la asignación variable. Actualmente escrita en bash hecho con exactamente el deseado "detección directa de
vulnerabilidades en el nivel elemental." Estudio. En el nivel crítico Ejecución remota de código o primero en probar los posibles
puntos de debilidad pueden existir como SQL Injection, es importante en términos de la salud del proceso de prueba de
intrusión. Tales debilidades que se deben tomar medidas en niveles críticos detectados en el momento!

Puntos débiles de PHP

Se conocen muchos promotores y pruebas de penetración por el sistema experto (),), método shell_exec (exec (). Este método se puede
acceder a través de una línea de comandos con php. En este punto las entradas de usuario que se utiliza y no ha sido controlada
suficientemente pueden ocurrir vulnerabilidades inyección de comandos. Ejecución remota de código de debilidad que puede dar lugar a
importantes funciones de PHP, el sistema (), shell_exec (), exec (), de tránsito (), unserialize () pueden mencionarse.

Para aquellos que quieran aprender más sobre Seguridad en PHP  Esencial Seguridad en PHP por Chris Shiflett  Recomiendo
el libro.

8
En cuanto a la orden de Linux aquí, se describe en una primera porción de $ _GET, $ _POST, $ _REQUEST tan tarde como se
toma el valor de la línea. Esta vez, no lo tome en línea con estos valores a través del cual pasó fue controlado adición de un
funciones de PHP específicos. paso a paso con el fin de examinar la comprensión más cómodo

1 Extensión de llevar a todos los archivos php.


2 de estos archivos en $ _GET, $ _POST, $ _REQUEST escribir en la pantalla de cualquier instancia de la cadena.

3 del sistema en las líneas escritas en la pantalla, shell_exec, ejecutivo, de tránsito y de escritura unserialize en la pantalla es superior a cualquiera

de la cadena.

En este caso, obtuvimos la salida, está situado directamente en los parámetros de entrada del usuario y las
funciones de vulnerabilidad en las que hay posibles archivos hosts y filas.

Unserialize ¿Qué es?

Veamos un poco más de cerca con el método de serialización PHP y unseriazel.

9
2ª fila  temp  Una matriz se define nombre. Entonces la variable TEMP se da como un parámetro a la función
serializar y salida se imprime en la pantalla.

En cuanto a lo anterior podemos ver que la cadena fuera. Esta salida representa la matriz temp se define en el archivo
test.php.

PHP función serialize variable se puede utilizar para expresar la cadena Arrau u objeto. Debido a que la cadena resultante contiene una
gran cantidad están formados por doble codificación Base64 cita se utilizan en aplicaciones web. Tome esta cadena  unserialize  Si los
datos como un parámetro para el método serán de completamente las mismas operaciones en orden inverso. se oluşturular analizado la
secuencia una matriz.

10
Hemos analizado los métodos de entrada de software se asigna al usuario como un parámetro para unseriliz sin ningún control. Esta situación
se puede producir y análisis de ataque mediante la habilitación de seguridad de Let

PHP inyección de objetos

Al leer la clase definida anteriormente es un simple código PHP PHP y aparece en un objeto creado a partir de esta clase.
método destructor clase está disponible. Cuando el bit objec desencadenar la creación de esta función es la pantalla, que
imprime la variable de $ pentest de clase Intelrad.

11
Método serizel con una cadena, no sólo podemos expresar olarka matrices en Objeck. A continuación nos fijamos en la salida
generada por los objetos se puede ver la nueva serializar ser expresada por el Estado.

Los lectores atentos han notado. Cuando la matriz es serialize  "A"  Cuando los entrantes vinieron con serializar el
objeto  "O"  empezar. Unserialize se encarga de esta función cuando la operación de retorno. también  pentest es  donde
el valor de la variable  "Mehmet INCA"
valor se incluye aquí.

12
Los vectores de ataque

Hasta ahora la función de serialización PHP se describe en una lógica de cómo funciona. objeto PHP es variable y puede
ser expresado como una matriz de cadenas. Seguido de la cadena que los objetos pueden ser reciclados unserialize
variables o matrices.

Método Unserizel escribimos a los comandos de entrada de los usuarios de Linux han sido identificados como parámetros asignados
sin comprobar. Así que si usted envía en cualquier clase de objetos de software türetip ofensiva general analizó si serializar expresión
de cadena de la aplicación de destino a la mano, y estos objetos serán generadas automáticamente por unserialize. Así que cuando
unserialize objeto de reciclar, que se deriva a partir del método de la clase de objeto es la llamada?

objeto __destruct Si la reconstrucción de unserialize un objeto, la clase del método se deriva se invoca de forma
automática. vector de ataque está evolucionando en esta sección. Para explicar paso a paso.

realización Target 1 tiene un código tal como sigue.


$ Page = unserialize (base64_decode ($ _ REQUEST [ 'current_query_by_pag A'])); 2 Este código de usuario
'current_query_by_pag A' valores de las variables como para codificar con él base64 con él es de decodificación base64.

3 se envía a la cadena formada por la función unserialize Decode.


4 atacantes current_query_by_pag A 'en la aplicación con un objeto que quiere variables ha logrado la posibilidad de
poder inyectar.

Entonces, ¿cómo malicioso atacante inyectar código PHP? Este problema va a hacer un poco más de ejercicio fuera del código
PHP para ser capaz de decirle la respuesta.

Al analizar los valores de las variables creadas con serializar la cadena nos hemos dado cuenta de que en esta cadena expresiones.
Estos valores pueden cambiar de estado.

13
1 Los atacantes Intelrad define de nuevo en su clase de computación en el $ pentest es  Mehmet INCA en lugar del valor antiguo
del escritor HACKER variable.
2 A continuación, cree un objeto de una clase y habría Intelrad a serializar. 3 codificarlo con la cadena
base64 formado por el serializador y escritor pantalla.

14
Cuando examinamos las variables anteriores la "INCE MEHMET" códigos Hay un nombre de clase asignado Intelrad. La
cadena de base 64 que crea dentro del método que se acaba y variables unserialize  HACKER  Hecha por un objeto que
representa la clase. Veamos que cuando ejecutamos este archivo.

La palabra "hacker" escrito. fuera del método destructor da clase Intelrad de la nada escribiendo funciones que muestran los
mensajes y el uso de la clase Intelrad variable "Mehmet INCA" ¿Cómo hizo esto a pesar de la escritura? Veamos paso a
paso de nuevo.

HACKER un objeto de una clase llamada Intelrad asignado al valor de la variable fue producido y serializar deseo fue expresado en formato
de cadena.
2 porque es muy caracteres entre comillas dobles cuerdas era base64 codificar. Esta es la situación que examinamos
nuestro software. Base 64 es decodificar. Base64 variable de cadena de la clase 3 Intelrad que son unserialize "Mehmet
INCA" Aunque producimos objetos "hacker" para el que escribió el método destructor de la clase a la pantalla "hacker",
escribió.

15
Resultados vectores de ataque

Cuando se utiliza con el objeto de la clase de objeto se genera métodos destructor unserialize y llamada de atención es de nuevo
para este objeto.

Si;

Encontraron el destructor de la clase de una variables o métodos de clase wakeup ataque llevado a cabo usando estas
variables para cualquier otro propósito o si están ahorrando en un archivo.

unserialize (base64_decode ($ _ REQUEST [ 'current_query_by_pag A']));

Podemos inyectar objetos de código PHP como queremos porque gracias a defectuosos vistos anteriormente. Ahora, de vuelta
sólo se había analizado el software para analizar el trabajo realizado por todos los métodos __destruct y __wakeup. Si
__destruct métodos __wakeup o cualquier clase de tales registros que se almacenan en caché, si el propósito de las variables
en esa clase que puede colocar un archivo php en mi archivo php este código malicioso.

Estamos juntos de nuevo con secuencias de comandos bash. Como se puede imaginar ahora que nos encontramos con todo el software que
define las líneas generales de la función __destruct y __wakeup y que debemos leer las funciones individuales.

16
Analizar el puesto de mando Linux.

10 php número impar dentro del rango definido en el archivo y __wakeup __destruct procedimiento del mismo. Se
atrajo nuestra atención cuando nos fijamos en el archivo sugertheme.php individuo. Vemos el código de abajo nos
fijamos en el método de la clase media __destruct sugarth definido este archivo.

Por favor refiérase a los códigos.

17
Cuando los códigos son analizados nombrados pathcache.php 329 líneas en un archivo que görülmektedir.b archivo creado
_jscach de sugarth pero _csscach clase A, _imagecach a _templatecach después de las variables asignadas a un array
aparece para serializar a las condiciones escritas. Exactamente caso de que queramos! Nos encontramos el camino a
nuestras debilidades y explotar. Ahora EXPLOTACIÓN!

la explotación

Hemos encontrado nuestras debilidades y aprovechar nuestro camino a la sección de análisis de código fuente. Para resumir, el
método de control se utiliza en el valor unserialize del usuario. En este caso, consiste en la inyección de debilidad PHP objeto.
ser capaces de explotar la vulnerabilidad utiliza estas variables de clase o métodos __destruct __wakeup cuales deben ser de la
clase. __destruct método de la clase media sugarth se han encontrado para guardar las variables de clase en el archivo
pathcache.php. De esta manera archivo pathcache.php se colocará código PHP malicioso.

18
El reverso de la conexión de la escritura de software malicioso php Metasploit meterpret proporciona la conexión ha sido establecida.
Normalmente devuelto por una función y un método mediante el cual codificar base64 este script se ha hecho más suavemente.
Nuestro objetivo al hacer esto es llegar a ser la cara aparentemente más inocente de tales sistemas WAFA. Ahora constituyen los
anfitriones en el sugarth clase, pero como estos códigos maliciosos.

unserialize (base64_decode ($ _ REQUEST [ 'current_query_by_pag A']));

Código de seguridad de nuevo si nos fijamos en el déficit. Cadena que nos da tomamos unserialize si se debe decodificar método de
base 64. De manera que si nos serializar nuestros inputu deben ser codificación base64.

19
Examinar el código Python anteriormente.

Se proporciona primera sesión. cookie de sesión PHPSESSID obtenido por estar mantenidos en las variables de sesión.
Entonces creado con PHP meterpret conexión reversa como se describe en la carga útil de la primera página se ha
desarrollado utilizando la carga útil de hasta sugarth clase. Esta petición POST con la carga útil de los cuales irá  current_query_by_pag
a
Se asigna a la variable. Entonces pathcache.php se llama el archivo para activar el exploit.

20
Explotar Antes de ejecutar el modo de escucha múltiple ha cambiado al manejador.

21
PRECAUCIONES

1. La entrada del usuario siempre se debe revisar.


2. Software, sin duda en el proceso de desarrollo debe pasar por el proceso de revisión de código.
3. Las empresas deben ser objeto de consulta con los expertos en el tema, si el tiempo de desarrollo necesario.

4. hackers de sombrero blanco se deben emplear en su unidad de trabajo. trabajadores de la empresa deben estar
equipados para los procesos de desarrollo de aplicaciones seguras.

RESULTADOS

el acceso no autorizado al servidor interno y zonas DMZ están haciendo se proporciona un control de entrada simple. Web
Application Firewall, IDS / IPD sistemas han fallado en prevenir este tipo de ataques específicos. Por lo tanto, se debe prestar
atención al tema de seguridad de aplicaciones.

ÚLTIMO

Se mencionó como posibles todos los detalles. Gracias!

EOF

22

Вам также может понравиться