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ú

Mensajes - 0x0309

#1
Nivel Web / Re: Evitar cookie nula en php
18 Octubre 2009, 22:05 PM
ah, gracias por la info.

hice una funcion para iniciar sesión, aunque creo que es más práctico lo que dices de agregar el exit, y también un error_reporting(0).

Código (php) [Seleccionar]

function iniciar_sesion()
{
    if (!is_string($_COOKIE[session_name()])
          || preg_match(
              '/^[a-zA-Z0-9\,\-]{32}$/'
              , $_COOKIE[session_name()]
             ) != 1 ) {
        unset($_COOKIE[session_name()]);
    }
    session_start();
}

#2
a mí me gustaría participar para aprender, pero mejor no ya que voy a estar muy ocupado.
#3
Nivel Web / Evitar cookie nula en php
18 Octubre 2009, 04:42 AM
Hola, me gustaría preguntar de qué manera se puede evitar una cookie nula.

Por ejemplo, en un sitio existía un mecanismo de autenticación algo así (los nombres los he cambiado):

/adm/control.php

<?php
session_start
();
if (
$_SESSION['auth'] != 'YES') {
    
header('Location: index.php');
}
echo 
'Panel de admin';
?>



/adm/index.php

<?php
echo 'No logeado';
?>



y al acceder a /adm/control.php se va a index.php porque no está registrada la variable de sesión.
Pero si modifico el contenido de la Cookie con tamper data así:


PHPSESSID=


Se produce lo siguiente:


Warning: session_start() [function.session-start]: The session id contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in C:\sitio\adm\control.php on line 3

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\sitio\adm\control.php:3) in C:\sitio\adm\control.php on line 3

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\sitio\adm\control.php:3) in C:\sitio\adm\control.php on line 3

Warning: Cannot modify header information - headers already sent by (output started at C:\sitio\adm\control.php:3) in C:\sitio\adm\control.php on line 5
Panel de admin


Entonces, mi pregunta es cómo evitar que session_start() se caiga ante un ataque así.

#4
mira, lo mejor es que utilices un programa que te haga el trabajo, y simplemente lo llamas con parámetros.
Hay uno muy bueno que se llama gsar.exe

http://gnuwin32.sourceforge.net/packages/gsar.htm

Esta es su ayuda:


gsar, ver 1.21 -- Copyright (C) 1992-2008 Tormod Tjaberg & Hans Peter Verne

Usage: gsar [options] [infile(s)] [outfile]
Options are:
-s<string> Search string
-r[string] Replace string. Use '-r' to delete the search string from the file
-i         Ignore case difference when comparing strings
-B         just display search & replace Buffers
-f         Force overwrite of an existing output file
-o         Overwrite the existing input file
-c[n]      show textual Context of match, 'n' is number of bytes in context
-x[n]      show context as a heX dump, 'n' is number of bytes in context
-b         display Byte offsets of matches in file
-l         only List filespec and number of matches (default)
-h         suppress display of filespec when displaying context or offsets
-du        convert a DOS ASCII file to UNIX (strips carriage return)
-ud        convert a UNIX ASCII file to DOS (adds carriage return)
-F         'Filter' mode, input from stdin and eventual output to stdout
-G         display the GNU General Public Licence

Ctrl characters may be entered by using a ':' in the string followed by the
ASCII value of the character. The value is entered using ':' followed by three
decimal digits or ':x' followed by two hex numbers. To enter ':' use '::'


Por ejemplo yo tengo el siguiente script para modificar rápidamente el boot.ini y activar dep para todos los programas y servicios. Esto normalmente, se hace yendo a Propiedades de pc ... y varios clics. En cambio yo automaticé el proceso. Activar dep para todos los programas es para aumentar la seguridad del equipo y que no te vulneren el sistema operativo con drivers.


@echo off
reg.exe delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /f >nul 2>&1
(set file=%SystemDrive%\boot.ini)
attrib.exe -a -s -h -r "%file%" >nul 2>&1
gsar.exe -i -o -sNoExecute=OptIn -rNoExecute=OptOut "%file%" >nul 2>&1
if not errorlevel 1 (
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\NoExecuteState" /v LastNoExecuteRadioButtonState /t REG_DWORD /d 13013 /f >nul 2>&1
)
attrib.exe +a +s +h +r "%file%" >nul 2>&1


Lo que hace mi código es reemplazar en el boot.ini:
NoExecute=OptIn
por
NoExecute=OptOut

Si es que existe el texto OptIn, sino devuelve errorlevel 1 que significa que no reemplazo nada porque no encontró el texto de entrada en el archivo.

Yo te recomiendo este programa porque lo he probado y funciona bien.
#5
PHP / Re: Filtro SQL Injection y Filtro XSS
16 Octubre 2009, 08:22 AM
este es el nuevo código:


PD9waHANCg0KLy9Fc3RvcyBjb2RpZ29zIGVzdGFuIHBlbnNhZG9zIHBhcmEgdHJhYmFqYXIgY29u
IHBocCA1DQovL1BhcmEgcGhwIDYgaGFicmEgcXVlIG1vZGlmaWNhcmxvcyBwb3JxdWUgeWEgbm8g
c2UgdXNhcmFuIG1hZ2ljIHF1b3Rlcy4NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMNCiMgRmlsdHJvIHBhcmEgZXZpdGFyIFNRTCBJbmplY3Rpb24gICAgICAg
ICAjDQojIHZlcnNpb246IDAuNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIw0KIyBSZWNp
YmUgdHJlcyBwYXJhbWV0cm9zOiAgICAgICAgICAgICAgICAgICMNCiMgIEVsIDFybzogc3RyaW5n
IG8gYXJyZWdsbyBkZSBzdHJpbmcuICAgICAjDQojICBFbCAyZG86IHNpIGVsIHN0cmluZyBzZSB1
c2FyYSBjb24gTElLRS4gIw0KIyAgRWwgM3JvOiBzaSBlbCBzdHJpbmcgcHJvdmllbmUgZGU6ICAg
ICAgICMNCiMgICBQT1NUL0dFVC9DT09LSUUvYXJjaGl2by9jb25zdWx0YSBTUUwuICAjDQojIFJl
dG9ybmEgdW5hIGNvcGlhIGZpbHRyYWRhLiAgICAgICAgICAgICAgIw0KIyBBdXRvcjogMHgwMzA5
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjDQpmdW5jdGlvbiBhbnRpU1FMSW5qZWN0aW9uKCR0ZXh0LCAkbGlr
ZSA9IGZhbHNlLCAkaW5wdXQgPSB0cnVlKQ0Kew0KICAgIGlmIChpc19zdHJpbmcoJHRleHQpKSB7
DQogICAgICAgIGlmICgkaW5wdXQpIHsNCiAgICAgICAgICAgIGxpbXBpYUJhY2tTbGFzaGVzSW52
b2x1bnRhcmlvcygkdGV4dCk7DQogICAgICAgIH0NCiAgICAgICAgJHRleHQgPSBteXNxbF9yZWFs
X2VzY2FwZV9zdHJpbmcoJHRleHQpOw0KICAgICAgICBpZiAoJGxpa2UpIHsNCiAgICAgICAgICAg
ICR0ZXh0ID0gYWRkY3NsYXNoZXMoJHRleHQsICclXycpOw0KICAgICAgICB9DQogICAgfSBlbHNl
aWYgKGlzX2FycmF5KCR0ZXh0KSkgew0KICAgICAgICAkYSA9IGFycmF5KCk7DQogICAgICAgIHdo
aWxlKGxpc3QoJGtleSwgJHZhbHVlKSA9IGVhY2goJHRleHQpKSB7DQogICAgICAgICAgICAkYVsk
a2V5XSA9IGFudGlTUUxJbmplY3Rpb24oJHZhbHVlLCAkbGlrZSwgJGlucHV0KTsNCiAgICAgICAg
fQ0KICAgICAgICAkdGV4dCA9ICRhOw0KICAgIH0NCiAgICByZXR1cm4gJHRleHQ7DQp9DQoNCg0K
DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIEZpbHRybyBw
YXJhIGV2aXRhciBDcm9zcy1TaXRlIFNjcmlwdGluZyAjDQojIHZlcnNpb246IDAuNSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAjDQojIFJlY2liZSBkb3MgcGFyYW1ldHJvczogICAgICAgICAg
ICAgICAgICAjDQojICBFbCAxcm86IHN0cmluZyBvIGFycmVnbG8gZGUgc3RyaW5nLiAgICAjDQoj
ICBFbCAyZG86IHNpIGVsIHRleHRvIHByb3ZpZW5lIGRlOiAgICAgICAjDQojICAgUE9TVC9HRVQv
Q09PS0lFL2FyY2hpdm8vY29uc3VsdGEgU1FMLiAjDQojIFJldG9ybmEgdW5hIGNvcGlhIGZpbHRy
YWRhLiAgICAgICAgICAgICAjDQojIEF1dG9yOiAweDAzMDkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpmdW5j
dGlvbiBhbnRpQ3Jvc3NTaXRlU2NyaXB0aW5nKCR0ZXh0LCAkaW5wdXQgPSB0cnVlKQ0Kew0KICAg
IGlmIChpc19zdHJpbmcoJHRleHQpKSB7DQogICAgICAgIGlmICgkaW5wdXQpDQogICAgICAgIHsN
CiAgICAgICAgICAgIGxpbXBpYUJhY2tTbGFzaGVzSW52b2x1bnRhcmlvcygkdGV4dCk7DQogICAg
ICAgIH0NCiAgICAgICAgJHRleHQgPSBodG1sZW50aXRpZXMoJHRleHQsIEVOVF9RVU9URVMsICdV
VEYtOCcpOw0KICAgIH0gZWxzZWlmIChpc19hcnJheSgkdGV4dCkpIHsNCiAgICAgICAgJGEgPSBh
cnJheSgpOw0KICAgICAgICB3aGlsZShsaXN0KCRrZXksICR2YWx1ZSkgPSBlYWNoKCR0ZXh0KSkg
ew0KICAgICAgICAgICAgJGFbJGtleV0gPSBhbnRpQ3Jvc3NTaXRlU2NyaXB0aW5nKCR2YWx1ZSwg
JGlucHV0KTsNCiAgICAgICAgfQ0KICAgICAgICAkdGV4dCA9ICRhOw0KICAgIH0NCiAgICByZXR1
cm4gJHRleHQ7DQp9DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjDQojIEZ1bmNpb24gcXVlIGVsaW1pbmEgbG9zIGJhY2tzbGFzaGVzICAgICAgIw0KIyBhZ3Jl
Z2Fkb3MgcG9yIHBocCBzaSBzZSB1c2EgbWFnaWNfcXVvdGVzICMNCiMgdmVyc2lvbjogMC4yICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAjDQojIFJlY2liZSB1biBzdHJpbmcgeSBsZSBxdWl0
YSBiYWNrc2xhc2hlcyAgIw0KIyAgcHJvZHVjaWRvcyBwb3IgbWFnaWNfcXVvdGVzICAgICAgICAg
ICAgICMNCiMgQXV0b3I6IDB4MDMwOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjDQojIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZnVuY3Rpb24gbGltcGlh
QmFja1NsYXNoZXNJbnZvbHVudGFyaW9zKCYkdGV4dCkNCnsNCiAgICBpZiAoZ2V0X21hZ2ljX3F1
b3Rlc19ncGMoKQ0KICAgICAgICAgfHwgZ2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKCkgKSB7DQog
ICAgICAgICR0ZXh0ID0gc3RyaXBzbGFzaGVzKCR0ZXh0KTsNCiAgICB9DQp9DQoNCj8+DQo=


Un ejemplo de uso:

echo antiCrossSiteScripting( antiSQLInjection( $_GET['txt'], true ), false );
//en este caso el segundo parametro de antiCrossSiteScripting es false porque la entrada fue limpiada por antiSQLInjection.
//El segundo parametro de antiSQLInjection es true porque se usará hipóteticamente con LIKE por eso los carácteres % y _ serán escapados.

produce cuando:
?txt=O'reilly%_

O\'reilly\%\_
#6
PHP / Re: Filtro SQL Injection y Filtro XSS
16 Octubre 2009, 07:19 AM
Gracias por responder.

Mira, yo cuando programo dejo las fuentes de entrada intactas. Así si por ejemplo recibo un texto por $GET['txt'] lo dejo así.
No hago: $GET['txt'] = filtro($GET['txt']);

así nunca tendré que revertir un filtro.

sino que creo una nueva referencia:
Por ejemplo para consulta sql


$miconsulta = fprintf("select campo from tabla where n='%s'", antiSQLInjection($GET['txt']));


o para imprimir el valor:

echo antiCrossSiteScripting($GET['txt']);


Aquí he creado otra versión, ahora es más personalizado. por ejemplo si tengo un campo que comienza con _ y aplicaba el filtro para sql anterior, buscando por ejemplo el valor _abc no lo encontraría porque después del filtro quedaba: \_abc
Así, ahora si el texto se usará con un LIKE se pasa el parámetro true.
Similar para el antiCrossSiteScripting.
Si dejaba una variable así:

$texto = '<b>Este es backslas:\\</b>';

y hacia:

echo antiCrossSiteScripting($texto);


imprimía: el texto sin el backslash final.

Ahora, especifico que si el texto no provino de una fuente de entrada, es decir lo creo yo, no le quite los backlashes explícitos que yo escribo.

En un nuevo mensaje dejo el nuevo código, porque lo he modificado varias veces después de postearlo.
#7
Nivel Web / Re: Vulnerabilidades en PHP
15 Octubre 2009, 13:17 PM
si quieres podrías enviarme un privado con la url para analizar que te puede resultar.
#8
PHP / Re: Filtro SQL Injection y Filtro XSS
14 Octubre 2009, 10:56 AM
Aquí hice una nueva versión con soporte para arrays.
Nota: coloco el code codificado en base 64 porque el foro no me deja postearlo, si quieren intenten, lo decodifican y en un mensaje lo pegan y hacen una previsualización (a mí me sale acceso denegado).

Para decodificar pueden usar:

http://ostermiller.org/calc/encode.html


DQo8P3BocA0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMgRmlsdHJv
IHBhcmEgZXZpdGFyIFNRTCBJbmplY3Rpb24gIw0KIyB2ZXJzaW9uOiAwLjIgICAgICAgICAgICAg
ICAgICAgICAjDQojIEF1dG9yOiAweDAzMDkgICAgICAgICAgICAgICAgICAgICMNCiMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZnVuY3Rpb24gYW50aVNRTEluamVjdGlvbigk
dCkNCnsNCiAgICBpZiAoaXNfc3RyaW5nKCR0KSkgew0KICAgICAgICBpZiAoZ2V0X21hZ2ljX3F1
b3Rlc19ncGMoKSkgew0KICAgICAgICAgLy9lbiBwaHAgNiBtYWdpYyBxdW90ZXMgeWEgbm8gdmFu
DQogICAgICAgICAgICAkdCA9IHN0cmlwc2xhc2hlcygkdCk7DQogICAgICAgIH0NCiAgICAgICAg
JHQgPSBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHQpOw0KICAgICAgICAkdCA9IGFkZGNzbGFz
aGVzKCR0LCAnJV8nKTsNCiAgICB9IGVsc2VpZiAoaXNfYXJyYXkoJHQpKSB7DQogICAgICAgICRh
ID0gYXJyYXkoKTsNCiAgICAgICAgd2hpbGUobGlzdCgkYywgJHYpID0gZWFjaCgkdCkpIHsNCiAg
ICAgICAgICAgICRhWyRjXSA9IGFudGlTUUxJbmplY3Rpb24oJHYpOw0KICAgICAgICB9DQogICAg
ICAgICR0ID0gJGE7DQogICAgfQ0KICAgIHJldHVybiAkdDsNCn0NCg0KIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBGaWx0cm8gcGFyYSBldml0YXIgQ3Jvc3Mt
U2l0ZSBTY3JpcHRpbmcgIw0KIyB2ZXJzaW9uOiAwLjIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIw0KIyBBdXRvcjogMHgwMzA5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIw0KIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZnVuY3Rpb24gYW50aUNyb3Nz
U2l0ZVNjcmlwdGluZygkdCkNCnsNCiAgICBpZiAoaXNfc3RyaW5nKCR0KSkgew0KICAgICAgICR0
ID0gaHRtbGVudGl0aWVzKCR0LCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsNCiAgICB9IGVsc2VpZiAo
aXNfYXJyYXkoJHQpKSB7DQogICAgICAgICRhID0gYXJyYXkoKTsNCiAgICAgICAgd2hpbGUobGlz
dCgkYywgJHYpID0gZWFjaCgkdCkpIHsNCiAgICAgICAgICAgICRhWyRjXSA9IGFudGlDcm9zc1Np
dGVTY3JpcHRpbmcoJHYpOw0KICAgICAgICB9DQogICAgICAgICR0ID0gJGE7DQogICAgfQ0KICAg
IHJldHVybiAkdDsNCn0NCg0KPz4NCg==
#9
PHP / Re: Ayuda con sistema de login
14 Octubre 2009, 01:16 AM
Bueno, me respondo solo.

La solución fue comenzar a escribir todo de nuevo, pero basándome en funciones para así revisar y encontrar los errores.

Al final, no sé cual era el error, pero cree un código nuevo y funciona.

Este es el código, puede servirle a alguien.

/inc/auth.php
Código (php) [Seleccionar]

<?php

if (!defined('VER'))
die('Hacking attempt...');

function 
sesionPorDefecto()
{
    
cerrarSesion();
    
session_regenerate_id();
    
$_SESSION['logeado'] = false;
    
$_SESSION['anticsrf'] = 0;
    
$_SESSION['token'] = 0;
}

function 
cerrarSesion()
{
    
session_start();
    
session_unset();
    
session_destroy();
}

function 
estaLogeado()
{
    
session_start();
    if (isset(
$_SESSION['logeado'])
    
    && $_SESSION['logeado'] === true) {
        return 
true;
    }
    return 
false;
}

function 
intentoCsrf()
{
    
session_start();
    if (!isset(
$_SESSION['anticsrf'])
    
|| $_SESSION['anticsrf'] !== $_POST['t']
    
)
    {
    
return true;
    }
    return 
false;
}

function 
intentoSessionHijacking($fingerprint)
{
    if (
estaLogeado()
    
&& $_SESSION['token'] !== $fingerprint)
    {
    
return true;
    }
    return 
false;
}

?>




/inc/filtros.php

es el code que se encuentra en:
http://foro.elhacker.net/php/filtro_sql_injection_y_filtro_xss-t270635.0.html
el foro no me deja postearlo.


/logout.php
Código (php) [Seleccionar]

<?php
define
('VER',1);
require_once(
dirname(__FILE__).'/inc/auth.php');
require_once(
dirname(__FILE__).'/inc/filtros.php');


if (
estaLogeado()
   && !
intentoCsrf())
{
    
cerrarSesion();
    echo 
'Session closed.';
    echo 
'<br/>';
    echo 
'<a href="login.php">Go Login</a>';
    die ();
} else {
    die (
'Csrf attempt ...');
}

?>



/login.php
Código (php) [Seleccionar]

<?php
define
('VER',1);
require_once(
dirname(__FILE__).'/inc/auth.php');
require_once(
dirname(__FILE__).'/inc/filtros.php');

$fingerprint $fingerprint md5('12345'.$_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].'6789');

if (
intentoSessionHijacking($fingerprint))
{
    
cerrarSesion();
    die(
'Session hijacking attempt ...');
}


if (!
estaLogeado())
{
    if (
$_POST['username'] && $_POST['password'])
    {
$username antiSQLInjection($_POST['username']);
$password antiSQLInjection($_POST['password']);

//Hacer consulta en bd.

if ($username == 'carlos' && $password == 'entrar')
{
    session_regenerate_id();
    $_SESSION['logeado'] = true;
    $_SESSION['anticsrf'] = sha1('dfGFGsfsdf46433794bvcv' uniqid(rand(), TRUE) . 'addsfFHf5efSAfr324');
    $_SESSION['token'] = $fingerprint;
}
    }
}

if (!
estaLogeado())
{
?>


    <form method='POST' action='login.php'>
    <span>Username:</span>
    <input name="username" type="text" maxlength="20" size="20" />
    <span>Password:</span>
    <input name="password" type="text" maxlength="15" size="20" />
    <input name="login" type="submit" value="Login" />
    </form>

<?php
} else
{
    echo 
'You are logged' '<br/>';
    echo 
'<a href="index.php">Go Home</a>';
    echo (
"
    <form method='POST' action='logout.php'>
        <input name=\"t\" type=\"hidden\" value=\"" 
$_SESSION['anticsrf'] ."\" />
        <input name=\"logout\" type=\"submit\" value=\"Logout\" />
    </form>
    "
);
}
?>

#10
PHP / Ayuda con sistema de login
13 Octubre 2009, 22:14 PM
Hola, estoy intentando desarrollar un sistema de login en php, al parecer todo funciona bien, pero lo que no me funciona es el sistema anti session hijacking.
Quisiera saber si alguien me puede ayudar a encontrar el problema.

Para probar el csrf, una vez logueado con tamper data trato de enviar logout pero eliminando el t= Entonces dice csrf attempt.

Pero para probar session hijacking, no me funciona el tema del $fingerprint, una vez logueado, abro otra pestaña con firefox, y accedo a la url viendo el contenido exlusivo, si abro otra pestaña y accedo a la url, pero modificando el user agent, no se cae, diciendo session hijacking attempt, como que no cambia la cadena $fingerprint, y ese es el problema que tengo.

Si alguien por favor también pudiera darme sugerencias para hacer un buen sistema de login, se lo agradecería también.

Código (php) [Seleccionar]

//editado porque no estaba bueno. Abajo encuentran un código más decente.