Categories
Apache Web

mod_rewrite y el modificador L

Etienne Kneuss, en un breve pero bastante explicativo artículo comenta sobre: el modificador L (last rule), el funcionamiento interno de mod_rewrite y donde no debería ser usado este modificador cuando las reglas se definen desde el archivo .htaccess.

Es una referencia útil para los que deseen conocer un poquito más sobre el funcionamiento de mod_rewrite, en especial para los que teníamos algunos conceptos errados.

Categories
.NET ASP.NET Web

Protección de archivos con ASP.NET 2 e IIS 6

En ciertas ocasiones, es necesario controlar el acceso a los recursos o archivos de nuestra aplicación, bien sea por permitir sólo a usuarios registrados o con la intención de monitorear el número de descargas de éstos.

Todos los archivos relacionados a ASP.NET (aspx, asmx, ashx, asax, etc) son procesados por el runtime de ASP.NET y es por este motivo que se puede especificar que controlador HTTP se hará cargo de un determinado documento, a su vez también están disponibles los mecanismos de autenticación y autorización para éstos.

Categories
Quiz Seguridad Web WordPress

Un bug interesante en WordPress

El presente quiz está basado en un reciente bug de WordPress que fue corregido en la versión 2.0.6 de este CMS

php:

<?php

header('Content-type: text/plain; charset=utf-8;');

if ( empty($_POST['title']) ) {
        die('Parámetros no válidos');
}

// Conexión a la base de datos test
mysql_connect('localhost', 'root', '1234');
mysql_select_db('test');

// Escapar los valores
$title = mysql_real_escape_string($_POST['title']);

// Hacer la conversión si se envía el parámetro charset
if ( !empty($_POST['charset']) ) {
        // Verificar si la extensión mb_string está habilitada
        if ( function_exists('mb_convert_string') ) {
                $title = @mb_convert_encoding($title, 'UTF-8', $_POST['charset']);
        }
        // Verificar si la extensión iconv está habilitada
        elseif ( function_exists('iconv') ) {
                $title = @iconv($_POST['charset'], 'UTF-8', $title);
        }       
}

$sql = "SELECT * FROM wp_posts WHERE post_title = '$title'";

if ( $result = mysql_query($sql) ) {
        while ($row = mysql_fetch_assoc($result)) {
                print_r($row);
        }
       
        mysql_free_result($result);
}

/*
        Muestra el error intencionalmente
*/

if ( $error = mysql_error() ) {
        echo "MySQL: $error\nConsulta: $sql";
}

mysql_close();
?>

¿Dónde se encuentra el error? y ¿cómo explotarlo? (Si desean puedo colgar una página para que hagan las pruebas)

Categories
JavaScript Quiz Seguridad Web WordPress XSS

Filtro de datos – Solución

El código mostrado en el último quiz, en realidad es una función de WordPress que era vulnerable a XSS. Pongo la solución en una nueva entrada porque intentaré describir algunos de los errores que cometí al intentar explotar el bug mencionado en una entrada anterior.

Categories
Quiz Seguridad Web XSS

Filtro de datos

Volviendo a los quiz:

php:

<?php

function clean_url( $url ) {
        if ('' == $url) return $url;
        $url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%]|i', '', $url);
        $strip = array('%0d', '%0a');
        $url = str_replace($strip, '', $url);
        $url = str_replace(';//', '://', $url);
        $url = (!strstr($url, '://')) ? 'http://'.$url : $url;
        $url = preg_replace('/&([^#])(?![a-z]{2,8};)/', '&1', $url);
        return $url;
}

$u = clean_url($_GET['u']);
echo '<a href="' . $u . '">' . $u . '</a>';

?>

¿Qué valor o valores debe tener la variable u para que el código mostrado sea vulnerable a XSS?