Mostrando resultados del 1 al 1 de 1

Tema: [Tutorial] Intro a las tecnologías web con enfoque al pentesting [by Socket_0x03]

  1. #1
    Habitual Avatar de Socket_0x03
    Fecha de Ingreso
    mayo-2007
    Ubicación
    Ciberespacio
    Mensajes
    242
    Gracias obtenidos: 90

    Post [Tutorial] Intro a las tecnologías web con enfoque al pentesting [by Socket_0x03]

    Introducción a las Tecnologías de Web-Apps - Tutorial para Pentesters

    Este tutorial es para aquellos novatos o pentesters que se están iniciando en el mundo de las aplicaciones web. Antes de mapear una aplicación web o examinar las posibles vulnerabilidades de un servidor, es importante que el pentester tenga una buena base sobre el funcionamiento de todas esas tecnologías que están relacionadas con los web-apps. En caso de que el lector no sea un newbie y ya cuente con ciertos conocimientos en las tecnologías web, también podría leer esta guía para así refrescar la memoria o aprender algún punto que se le haya pasado por alto. A continuación se muestran los tres puntos más importantes que serán descritos en este pequeño tutorial:

    (1) Tecnologías del lado cliente.
    (2) Tecnologías del lado servidor.
    (3) Protocolo HTTP.

    1. Tecnologías del Lado Cliente: Como su nombre lo indica, las tecnologías del lado cliente son aquellas que se ejecutan en el navegador del cliente que se encuentra visitando una aplicación web. Por ejemplo, un código fuente desarrollado en HTML podría ejecutarse en el navegador Firefox del cliente en lugar del servidor HTTP. Para un pentester, es importante saber que las tecnologías del lado cliente pueden ser vistas y modificadas con facilidad porque el código fuente será ejecutado en su navegador. Al modificar los códigos que se encuentran del lado cliente, entonces se pueden explotar ciertos tipos de fallos como los cookie session bypass y las vulnerabilidades lógicas, especialmente aquellas vulnerabilidades lógicas en donde un atacante tiene que modificar el hidden field de un formulario HTML. A continuación se muestran algunas de las tecnologías del lado cliente que son de importancia para una persona que desea expandir sus conocimientos en el campo de la seguridad informática: HTML y JavaScript.

    1.1 HTML: HTML proviene de las siglas en inglés HyperText Markup Language, lo que en español significaría lenguaje de marcado hipertexto. El HTML es un lenguaje de marcas que puede ser utilizado por un webmaster para así desarrollar páginas web. Como sabrán, casi todas las aplicaciones web que se encuentran en el internet contienen códigos HTML para mostrar información textual y otros contenidos; por lo tanto, es importante que un pentester tenga conocimientos en HTML para así entender el funcionamiento de las aplicaciones y poder encontrar fallos, como por ejemplo las vulnerabilidades lógicas que se pueden explotar en los hidden fields de un formulario HTML.

    1.2 JavaScript: JavaScript es un lenguaje de programación que puede ser utilizado por un webmaster para crear páginas web dinámicas e interactivas. En otras palabras, cuando un webmaster usa JavaScript para crear un website, él/ella puede crear una página web más dinámica e interactiva que HTML. Para un pentester, es importante conocer JavaScript para la explotación de algunos tipos de vulnerabilidades como los Cross-Site Scripting (XSS).

    2. Tecnologías del Lado Servidor: A diferencia de las tecnologías del lado cliente que se ejecutan en el navegador del usuario que visita una página web, las tecnologías del lado servidor son aquellas que se ejecutan en el servidor HTTP (el servidor web que contiene websites, imágenes, y otros archivos; en otras palabras, el servidor HTTP que es controlado por el webmaster y que al mismo tiempo se suele encontrar en una computadora que se mantiene las 24 horas del día prendida). Para un pentester que se encuentra examinando las vulnerabilidades remotamente desde el lado del cliente (sin tener acceso físico a las configuraciones del servidor HTTP), es importante saber que los códigos del lado servidor no pueden ser vistos/modificados fácilmente. Por lo tanto, si no se puede ver el código fuente, cuando se trata de encontrar vulnerabilidades en este tipo de tecnologías, el pentester o atacante debe enfocarse en los inputs (las funciones que pueden aceptar datos del cliente) de la aplicación web y analizar las respuestas u errores que suelta el web-app. A continuación se muestran algunas de las tecnologías del lado servidor que son de importancia para una persona que desea expandir sus conocimientos en el campo de la seguridad informática: PHP, SQL, Java, y ASP.

    2.1 PHP: PHP es un lenguaje de programación que se puede utilizar para desarrollar aplicaciones web; por ejemplo, un webmaster puede utilizar PHP para desarrollar algunos web-apps como foros, blogs, shopping-carts, entre otros. A diferencia de otros lenguajes como HTML, un webmaster puede utilizar PHP para añadir/extraer/actualizar/eliminar información de una base de datos; por lo tanto, PHP es usado junto a las siguientes bases de datos: MySQL, MS-SQL, Oracle, y muchas otras bases de datos que almacenan información sensitiva.

    Para un pentester de aplicaciones web, PHP es una de las tecnologías más importantes que un hacker debe conocer por las siguientes razones:
    -PHP es un lenguaje de programación que contiene una gran cantidad de funciones que se pueden vulnerar; en otras palabras, un pentester puede encontrar muchos tipos de vulnerabilidades en PHP, incluyendo inyecciones SQL, inyecciones Eval, Remote File Inclusion, Local File Inclusion, Remote Command Execution, Source Code Disclosure, y muchas más.
    -PHP es muy usado por aquellas empresas u organizaciones que usan bases de datos para almacenar información sensitiva.
    -En las auditorías de seguridad informática, cuando se entregan reportes de vulnerabilidades, muchas veces los bugs están relacionados con el lenguaje de programación PHP.

    2.2 SQL: SQL proviene de las siglas en inglés Structured Query Language, lo que en español significaría Lenguaje de Consulta Estructurada. Para un webmaster que desarrolla aplicaciones web, SQL es un lenguaje que sirve para gestionar la mayoría de las bases de datos que existen en el internet, incluyendo MySQL, MS-SQL, Oracle, y otras por el estilo. Lógicamente, las bases de datos almacenan información sensitiva como usernames y passwords; por lo tanto, si un pentester desea explotar vulnerabilidades que permitan obtener información sensitiva como usernames y passwords, él/ella debe adquirir conocimientos en la gestión de bases de datos, especialmente en las tecnologías que son más usadas por las organizaciones y empresas. Algunos de los ataques más conocidos que se producen en SQL son: error-based SQL injection, blind SQL injection, time-based SQL injection, entre otros.

    2.3 Java: Java es un lenguaje de programación que puede ser utilizado para aplicaciones web; por ejemplo, cuando se trata de web-apps, Java es usado para crear sistemas de login, chats, y otras aplicaciones por el estilo. En el campo de la seguridad informática, un pentester podría encontrar vulnerabilidades lógicas en las aplicaciones de website. Por ejemplo, una vulnerabilidad lógica en un sistema de chat desarrollado en Java podría hacer que todos los usuarios que se encuentren en un mismo room lleguen a ver una desorganización en todas las letras del chat si el atacante coloca ciertos códigos en la sala de chat.

    2.4 ASP: ASP proviene de las siglas en inglés Active Server Pages, lo que en español significaría página activa del servidor. ASP es un lenguaje del lado servidor que usa la tecnología .NET, además, un webmaster puede utilizar ASP para así crear diferentes tipos de aplicaciones web, como por ejemplo los formularios web. En el campo de la seguridad informática, un pentester puede encontrar ciertos tipos de vulnerabilidades en el lenguaje de programación ASP, incluyendo los Cross-Site Scripting (XSS) y las inyecciones SQL.

    3. El Protocolo HTTP: En el internet, el protocolo HTTP es usado para la transferencia de datos que existe entre un cliente y un servidor; en otras palabras, el protocolo HTTP es usado para transferir aquellos datos que pasan entre el navegador de un cliente y el servidor HTTP (el servidor web del webmaster o administrador, el cual suele contener archivos en formato HTML, PHP, ASP, y otros por el estilo). En esa transferencia de datos, se deben tener en cuenta dos puntos importantes: solicitud HTTP y respuesta HTTP. Por un lado, el cliente es el que realiza la solicitud HTTP al servidor; por otro lado, el servidor es el que se encarga de procesar la solicitud HTTP para así enviarle al cliente la respuesta HTTP. En esta sección, estudiaremos más detalladamente las dos partes del protocolo HTTP, las cuales son conocidas como solicitud HTTP y respuesta HTTP.

    3.1 Solicitud HTTP (HTTP Request): Una de las mejores formas para entender con claridad una solicitud HTTP es viendo un ejemplo; por lo tanto, en esta guía, se brindará un ejemplo de una solicitud HTTP y se describirán algunos de los puntos más importantes que un pentester debe tener en cuenta. A continuación se muestra el ejemplo de la solicitud HTTP:

    Código:
    GET /AGene_Page.html HTTP/1.1
    Referer: http//www.teraexe.com/foro/index.php
    User-Agent: Mozilla/5.0 (X11; Linux i686; rv:52.0) 
    Host: www.teraexe.com
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate
    Connection: Keep-Alive
    Cookie: SessionId=E503E503E503E503E503E503E503
    3.1.1 El Método GET: El método GET es usado por un cliente para así obtener información del servidor HTTP, como por ejemplo esa información que se encuentra en una aplicación web o una base de datos. Por otro lado, si un cliente llega a usar otro método como POST, entonces él/ella estaría enviando información al servidor HTTP en lugar de obtener datos.

    3.1.2 La URL (AGene_Page.html?id=52086): En esta sección se encuentra la URL, la cual funciona como una referencia al archivo o website que será solicitado.

    3.1.3 Versión del Protocolo HTTP (HTTP/1.1): En esta pequeña sección, se encuentra la versión del protocolo HTTP. Obviamente, como se puede notar en el ejemplo anterior, la versión del protocolo HTTP es la 1.1.

    3.1.4 Referido (Referer): Esta sección indica el lugar de donde se originó la solicitud; en otras palabras, en el Referer un informático puede ver la URL o website de donde se está originando la solicitud.

    3.1.5 User-Agent: En este campo, un usuario puede ver el tipo de navegador que está realizando la solicitud. No solamente muestra el nombre del navegador, sino también la versión del navegador.

    3.1.6 Host: El hostname de donde se realiza la solicitud.

    3.1.7 Cookie: En esta sección, un pentester puede encontrar información relacionada con la cookie del cliente. Para una persona que desea examinar las vulnerabilidades de un sistema o web-app, es importante tener conocimientos sobre las cookies para así explotar ciertos tipos de vulnerabilidades como Cross-Site Scripting (XSS), vulnerabilidades lógicas, y Cookie Session Bypass. En El Libro de Teraexe, se encuentra información sobre como modificar el valor de una cookie para así entrar como el administrador de una aplicación web.

    3.2 Respuesta HTTP (HTTP Response): Similar a la solicitud HTTP, una de las mejores formas para entender con claridad una respuesta HTTP es viendo un ejemplo; por lo tanto, en esta guía, se brindará un ejemplo de una respuesta HTTP y se describirán algunos de los puntos más importantes que un pentester debe tener en cuenta. A continuación se muestra el ejemplo de la respuesta HTTP:

    Código:
    HTTP/1.1 200 OK
    Server: Apache/3.0
    Set-Cookie: tracking=E503E503E503E503E503E503E503
    Pragma: no-cache
    Expires: 05 05 2020 00:00:00 GMT
    Content-Type: text/html; charset=utf-8
    Content-Lenght: 520
    3.2.1 Versión del Protocolo HTTP (HTTP/1.1): En la primera sección de la primera línea, se encuentra el nombre del protocolo (HTTP); además, después del símbolo slash (/), se encuentra la versión del protocolo HTTP, la cual es la versión 1.1.

    3.2.2 Código de Estado (200): En la segunda sección de la primera línea, un informático va a encontrar tres dígitos, los cuales son conocidos como el código de estado. En el protocolo HTTP, los códigos de estado son importantes para describir de forma resumida la respuesta del servidor HTTP. En el ejemplo anterior, el código de estado fue 200, el cual indica que la consulta se realizó satisfactoriamente. Para un pentester, es importante conocer los típicos códigos de estado que él/ella se podría encontrar en el mapeo de aplicaciones web. Gracias a los códigos de estado, un pentester puede identificar las páginas web que se encuentran en un servidor HTTP, los websites que requieren credenciales (usernames y passwords), los archivos que fueron movidos temporalmente, las páginas web que redirigen automáticamente a un usuario... etc.

    Un punto importante que un pentester debe saber sobre los códigos de estado es que el primer dígito (de los tres dígitos) está relacionado con uno de los cinco tipos de respuestas que nos puede dar un servidor HTTP. A continuación se muestran los cinco tipos de respuestas que están relacionadas con el primer dígito:

    1XX: Respuestas que brindan información.
    2XX: La Consulta del cliente y la respuesta del servidor se han realizado satisfactoriamente.
    3XX: Redirecciones al cliente.
    4XX: Errores relacionados con el cliente.
    5XX: Errores relacionados con el servidor HTTP.

    Aunque existen una gran cantidad de códigos de estado, en este tutorial solamente estudiaremos los códigos de estado que son de importancia para los pentesters:

    a. 100 (Continue): El código 100 significa que el servidor HTTP ha recibido los primeros datos del cliente, por lo tanto, el cliente puede "continuar" enviando sus datos. Después de que el cliente termine de enviar sus datos, el servidor HTTP enviará una segunda respuesta.

    b. 200 (OK): Como se explicó anteriormente, el código 200 significa que la consulta se realizó correctamente. Cuando un pentester se encuentre realizando técnicas de fuzzing o mapeo, él/ella le irá mejor si sabe el significado del código 200. Por ejemplo, si se trata de una herramienta para mapear aplicaciones web, el código 200 podría significar que una página web existe. Otro ejemplo, si se trata de una herramienta de fuzzing que envía símbolos como "../../" o comillas, el código 200 podría significar que existen altas probabilidades de una vulnerabilidad como directorio transversal o inyección SQL.

    c. 201 (Created): El código 201 significa que el servidor HTTP ha podido crear o colocar correctamente lo que el cliente ha indicado. Cuando se trata de un pentester o atacante, él/ella podría usar el método PUT para subir una shell al servidor HTTP y posteriormente explotar una vulnerabilidad de Local File Inclusion.

    d. 301 (Moved Permanently): El código 301 significa que el archivo o website ha sido movido permanentemente; por lo tanto, si el cliente desea abrir el archivo o website, él/ella debe seleccionar una URL diferente. Lógicamente, cuando se trata de mapear una aplicación, el código 301 es clave para identificar la localización de las páginas web; por lo tanto, un pentester debe reconocer el código 301.

    e. 302 (Found): El código 302 significa que el archivo o website se ha encontrado, pero ha sido movido "temporalmente" a una nueva URL. En el pentesting, al igual que el código 301, el código 302 también es utilizado cuando se trata de mapear aplicaciones web.

    f. 400 (Bad Request): El código 400 significa que la solicitud que el cliente le ha enviado al servidor HTTP es errónea. En el pentesting, el error 400 puede significar que la página web solicitada por el cliente no existe.

    g. 401 (Unauthorized): El código 401 significa que el cliente no se encuentra autorizado para tener acceso a la página web. En las auditorías de seguridad informática, cuando un pentester encuentra el código 401, es posible que él/ella se encuentre tratando de ganar acceso a los siguientes lugares: (a) Panel de administración (b) Cuenta de usuario (c) Lugar restringido.

    h. 500 (Internal Server Error): El código 500 significa que el servidor HTTP tiene algún error interno, por lo tanto, el HTTP server no está disponible para el cliente.

    i. 503 (Service Unavailable): El código 503 significa que el servidor HTTP no se encuentra disponible para el cliente por algún tipo de razón; por ejemplo, si el servidor HTTP tiene una gran cantidad de visitantes que están poniendo lenta la computadora en donde se encuentra instalada el HTTP server, entonces es posible que no se encuentre disponible para algunos clientes.

    3.2.3 Descripción del Estado (OK): En la tercera sección de la primera línea, un informático encontrará una palabra relacionada con la descripción del código de estado. Por ejemplo, si el cliente realizo una consulta adecuada (envió los datos a una página web que se encuentra en el servidor HTTP y no se produjo ningún error) y el servidor HTTP respondió satisfactoriamente con el código de estado 200, entonces la descripción del estado sería la palabra OK, la cual significada que todo se encuentra bien.

    3.2.4 Server: En esta línea, un informático puede encontrar información relacionada con el servidor que contiene la aplicación web; en otras palabras, en la sección de Server, un pentester puede saber la versión y nombre del servidor HTTP que se encuentra instalada en la computadora del webmaster o administrador.

    Cuando se trata de las vulnerabilidades a nivel de memoria (stack overflow, heap overflow, y otras por el estilo), el primer paso que realiza un atacante es obtener el nombre y la versión del programa que él/ella desea explotar. Una vez que el atacante obtiene esos datos, entonces él/ella puede descargar el mismo programa del internet y aplicar algunas técnicas como fuzzing para así detectar algún agujero de seguridad que le permita rootear la computadora del administrador o webmaster. Hace más de una década, esta técnica se podía aplicar con facilidad en los dos servidores HTTP más conocidos (IIS y Apache); sin embargo, hoy en día es difícil encontrar este tipo de bugs en IIS/Apache, por lo tanto, la técnica podría ser efectiva si el pentester tiene la gran suerte de encontrar otros servidores HTTP.

    Además de la técnica de pentesting descrita anteriormente, para un atacante es importante obtener el nombre del servidor HTTP para explotar ciertos tipos de vulnerabilidades, como por ejemplo los Local File Inclusion. En algunos fallos de LFI, el pentester debe entender el funcionamiento del archivo .htaccess para así poder subir un PHP shell al servidor HTTP de nombre Apache.

    3.2.5 Set-Cookie: En esta sección, un informático puede encontrar información relacionada con la cookie. Como se explicó anteriormente, un pentester debe tener conocimientos relacionados con las cookies si él/ella desea explotar ciertos tipos de vulnerabilidades como los XSS, Cookie Session Bypass, y otras por el estilo.

    3.2.6 Pragma: La respuesta del servidor HTTP no es almacenada en el navegador del cliente cuando el HTTP server envía una respuesta en donde el Pragma tiene el valor de no-cache. En el campo de la informática, la caché de una aplicación o navegador es aquella que se encarga de almacenar datos para cierto tipo de propósito; por ejemplo, en el caso de un navegador, la caché podría almacenar ciertos datos de un servidor HTTP para así cargar con mayor rapidez el contenido de una aplicación web la próxima vez que el cliente vuelva a visitar el website.

    3.2.7 Content-Type: En esta sección, una persona puede ver el tipo de contenido que el servidor HTTP le está enviando al navegador del cliente; por ejemplo, en el caso anterior, el servidor HTTP le está enviando al navegador del cliente un documento HTML, el cual lógicamente contiene información textual y códigos HTML.

    3.2.8 Content-Lenght: En esta sección, un informático puede ver lo largo del contenido, el cual es mostrado en bytes.

    Autor: Socket_0x03
    Fecha: 2018
    @ Copyright 2018. Socket_0x03. All Rights Reserved.
    Material exclusivo de Teraexe y mashacker.
    Prohibida la distribucion parcial o total del material.
    [SOLO LOS USUARIOS REGISTRADOS PUEDEN VER LOS ENLACES. ]

  2. Los Siguientes 3 Usuarios Agradecieron a Socket_0x03 por Este Mensaje:

    SAT (05-may-2019), w3r3w0lf (25-may-2019), zolo (05-may-2019)

Temas Similares

  1. [Tutorial] Inyecciones NoSQL [by Socket_0x03]
    By Socket_0x03 in forum Bug y Exploits
    Respuestas: 0
    Último mensaje: 05-may-2019, 17:44
  2. Intro esferico [Tutorial - Photoshop] By xSkyPagex
    By xSkyPagex in forum Tutoriales
    Respuestas: 0
    Último mensaje: 07-abr-2010, 21:57
  3. Metasploit Tutorial by Socket_0x03
    By Socket_0x03 in forum Bug y Exploits
    Respuestas: 40
    Último mensaje: 27-feb-2010, 14:17
  4. Video tutorial RFI r57 & Deface by Socket_0x03
    By Socket_0x03 in forum HacK GeneraL
    Respuestas: 25
    Último mensaje: 19-jun-2009, 23:43
  5. Video Tutorial XSS by Socket_0x03
    By Socket_0x03 in forum Bug y Exploits
    Respuestas: 5
    Último mensaje: 19-dic-2008, 06:31

Normas de Publicación

  • No puedes crear nuevos temas
  • No puedes responder mensajes
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •