<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-1938380385276969904</atom:id><lastBuildDate>Thu, 16 Feb 2012 11:37:56 +0000</lastBuildDate><category>PHP</category><category>PROGRAMACION</category><category>GENERAL</category><category>ACTIVE DIRECTORY</category><category>LDAP</category><category>BIENVENIDA</category><title>DevelSec - Seguridad Informática</title><description>Blog con información relacionada a Seguridad Informática (Vulnerabilidades, Exploits, 0-days, Hacking, Cracking, Ingeniería Inversa, etc.) y Programación sobretodo orientada a objetos (POO), en lenguajes tanto web (PHP, ASP, ASP.NET, JSP, etc.), como de escritorio (Visual Basic, VB.NET, Cobol, Delphi, C++, C#, etc.)
&lt;br&gt;&lt;br&gt;
By Andrés Pérez Albela H. (Backtracker)</description><link>http://develsec.blogspot.com/</link><managingEditor>noreply@blogger.com (Andrés Pérez-Albela H.)</managingEditor><generator>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/develsec" /><feedburner:info uri="develsec" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1938380385276969904.post-2219808205212315608</guid><pubDate>Mon, 16 May 2011 16:33:00 +0000</pubDate><atom:updated>2011-05-16T12:43:32.517-05:00</atom:updated><title>Vulnerabilidad en Nintendo.com (Double Encoding Directory Transversal)</title><description>&lt;br /&gt;&lt;br /&gt;Hoy por la mañana leyendo unos Twitts, me entero que la web de la conocida consola de video juegos Nintendo tiene una vulnerabilidad.&lt;br /&gt;&lt;br /&gt;Verificando un poco de que se trataba (ya lo corrigieron) veo fácilmente un Directory Transversal. Este fallo consiste en escalar directorios para acceder a información que no está comprendida dentro del directorio publicado en el servidor web.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ejemplo:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1)&lt;/span&gt; Tenemos un URL que apunta a un archivo PHP, el cual descarga el archivo indicado en la recepción de su variable "archivo". URL ==&amp;gt; www.victima.com/descargar.php?archivo=documento.pdf&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2)&lt;/span&gt; El archivo descargar.php no contiene siquiera validación o filtro alguno de caracteres para evitar la inyección de saltos de directorio.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3)&lt;/span&gt; Teniendo en cuenta que el SO del servidor es Linux procedemos a leer el archivo /etc/passwd inyectando los saltos de directorio de esta manera:&lt;br /&gt;&lt;br /&gt;www.victima.com/descargar.php?archivo=../../etc/passwd&lt;br /&gt;&lt;br /&gt;Y añadimos tantos ../ como carpetas haya que escalar. Si no sabemos la ruta exacta, comenzamos a probar añadiendo saltos.&lt;br /&gt;&lt;br /&gt;www.victima.com/descargar.php?archivo=../../../etc/passwd&lt;br /&gt;www.victima.com/descargar.php?archivo=../../../../etc/passwd&lt;br /&gt;www.victima.com/descargar.php?archivo=../../../../../etc/passwd&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;Hasta que finalmente damos con el archivo &lt;span style="font-weight:bold;"&gt;/etc/passwd&lt;/span&gt; y voilá.&lt;br /&gt;&lt;br /&gt;Pero este no es el escenario de la web de Nintento, ya que esta si tiene ciertas validaciones de caracteres como "/" o "." por lo que procedo a explicar un ataque más avanzado del Directory Transversal común.&lt;br /&gt;&lt;br /&gt;El nombre de este ataque es: &lt;span style="font-weight:bold;"&gt;Directory Transversal Attack with Double Encoding&lt;/span&gt; y consiste en lo siguiente:&lt;br /&gt;&lt;br /&gt;Codificar los saltos de directorio en hexadecimal &lt;span style="font-weight:bold;"&gt;dos veces&lt;/span&gt; para hacer el bypass de los controles de seguridad y/o causar un comportamiento inesperado en la aplicación. Con esto se vulneran los controles de seguridad que sólo decodifican una sola vez la entrada de usuario. El segundo proceso de decodificación lo realiza la plataforma del backend o los módulos que controlan correctamente la data pero no tienen controles de seguridad correspondientes en su lugar.&lt;br /&gt;&lt;br /&gt;En su codificación simple, los caracteres ../ codificados a hexadecimal arrojan este resultado %2e%2e%2f siendo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Caracter&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;Hexadecimal&lt;/span&gt;&lt;br /&gt;--------------------------------------------&lt;br /&gt;     . &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %2e&lt;br /&gt;     / &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %2f&lt;br /&gt;&lt;br /&gt;Pero si queremos codificar nuevamente (Double Encoding), codificamos en hexadecimal también el símbolo "%" (porcentaje), por lo que quedaría así:&lt;br /&gt;&lt;br /&gt;Símbolo porcentaje en codificación simple: %&lt;br /&gt;Símbolo porcentaje en codificación doble:  %25&lt;br /&gt;&lt;br /&gt;Y reemplazando en %2E%2E%2f el valor del símbolo porcentaje obtenido luego de codificarlo, quedarían así los saltos:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Codificado Doble&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-weight:bold;"&gt;Decodificado&lt;/span&gt;&lt;br /&gt;-------------------------------------------------------&lt;br /&gt;  %252e%252e/ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ../&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Aplicándose así en la URL vulnerable:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;www.victima.com/descargar.php?archivo=%252e%252e/%252e%252e/%252e%252e/%252e%252e/etc/passwd&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;En el caso de Nintendo, la URL vulnerable era directa y no por un manejador de descargas:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;http://www.nintendo.com/css/pages//%252e%252e/%252e%252e/%252e%252e/%252e%252e/%252e%252e/%252e%252e/%252e%252e/%252e%252e/etc/passwd&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-gjiP1xnRwpw/TdFdZNgrZCI/AAAAAAAAAA0/FoRFXOuSFQQ/s1600/nintendo.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 182px;" src="http://3.bp.blogspot.com/-gjiP1xnRwpw/TdFdZNgrZCI/AAAAAAAAAA0/FoRFXOuSFQQ/s400/nintendo.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5607365698757813282" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1938380385276969904-2219808205212315608?l=develsec.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/develsec/~4/hHj3jdVfGdA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/develsec/~3/hHj3jdVfGdA/vulnerabilidad-en-nintendocom-double.html</link><author>noreply@blogger.com (Andrés Pérez-Albela H.)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-gjiP1xnRwpw/TdFdZNgrZCI/AAAAAAAAAA0/FoRFXOuSFQQ/s72-c/nintendo.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://develsec.blogspot.com/2011/05/vulnerabilidad-en-nintendocom-double.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1938380385276969904.post-7248048359952255921</guid><pubDate>Fri, 12 Mar 2010 15:16:00 +0000</pubDate><atom:updated>2011-07-17T03:36:17.435-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">LDAP</category><category domain="http://www.blogger.com/atom/ns#">PROGRAMACION</category><category domain="http://www.blogger.com/atom/ns#">ACTIVE DIRECTORY</category><title>Enlace y Autenticación PHP con LDAP (LDAPhp.class.php)</title><description>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Es un clásico escuchar los intentos de realizar este enlace (bind) y que no funcione porque no sabemos como configurar la cadena de conexión del usuario enlace o el usuario a autenticar. A esta cadena de conexión la llamamos Distinguished Name/Nombre distinguido y un ejemplo de DN es:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;          &lt;span style="font-style: italic;"&gt;DN:     cn=Andres Perez Albela, dc=empresa, dc=com&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Siendo su RDN (Relative Distinguished Name/Nombre Distinguido Relativo) la siguiente:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;RDN:  cn=Andres Perez Albela&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esto quiere decir que el usuario es Andres Perez Albela y que el dominio es &lt;span style="font-weight: bold;"&gt;empresa.com&lt;/span&gt;, y me parece bueno resaltar que el Directorio Activo (AD) separa mediante la variable DC (Domain Controller//Controlador de Dominio) cada parte del dominio explotada por el símbolo "." Es decir, si hacemos &lt;span style="font-weight: bold; font-style: italic;"&gt;explode('.', "empresa.com.pe")&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;obtendremos tres partes en el arreglo, y cada parte del arreglo es un DC, siendo en este caso algo así:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DC=empresa, DC=com, DC=pe&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ahora podrán ver un ejemplo de Active Directory que hice para poder explicarles el enlace.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href="http://img202.imageshack.us/img202/4774/ouconexiones.jpg" target="_blank"&gt;&lt;img style="width: 619px; height: 245px;" src="http://img202.imageshack.us/img202/4774/ouconexiones.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 153, 0);"&gt;Imagen de Estructura de Active Directory&lt;/span&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Como podemos ver, el dominio es: &lt;span style="font-weight: bold;"&gt;labserver.com&lt;/span&gt; y las unidades organizacionales (OU) son:&lt;br /&gt;&lt;br /&gt;-Casa&lt;br /&gt;--Conexiones&lt;br /&gt;--Cuarto 1&lt;br /&gt;--Cuarto 2&lt;br /&gt;&lt;br /&gt;Siendo &lt;span style="font-weight: bold;"&gt;Casa&lt;/span&gt; el OU Principal y &lt;span style="font-weight: bold;"&gt;Conexiones&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Cuarto&lt;/span&gt; 1, &lt;span style="font-weight: bold;"&gt;Cuarto 2&lt;/span&gt; las sub-unidades organizacionales de Casa (Ojo que no dejan de ser OU).&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href="http://img716.imageshack.us/img716/4747/oucuarto.jpg" target="_blank"&gt;&lt;img style="width: 621px; height: 246px;" src="http://img716.imageshack.us/img716/4747/oucuarto.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 153, 0);"&gt;Podemos apreciar el "samAccountName" de un usuario ingresando a esa opción&lt;/span&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Dentro de &lt;span style="font-weight: bold;"&gt;Cuarto 1&lt;/span&gt; tenemos un usuario con los siguientes datos:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CN &lt;/span&gt;:  Andres Perez Albela H.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;samAccountName&lt;/span&gt; : aperezalbela&lt;br /&gt;&lt;br /&gt;La historia es que el desarrollador de un sistema creado en PHP quiere autenticar a sus usuarios con LDAP. Entonces crea una clase para realizar el enlace, pero este enlace no funcionará si no se crea un &lt;span style="font-weight: bold;"&gt;usuario enlace&lt;/span&gt; en el Directorio Activo, que en este caso es &lt;span style="font-weight: bold;"&gt;PHP&lt;/span&gt; y se encuentra en CASA/Conexiones, entonces hay que crear una cadena de conexión para ese usuario:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CN=PHP,OU=Conexiones,OU=Casa,DC=labserver,DC=com&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Luego de haber autenticado al usuario PHP, se procede a buscar al usuario &lt;span style="font-weight: bold;"&gt;aperezalbela&lt;/span&gt; en el AD, entonces tenemos que crear una cadena para ubicarnos en la OU principal y poder hacer búsquedas con ldap_search que busca en la OU principal y bajo ella (sub-OU). La cadena para este caso es:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;OU=Casa, DC=labserver, DC=com&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;De esta manera al desarrollador solo le quedará crear un &lt;span style="font-weight: bold;"&gt;filtro de búsqueda&lt;/span&gt; para comprobar la existencia del usuario &lt;span style="font-weight: bold;"&gt;aperezalbela. &lt;/span&gt;El filtro es:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(&amp;amp;(objectClass=user)(samAccountName=$usuario))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Como podemos ver, tenemos la variable &lt;span style="font-weight: bold;"&gt;$usuario&lt;/span&gt; que es el usuario a buscar y que recibiéndola por un formulario y habiéndose interpretado por php pues quedaría así:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(&amp;amp;(objectClass=user)(samAccountName=aperezalbela))&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Para finalmente intentar realizar el enlace (autenticación de ese usuario en LDAP) con la contraseña enviada por el usuario en el formulario web&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;.&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Ahora presento el código PHP para la autenticación (&lt;span style="font-weight: bold;"&gt;LDAPhp.php&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;//Importamos el manejador LDAP&lt;br /&gt;require_once 'LDAPhp.class.php';&lt;br /&gt;&lt;br /&gt;//Datos del Usuario a Autentificar con tu aplicacion en PHP&lt;br /&gt;//La mayoría de veces estos datos no son una constante, sino valores recibidos por $_POST[]&lt;br /&gt;$usuario = "aperezalbela";&lt;br /&gt;$clave = "prueba";&lt;br /&gt;&lt;br /&gt;//Datos de Configuración del Servidor&lt;br /&gt;$servidor="192.168.1.2";&lt;br /&gt;$puerto="389";&lt;br /&gt;&lt;br /&gt;//Datos de Configuración para la conexión al LDAP (DN == "Distinguished Name")&lt;br /&gt;$cadenaConexionUsuario = "CN=PHP,OU=Conexiones,OU=Casa,DC=labserver,DC=com";&lt;br /&gt;&lt;br /&gt;//Datos de Configuración de usuario enlace LDAP-PHP, en este caso PHP (CN=PHP)&lt;br /&gt;$password = "pruebaLdap";&lt;br /&gt;&lt;br /&gt;//Datos de Configuración para el enlace al LDAP (DN == "Distinguished Name")&lt;br /&gt;//En este caso nos situamos en el OU (Unidad Organizacional) principal&lt;br /&gt;$dn = "OU=Casa, DC=labserver, DC=com";&lt;br /&gt;&lt;br /&gt;//Datos de Configuración de Filtro para la búsqueda de un Usuario&lt;br /&gt;$filtro = "(&amp;amp;(objectClass=user)(samAccountName=$usuario))";&lt;br /&gt;&lt;br /&gt;//Conectamos al servidor LDAP con los =&gt; "Datos de Configuración del Servidor"&lt;br /&gt;$PHPLdap = new PHPLdap($servidor, $puerto);&lt;br /&gt;&lt;br /&gt;//Luego de habernos conectado al servidor, enlazamos la conexion identificandonos con un password&lt;br /&gt;//para el usuario PHP (CN=PHP)&lt;br /&gt;$PHPLdap-&gt;enlazarPHPLdap($cadenaConexionUsuario, $password);&lt;br /&gt;&lt;br /&gt;//Luedo de haber realizado el enlace principal con el usuario PHP (CN=PHP) creado para este fin&lt;br /&gt;//Procedemos a realizar la búsqueda del usuario a autenticar con la aplicación en PHP.&lt;br /&gt;//PD: No se envía el usuario como parámetro ya que se encuentra interpretado en la variable: $filtro&lt;br /&gt;$autenticar = $PHPLdap-&gt;autenticarUsuario($dn, $filtro, $clave);&lt;br /&gt;&lt;br /&gt;//Verificamos el valor de retorno de la autenticación&lt;br /&gt;if($autenticar===true){&lt;br /&gt;//Autenticado&lt;br /&gt;//Aca es donde generas la $_SESSION, COOKIES, o como manejes la autenticación&lt;br /&gt;//Luego redirecciónas, a la página privada, etc.&lt;br /&gt;echo "- A buena hora! Lograste autentificar al usuario &lt;b&gt;$usuario&lt;/b&gt;";&lt;br /&gt;}&lt;br /&gt;else{&lt;br /&gt;//Acceso Denegado&lt;br /&gt;echo "- Contraseña Incorrecta para el usuario &lt;b&gt;$usuario&lt;/b&gt;";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//Cerramos la conexion a LDAP&lt;br /&gt;$PHPLdap-&gt;cerrarConexion();&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;Y también el código de la clase (&lt;span style="font-weight: bold;"&gt;LDAPhp.class.php&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;/*** Título:    Enlace PHP con LDAP para autenticar usuarios en aplicaciónes web&lt;br /&gt;**** Autor:    Andrés Pérez-Albela H.** Web:    http://www.seguridadinformatica.org/&lt;br /&gt;**** Blog:    http://develsec.blogspot.com&lt;br /&gt;**** Versión:   1.0&lt;br /&gt;**** Lenguaje:   PHP&lt;br /&gt;**** Licencia:   Copyright © SeguridadInformatica.Org&lt;br /&gt;**** Creative Commons Atribución-Sin Obras Derivadas 3.0 Unported License&lt;br /&gt;****/&lt;br /&gt;&lt;br /&gt;class PHPLdap{&lt;br /&gt;    private $ds;&lt;br /&gt;    private $bind;&lt;br /&gt;    &lt;br /&gt;    public function PHPLdap($host, $puerto){&lt;br /&gt;    &lt;br /&gt;        if(!isset($this-&gt;ds)){&lt;br /&gt;            if($this-&gt;ds = (ldap_connect($host, $puerto))){&lt;br /&gt;                echo "- LDAP conectado a: ".$host."";&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                die("- No me puedo conectar con servidor LDAP");&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public function enlazarPHPLdap($cadenaConexionUsuario, $password){&lt;br /&gt;        $this-&gt;bind = @ldap_bind($this-&gt;ds, $cadenaConexionUsuario, $password);&lt;br /&gt;        &lt;br /&gt;        if($this-&gt;bind){&lt;br /&gt;            echo "- Se realizó el enlace principal satisfactoriamente con el usuario PHP";&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;            die("- El enlace principal no se pudo llevar a cabo");&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public function autenticarUsuario($dn, $filtro, $clave){&lt;br /&gt;        $busqueda=ldap_search($this-&gt;ds, $dn, $filtro);&lt;br /&gt;        $resultados = ldap_get_entries($this-&gt;ds, $busqueda);&lt;br /&gt;        &lt;br /&gt;        //Habiendo buscado el usuario a autenticar con "ldap_search" y obteniendo resultados en&lt;br /&gt;        //un arreglo $resultados, con "ldap_get_entries", pasamos a condicionar la existencia&lt;br /&gt;        //de resultados positivos.&lt;br /&gt;        &lt;br /&gt;        if($resultados["count"]&gt;0){&lt;br /&gt;            //Ingreso a la condicional, verificando con el "count" que el usuario exista&lt;br /&gt;            //Quiere decir que si encontró al usuario&lt;br /&gt;            //Luego obtenemos el DN (Nombre Distinguido) del usuario&lt;br /&gt;            &lt;br /&gt;            $dnUsuario = trim($resultados[0]["distinguishedname"][0]);&lt;br /&gt;            &lt;br /&gt;            //Para poder finalmente realizar el enlace final, siendo "enlace final" el login correcto.&lt;br /&gt;            //Si y solo si... la clave es correcta&lt;br /&gt;            &lt;br /&gt;            if(@ldap_bind($this-&gt;ds, $dnUsuario, $clave)){&lt;br /&gt;                //Se realiza el bind, siendo la clave correcta, y se retorna un valor VERDADERO (true)&lt;br /&gt;                return true;&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                return false;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public function cerrarConexion(){&lt;br /&gt;        //Cerramos la conexion a LDAP&lt;br /&gt;        ldap_close($this-&gt;ds);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;Bueno, y eso es todo. Espero que les sirva la información, el post es completamente propio y cualquier consulta no duden en comentarla acá en el post.&lt;br /&gt;&lt;br /&gt;Saludos, hasta la próxima entrada.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1938380385276969904-7248048359952255921?l=develsec.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/develsec/~4/DbqywaQQegU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/develsec/~3/DbqywaQQegU/enlazando-php-con-ldap-ldaphpclassphp.html</link><author>noreply@blogger.com (Andrés Pérez-Albela H.)</author><thr:total>5</thr:total><feedburner:origLink>http://develsec.blogspot.com/2010/03/enlazando-php-con-ldap-ldaphpclassphp.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1938380385276969904.post-2695061031285617361</guid><pubDate>Thu, 11 Mar 2010 06:03:00 +0000</pubDate><atom:updated>2010-03-12T15:09:52.972-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">BIENVENIDA</category><category domain="http://www.blogger.com/atom/ns#">GENERAL</category><title>Bienvenidos a DevelSec</title><description>&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;Bueno, creo que ya era hora de crear mi propio blog para poder expresar mis ideas y exponer las cosas que sé y aprendo.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Bienvenidos a todos los interesados en estos dos rubros en los que enfocaré el contenido del blog: Seguridad Informática y Programación.&lt;br /&gt;&lt;br /&gt;Espero poder ayudar a las personas que me escriban/comenten y agradeceré sugerencias/recomendaciones para que este blog siga su trayecto y continúe con vida.&lt;br /&gt;&lt;br /&gt;Así que con este post comienza el Blog DevelSec.&lt;br /&gt;&lt;br /&gt;Saludos entonces para mis lectores!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1938380385276969904-2695061031285617361?l=develsec.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/develsec/~4/WtMjLOSRpLM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/develsec/~3/WtMjLOSRpLM/bienvenidos-develsec.html</link><author>noreply@blogger.com (Andrés Pérez-Albela H.)</author><thr:total>2</thr:total><feedburner:origLink>http://develsec.blogspot.com/2010/03/bienvenidos-develsec.html</feedburner:origLink></item></channel></rss>

