Backup Oficial de SeguridadBlanca.Org

Mostrando entradas con la etiqueta Hardening. Mostrar todas las entradas
Mostrando entradas con la etiqueta Hardening. Mostrar todas las entradas

martes, 27 de octubre de 2009

Obtener Archivos del Server con Sql Injection

Digamos que hemos encontrado un sql injection magic quoutes = off entonces usamos el Admin Path Finder para encontrar una panel pero resulta que no lo encuentra, entonces nosotros diriamos pero entonces que hacemos con el Sql Injection... vamos a hacer algo bien bacan...

Vamos a mostrar primero como sería el code vulnerable y por que lo es...

Code:


<?php
$id = $_GET['id'];
$peticion = mysql_query( "SELECT columna FROM usuarios WHERE id = '$id'");

?>


Ahora la mayoría mirará directo al codigo en sql y básicamente el error no está ahí,
el error está en el GET que hacemos... mm pues no está filtrado nada, ahora, ustedes dirán si no hay panel como explotamos?

Bueno comenzaremos a hacer la inyección a la variable ID en la web webvulnerable.com:

http://www.webvulnerable.pe/profile.php?id=1

Ahora vamos a inyectarla una inyeccion simple...


http://www.webvulnerable.pe/profile.php?id=1+union+all+select+1,2,3,4,5--


Nos manda un error diferente en el 4 entonces haremos una inyección como para no complicarnos...

http://www.webvulnerable.pe/profile.php?id=1+union+all+select+1,2,null,load_file('etc/passwd'),5--

En la inyección no hay mucho que decir lo diferente a lo normal que hemos usado es la funcion load_file() la cual nos ayuda a obtener el archivo etc/passwd/ ya ustedes ven si necesitan otro directorio o ustedes dirán que necesitan...

ahora ya sabemos como podemos atacar esto ahora como podemos hacer para que este ataque no nos afecte?...

simplemente hay que hacer algo pequeño:


<?php
$id = addslashes($_GET['id']);
$peticion = mysql_query( "SELECT columna FROM usuarios WHERE id = '$id'");

?>


hemos añadido addslashes() a nuestro codigo lo cual hará que no podamos poner caracteres inválidos, es mejor que usen otras funciones hechas por ustedes mismos o un str_replace() para un mejor funcionamiento de sus scripts...


Espero les sirva este tutorial y como vieron nisiquiera subimos shell...

Si el Magic_quotes esta off entonces podremos hacer uno que otro movimiento mas a nuestro favor...


EDIT - Filtro recomendado por Ozx - undersecurity.net:


<?php
$id = (int)$_GET['id'];
$peticion = mysql_query( "SELECT columna FROM usuarios WHERE id = '$id'");

?>

====

Otra Opción con Str Replace... by me...


<?php
$id = $_GET['id'];
$user = str_replace("select","lamo",$id);
$peticion = mysql_query( "SELECT columna FROM usuarios WHERE id = '$id'");

?>


ustedes modifiquen el str_replace segun su necesidad, yo no se lo que ustedes deseen...



Saludos
Dr.White

Obtener Archivos del Server con Sql Injection

Digamos que hemos encontrado un sql injection magic quoutes = off entonces usamos el Admin Path Finder para encontrar una panel pero resulta que no lo encuentra, entonces nosotros diriamos pero entonces que hacemos con el Sql Injection... vamos a hacer algo bien bacan...

Vamos a mostrar primero como sería el code vulnerable y por que lo es...

Code:


<?php
$id = $_GET['id'];
$peticion = mysql_query( "SELECT columna FROM usuarios WHERE id = '$id'");

?>


Ahora la mayoría mirará directo al codigo en sql y básicamente el error no está ahí,
el error está en el GET que hacemos... mm pues no está filtrado nada, ahora, ustedes dirán si no hay panel como explotamos?

Bueno comenzaremos a hacer la inyección a la variable ID en la web webvulnerable.com:

http://www.webvulnerable.pe/profile.php?id=1

Ahora vamos a inyectarla una inyeccion simple...


http://www.webvulnerable.pe/profile.php?id=1+union+all+select+1,2,3,4,5--


Nos manda un error diferente en el 4 entonces haremos una inyección como para no complicarnos...

http://www.webvulnerable.pe/profile.php?id=1+union+all+select+1,2,null,load_file('etc/passwd'),5--

En la inyección no hay mucho que decir lo diferente a lo normal que hemos usado es la funcion load_file() la cual nos ayuda a obtener el archivo etc/passwd/ ya ustedes ven si necesitan otro directorio o ustedes dirán que necesitan...

ahora ya sabemos como podemos atacar esto ahora como podemos hacer para que este ataque no nos afecte?...

simplemente hay que hacer algo pequeño:


<?php
$id = addslashes($_GET['id']);
$peticion = mysql_query( "SELECT columna FROM usuarios WHERE id = '$id'");

?>


hemos añadido addslashes() a nuestro codigo lo cual hará que no podamos poner caracteres inválidos, es mejor que usen otras funciones hechas por ustedes mismos o un str_replace() para un mejor funcionamiento de sus scripts...


Espero les sirva este tutorial y como vieron nisiquiera subimos shell...

Si el Magic_quotes esta off entonces podremos hacer uno que otro movimiento mas a nuestro favor...


EDIT - Filtro recomendado por Ozx - undersecurity.net:


<?php
$id = (int)$_GET['id'];
$peticion = mysql_query( "SELECT columna FROM usuarios WHERE id = '$id'");

?>

====

Otra Opción con Str Replace... by me...


<?php
$id = $_GET['id'];
$user = str_replace("select","lamo",$id);
$peticion = mysql_query( "SELECT columna FROM usuarios WHERE id = '$id'");

?>


ustedes modifiquen el str_replace segun su necesidad, yo no se lo que ustedes deseen...



Saludos
Dr.White

sábado, 24 de octubre de 2009

Les recomiendo...

Hoy conversando con un colega me paso este PDF no es la gran cosa sinceramente... pero... es muy útil en siertas ocaciones, mas que nada si haces hardening de Sistemas Operativos...

Espero les sirva el PDF:

Click Aquí



Saludos y Disfrutenlo
Dr.White

Les recomiendo...

Hoy conversando con un colega me paso este PDF no es la gran cosa sinceramente... pero... es muy útil en siertas ocaciones, mas que nada si haces hardening de Sistemas Operativos...

Espero les sirva el PDF:

Click Aquí



Saludos y Disfrutenlo
Dr.White

jueves, 17 de septiembre de 2009

Los Xss Cuidado!


Durante un buen tiempo yo vine dando como respuesta a los Xss el Htmlentities como función pero he dado con que no , no es tan simple como eso... de hecho sigue siendo vulnerable a Xss solo tienes que aplicar un pequeño bypass que les enseñaré hoy...

un codigo que supuestamente deberia de evitar el XSS sería:


<?php

$test = htmlentities($_POST['valor']);

echo '$test'
?>


y bueno con un formulario hecho...


Ahora ustedes dirán que tiene ese codigo de mal pues... el filtro htmlentities

Como ustedes saben o no el filtro de los htmlentities lo que hace es pasarlo a utf-7 entonces no se interpreta y ya pues no se ejecuta...

la funcion que usa es algo asi en PHP:


<?php

echo mb_convert_encoding('tu code xss', 'UTF-7');

?>


entonces ahi les devolvería un valor como:

UTF-7 pero que pasa si en el valor del Xss lo ponemos ya en UTF-7 es decir en ves de poner nuestro conocido:


<script>alert(/hacked/);</script>


con // en ves de '' para evitarnos problemas de transformación...

entonces ya transformado sería:


+ADw-script+AD4-alert(/hacked/)+ADsAPA-/script+AD4-


eso causaría un Bypass que igual ejecutaría el Xss...


Como ven... todos cometemos este error.. o la mayoría... es decir prácticamente todos los webmasters que ponian htmlentities estan un poco fregados asi que les recomiendo cambien y lo digo incluyendome yo lo usaba hasta que decidí hacer un experimento con los http headers y netcat hasta que di con este problemin investigue un poco mas en google y como ven pues es bien crítico esto... para los que ya tenían conocimiento de eso pues fomentemelo para que no se siga cometiendo este error... espero que no lo mal gasten el conocimiento...


Ahora como corrigen el error? pues muy fácil...


<?php

$test = htmlspecialchars($_GET['test'], ENT_QUOTES);

?>


en ves de eso usen htmlspecialchars() como función para que funcione bien... mmm tambien pueden usar sus str_replace() pero ya vean ustedes...

espero que este tuto les haya gustado, me he esforzado mucho en hacerlo...

Pd: sorry por la imagen pero es que =s no tengo alguien que me haga y edite las imagenes para que salga con la url jaja...


Saludos
Dr.White

Los Xss Cuidado!


Durante un buen tiempo yo vine dando como respuesta a los Xss el Htmlentities como función pero he dado con que no , no es tan simple como eso... de hecho sigue siendo vulnerable a Xss solo tienes que aplicar un pequeño bypass que les enseñaré hoy...

un codigo que supuestamente deberia de evitar el XSS sería:


<?php

$test = htmlentities($_POST['valor']);

echo '$test'
?>


y bueno con un formulario hecho...


Ahora ustedes dirán que tiene ese codigo de mal pues... el filtro htmlentities

Como ustedes saben o no el filtro de los htmlentities lo que hace es pasarlo a utf-7 entonces no se interpreta y ya pues no se ejecuta...

la funcion que usa es algo asi en PHP:


<?php

echo mb_convert_encoding('tu code xss', 'UTF-7');

?>


entonces ahi les devolvería un valor como:

UTF-7 pero que pasa si en el valor del Xss lo ponemos ya en UTF-7 es decir en ves de poner nuestro conocido:


<script>alert(/hacked/);</script>


con // en ves de '' para evitarnos problemas de transformación...

entonces ya transformado sería:


+ADw-script+AD4-alert(/hacked/)+ADsAPA-/script+AD4-


eso causaría un Bypass que igual ejecutaría el Xss...


Como ven... todos cometemos este error.. o la mayoría... es decir prácticamente todos los webmasters que ponian htmlentities estan un poco fregados asi que les recomiendo cambien y lo digo incluyendome yo lo usaba hasta que decidí hacer un experimento con los http headers y netcat hasta que di con este problemin investigue un poco mas en google y como ven pues es bien crítico esto... para los que ya tenían conocimiento de eso pues fomentemelo para que no se siga cometiendo este error... espero que no lo mal gasten el conocimiento...


Ahora como corrigen el error? pues muy fácil...


<?php

$test = htmlspecialchars($_GET['test'], ENT_QUOTES);

?>


en ves de eso usen htmlspecialchars() como función para que funcione bien... mmm tambien pueden usar sus str_replace() pero ya vean ustedes...

espero que este tuto les haya gustado, me he esforzado mucho en hacerlo...

Pd: sorry por la imagen pero es que =s no tengo alguien que me haga y edite las imagenes para que salga con la url jaja...


Saludos
Dr.White

lunes, 14 de septiembre de 2009

Para el Hardening V1 by Me

Es la primera ves que haré una entrada así y espero les guste, enseñaré como proteger una web de Sql Injection muy popular la tipica que empiesa con -1+union...


Ahora nuestro codigo vulnerable será...



if (isset($_GET['id'])) {
$result = mysql_query("SELECT * FROM pages WHERE id='".$_GET['id']."'");
return mysql_fetch_assoc($result);
}



Ahora como ven el Anteior code es vulnerable por dos lados por el Where y por el Select entonces por Ahora vamos a asegurad solo el Select ya que esta es solo la Versión 1 de los Artículos que haré de Hardening a Web APPs y CMS...

Para empesar tenemos que saber que hacemos con la consulta ahi lo que está diciendo como quien dice en Pseudocodigo es:

Seleccionar lo que venga de pages donde el id sea el que hemos ingresado o se nos ha asignado.

Entonces como que ahi nosotros decimos pero que pasa si es que lo que venga se equivoca la primera ves y la segunda tambien y la tercera tambien hasta que en la cuarta ya es entonces tenemos tres espacios de error por los cuales podriamos por comandos ir extrayendo datos que no son nuestros en este caso el robo de datos.

entonces lo que harémos será no ser vagos y hacer que se ponga campo por cam y registro por registro lo que pedimos nuestra sentencia sería asi:


if (isset($_GET['id'])) {
$result = mysql_query("SELECT id FROM pages WHERE id='".$_GET['id']."'");
return mysql_fetch_assoc($result);
}




siendo la tabla:


CREATE TABLE `pages` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(45) NOT NULL,
`content` text NOT NULL,
`hp` tinyint(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;


por ahora espero que esto les ayude a que ya no cometan ese error en la proxima edición del tutorial les enseñaré al arreglar el error del Where que muchos cometen.


Espero les haya Gustado.


Saludos
Dr.White

Para el Hardening V1 by Me

Es la primera ves que haré una entrada así y espero les guste, enseñaré como proteger una web de Sql Injection muy popular la tipica que empiesa con -1+union...


Ahora nuestro codigo vulnerable será...



if (isset($_GET['id'])) {
$result = mysql_query("SELECT * FROM pages WHERE id='".$_GET['id']."'");
return mysql_fetch_assoc($result);
}



Ahora como ven el Anteior code es vulnerable por dos lados por el Where y por el Select entonces por Ahora vamos a asegurad solo el Select ya que esta es solo la Versión 1 de los Artículos que haré de Hardening a Web APPs y CMS...

Para empesar tenemos que saber que hacemos con la consulta ahi lo que está diciendo como quien dice en Pseudocodigo es:

Seleccionar lo que venga de pages donde el id sea el que hemos ingresado o se nos ha asignado.

Entonces como que ahi nosotros decimos pero que pasa si es que lo que venga se equivoca la primera ves y la segunda tambien y la tercera tambien hasta que en la cuarta ya es entonces tenemos tres espacios de error por los cuales podriamos por comandos ir extrayendo datos que no son nuestros en este caso el robo de datos.

entonces lo que harémos será no ser vagos y hacer que se ponga campo por cam y registro por registro lo que pedimos nuestra sentencia sería asi:


if (isset($_GET['id'])) {
$result = mysql_query("SELECT id FROM pages WHERE id='".$_GET['id']."'");
return mysql_fetch_assoc($result);
}




siendo la tabla:


CREATE TABLE `pages` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(45) NOT NULL,
`content` text NOT NULL,
`hp` tinyint(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;


por ahora espero que esto les ayude a que ya no cometan ese error en la proxima edición del tutorial les enseñaré al arreglar el error del Where que muchos cometen.


Espero les haya Gustado.


Saludos
Dr.White