Mostrando resultados del 1 al 1 de 1

Tema: [Tutorial] Encontrar Vulnerabilidades en Código Fuente [by Socket_0x03]

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

    Post [Tutorial] Encontrar Vulnerabilidades en Código Fuente [by Socket_0x03]

    Encontrar Vulnerabilidades en Código Fuente

    Conocimientos Requeridos para entender el tutorial:
    -Desarrollo de aplicaciones web (PHP, ASP, Java).
    -Administración de base de datos (MySQL).
    -Conocimientos básicos de Vulnerabilidades (SQLi, PHPi, XSS...).

    Es importante que el lector tenga conocimientos en los tres puntos anteriores debido a que en este tutorial no se va a brindar mucha información sobre los puntos básicos; en otras palabras, en este tutorial, no se va a explicar detalladamente las tecnologías del desarrollo web (PHP, ASP, base de datos... etc.), las inyecciones SQL, los Cross-Site Scripting (XSS), y otros puntos por el estilo. Si desean adquirir conocimientos sobre los puntos básicos, pueden leer el siguiente material:
    -El Libro de Teraexe.
    -Introducción a las Tecnologías de Web-Apps - Tutorial para Pentesters.

    Ya que se dejó claro los conocimientos que el lector debe tener para poder entender el contenido de este texto, entonces vamos a comenzar con el tutorial.

    Cuando se trata de encontrar vulnerabilidades en aplicaciones web, un atacante puede aplicar las siguientes técnicas:

    -Usar herramientas automáticas como fuzzers.
    -Examinar el código fuente de la aplicación.

    En este tutorial, nos enfocaremos solamente en una de esas dos técnicas: Examinar el código fuente de la aplicación. Lógicamente, para examinar el source code de las aplicaciones web, un informático debe tener conocimientos en el desarrollo de páginas web, base de datos y programación; en otras palabras, para examinar el código fuente de los web-apps, una persona debe conocer las siguientes tecnologías: HTML, JavaScript, PHP, MySQL, ASP, Java, y otras tecnologías por el estilo. Después de tener conocimientos en esas tecnologías, el siguiente paso consiste en reconocer los típicos códigos de programación que están relacionados con las vulnerabilidades. En este tutorial, estudiaremos las funciones vulnerables que un pentester puede encontrar en las siguientes tecnologías: PHP, ASP, Java, Perl y JavaScript.

    PHP

    1. PHP: PHP es un lenguaje de programación del lado servidor que puede ser utilizado por un webmaster o administrador para desarrollar aquellas aplicaciones web que pueden almacenar o extraer información de base de datos. Además de gestionar base de datos, el lenguaje de programación PHP cuenta con funciones para cargar comandos del sistema operativo y manejar archivos del servidor HTTP. En esta pequeña sección, nos enfocaremos en las funciones vulnerables de PHP que se usan para gestionar base de datos, cargar comandos del sistema operativo, y controlar archivos del servidor.

    1.1 Gestión de Base de Datos con PHP: La mayoría de las bases de datos que se encuentran en el internet usan el lenguaje SQL; por ejemplo, algunas de las bases de datos que usan el lenguaje SQL son conocidas como MySQL, MSSQL, y PostgreSQL. Cuando un webmaster desarrolla una aplicación web que cuenta con funciones para realizar consultas a una base de datos, él/ella puede usar las siguientes funciones:

    Código:
    MySQL: mysql_query
    Microsoft SQL Server: mssql_query
    PostgreSQL: pg_query
    Si el pentester sabe que la aplicación web se encuentra desarrollada en PHP y usa la base de datos MySQL, entonces él/ella puede comenzar a buscar la siguiente función: mysql_query. Por otro lado, si el atacante sabe que el web-app usa PHP y MSSQL, entonces esa persona puede buscar la función mssql_query. Una vez que el informático encuentra la función que realiza la consulta a la base de datos, entonces puede proceder a examinar los códigos de la consulta para ver si contiene una vulnerabilidad de inyección SQL. En el caso de PHP y MySQL, un source code vulnerable a los SQLi se vería de la siguiente forma:

    Código:
    //Almacenando el nombre de usuario en una variable (se colocó en un formulario de HTML):
    $AGene_User = $_POST['AGene_User'];
    
    $AGene_Pass = la clave en una variable (se colocó en un formulario de HTML):
    $_POST['AGene_Pass'];
    
    //La consulta que se enviará a la base de datos:
    $AG_Result = mysql_query("SELECT * FROM AGene_Tabla
    			  WHERE AG_Username='$AGene_User'
    			  and AG_Password='$AGene_Pass'");
    Es importante tener en cuenta que no todas las consultas a una base de datos contienen la vulnerabilidad de SQL injection. En el ejemplo anterior, la vulnerabilidad existe porque un atacante puede explotarla si él/ella incluye los siguientes datos en un formulario HTML:

    Código:
    Username: Hacker’
    Password: ‘G’=‘G
    En el caso anterior, la base de datos MySQL interpretaría la consulta de la siguiente forma:

    Código:
    SELECT * FROM AGene_Tabla WHERE AG_Username='Hacker'' and AG_Password=''G'='G';
    Usualmente, las inyecciones SQL se producen cuando se están concatenando varias cadenas, se incluye una variable de PHP dentro de la consulta, o la consulta contiene una comilla extra. En estos casos, es importante que el pentester entienda la lógica del funcionamiento de la base de datos para así poder hacer que la database muestre los datos que el atacante desee.


    1.2 Ejecución de Comandos del Sistema Operativo con PHP: En este tipo de vulnerabilidad, el atacante carga los comandos de aquel sistema operativo en donde se encuentra la aplicación web; por lo tanto, para detectar este agujero de seguridad en el código fuente de una aplicación desarrollada en PHP, un pentester debe buscar una de las siguientes funciones: system, exec, shell_exec, popen, y proc_open. A continuación se muestran unos códigos en donde existe una vulnerabilidad de OS command execution:

    Código:
    <?php
          $cmd=$_GET['cmd']; 
          system($cmd)
    ?>
    1.3 Acceso de Archivos con PHP: El lenguaje de programación PHP cuenta con diferentes tipos de funciones que pueden permitir a un atacante incluir archivos dentro de una aplicación web. Lógicamente, esas funciones abren las puertas a ciertos tipos de vulnerabilidades, como por ejemplo los Remote File Inclusion.

    1.3.1 Remote File Inclusion: En los RFI, un atacante usa la URL de su navegador para incluir de forma remota archivos dentro de la aplicación web; por lo tanto, cuando un pentester examina el código fuente en busca de este tipo de vulnerabilidad, él/ella debe enfocarse en encontrar funciones claves como las siguientes: include, include_once, require, y require_once. A continuación se muestra un ejemplo:

    Código:
    <?php 
         include($_GET['page']); 
    ?>
    ASP

    2. ASP: Al igual que PHP, ASP es un lenguaje del lado servidor que puede ser usado para gestionar base de datos, cargar comandos del sistema operativo, y controlar archivos de servidor mediante operaciones de entrada y salida (input and output).

    2.1 Gestión de Base de Datos con ASP: Cuando se trata de gestionar base de datos con ASP, un webmaster suele utilizar la tecnología de ActiveX Data Objects (ADO) junto a las funciones Connection, Command, y RecordSet, las cuales pueden contener vulnerabilidades de inyección SQL. A continuación se muestra un ejemplo de una aplicación web con una vulnerabilidad de SQLi:

    Código:
    Set Connection = Server.CreateObject("ADODB.Connection");
    Connection.Open "DSN=teraexe; UID=520";
    Connection.Execute("SELECT * FROM AGene_Users WHERE name= '" & user & "'");
    2.2 Ejecución de Comandos del Sistema Operativo con ASP: En el lenguaje de programación ASP, algunas veces los webmasters buscan desarrollar aplicaciones web que podrían "ejecutar un proceso externo" al web-app que se encuentra en el servidor HTTP; por ejemplo, un webmaster podría desarrollar una aplicación que ejecute el navegador de Firefox. En esos casos, los programadores usan funciones como System.Diagnostics.Process.Start y System.Diagnostics.ProcessStartInfo. Por ejemplo, un código en donde se use el método Process.Start se vería de la siguiente forma:
    using System.Diagnostics;

    Código:
    [Códigos de programación...]
    
    string AGene_Input = "Process_X";
    Process.Start(AGene_Input);
    Otro ejemplo, un código en donde se use ProcessStartInfo se podría ver de la siguiente forma:

    Código:
    using System.Diagnostics;
    
    [Códigos de programación...]
    
    ProcessStartInfo AGene_SI = new ProcessStartInfo("Process_X.exe");
    AGene_SI.WindowStyle = ProcessWindowStyle.Minimized;
    Process.Start(AGene_SI)
    En casos como los anteriores, un pentester podría ver si se incluye "System.Diagnostics"; luego, buscar el uso de "Process.Start" o ProcessStartInfo dentro del código fuente para ver si contienen una vulnerabilidad de OS Command Execution.

    2.3 Acceso de Archivos con ASP: En algunos casos, los programadores o webmasters usan ASP para desarrollar aquellas aplicaciones web que podrían tener acceso (lectura y escritura de archivos) a los archivos que se encuentran dentro de un servidor HTTP. Para desarrollar ese tipo de aplicaciones, los webmasters usan funciones u objetos de entrada y salida (input and output) como las siguientes: Scripting.FileSystemObject, MapPath, filename, System.IO.File, System.IO.FileStream, System.IO.StreamReader, y System.IO.StreamWriter. Por ejemplo, los códigos de una aplicación web que haga uso de una de las funciones anteriores se vería de la siguiente forma:

    Código:
    FileStream AGene_OpenFile = File.Open(“C:\\HTTP_Server\File” + ClientVariable, FileMode.OpenOrCreate);
    Cuando un pentester se encuentra examinando las vulnerabilidades de un web-app desarrollado en ASP, él/ella podría buscar las funciones que se nombraron anteriormente para así detectar ciertos tipos de vulnerabilidades, como por ejemplo los directorios transversales.

    2.3.1 File Inclusion Vulnerability: Además de las funciones que se nombraron anteriormente, en pocos casos y en aplicaciones con una seguridad extremadamente baja, también se pueden encontrar ciertas funciones que podrían ser utilizadas por un pentester o atacante para incluir archivos dentro del servidor HTTP en donde se encuentra la aplicación web. Una de estas funciones es conocida como Server.Execute. En estos casos, un pentester debe buscar códigos como el siguiente:

    Código:
    Server.Execute(Request.ServerVraiables("HTTP_ACCEPT_LANGUAGE") & "File.asp")
    Java

    3. Java: Al igual que ASP y PHP, Java es un lenguaje del lado servidor que puede ser usado para gestionar base de datos, cargar comandos del sistema operativo, y controlar archivos de servidor mediante operaciones de entrada y salida (input and output). En lo que queda del tutorial, se va a describir de forma muy resumida las funciones vulnerables relacionadas con los tres puntos anteriores.

    3.1 Gestión de Base de Datos con Java: Las siguientes funciones son usadas por un webmaster para gestionar base de datos y podrían contener vulnerabilidades de inyección SQL:

    Código:
    java.sql.Connection.createStatement
    java.sql.Statement.execute
    java.sql.Statement.executeQuery
    3.2 Ejecución de Comandos del Sistema Operativo con Java: Las siguientes funciones podrían ser usadas por un administrador para ejecutar procesos externos y podrían contener vulnerabilidades de OS command execution:

    Código:
    java.lang.runtime.Runtime.getRuntime
    java.lang.runtime.Runtime.exec
    3.3 Acceso de Archivos con ASP: Las siguientes funciones son usadas para realizar operaciones de entrada y salida (input and output) y podrían contener vulnerabilidades de directorio transversal:

    Código:
    java.io.FileInputStream
    java.io.FileOutputStream
    java.io.FileReader
    java.io.FileWriter
    Perl

    4. Perl: Perl es un lenguaje del lado servidor que puede ser usado para gestionar base de datos, cargar comandos del sistema operativo, y controlar archivos de servidor mediante operaciones de entrada y salida (input and output). En lo que queda del tutorial, se va a describir de forma muy resumida las funciones vulnerables relacionadas con los tres puntos anteriores.

    4.1 Gestión de Base de Datos con Perl: La gestión de base de datos mediante Perl se realiza con DBI. Por lo tanto, cuando un pentester desea encontrar vulnerabilidades de inyección SQL en Perl, él/ella debe buscar códigos como los siguientes: DBI, ODBC, SQL, y QUERY.

    4.2 Ejecución de Comandos del Sistema Operativo con Perl: Las siguientes funciones podrían ser usadas por un administrador para ejecutar procesos externos y podrían contener vulnerabilidades de OS command execution:

    Código:
    system()
    exec()
    4.2.1 File Inclusion Vulnerability: Las funciones relacionadas con este tipo de vulnerabilidad en Perl son require y use.

    4.3 Acceso de Archivos con Perl: En el lenguaje de programación Perl, la función que está relacionada con las operaciones de entrada y salida (input and output) es conocida como open. Por lo tanto, si un pentester quiere comenzar a buscar vulnerabilidades de directorio transversal en el lenguaje Perl, él/ella debe comenzar a buscar la función open.

    JavaScript

    5. JavaScript: JavaScript es un lenguaje del lado cliente que cuenta con funciones que fácilmente podrían ser usadas por un atacante para explotar diferentes tipos de vulnerabilidades, como por ejemplo los Cross-Site Scripting (XSS).

    5.1 Cross-Site Scripting (XSS): cuando un pentester desea encontrar vulnerabilidades de DOM-based XSS, él/ella puede enfocarse en las siguientes funciones de JavaScript: document.location, window.location, y document.write.

    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. El Siguiente Usuario Agradeció a Socket_0x03 Por Este Mensaje:

    zolo (05-may-2019)

Temas Similares

  1. Respuestas: 0
    Último mensaje: 05-may-2019, 17:51
  2. [Tutorial] Vulnerabilidades Lógicas [by Socket_0x03]
    By Socket_0x03 in forum Bug y Exploits
    Respuestas: 0
    Último mensaje: 05-may-2019, 17:43
  3. Respuestas: 0
    Último mensaje: 05-may-2019, 17:42
  4. ¿Inyección de código de fuente?
    By elguacho in forum Programacion para webmasters
    Respuestas: 2
    Último mensaje: 15-feb-2009, 06:06
  5. Hack Por Código Fuente
    By billyhatcher in forum Hack para newbies
    Respuestas: 2
    Último mensaje: 20-jun-2008, 21:08

Normas de Publicación

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