Post

Oculto tras las Sombras de mis Redirectores

Hola nerds! Una vez más leerán mi intento de blog, pero bueno, espero que les sirva el uso de redirectores en sus ejercicios de phishing, C2, etc. Siempre con fines éticos y de aprendizaje ese es el motivo de compartir mi conocimiento (sí, lo típico para que no me jodan luego). Feliz hacking chavales!

Introducción

En las operaciones de Red Team y en las emulaciones/simulaciones de adversario, es importante mantener vivo nuestra infraestructura, ya sea de C2, phishing, etc. Debemos asumir que, tarde o temprano, seremos descubiertos (o tal vez no, en ciertos casos), pero nuestro objetivo principal es pasar desapercibidos el mayor tiempo posible. Es aquí donde entran los principios de OPSEC aplicados a nuestra infraestructura, siendo la implementación de redirectores una de las tácticas. En esta entrada, les enseñaré el uso de Apache mod_rewrite.

mod_rewrite nos permite crear reglas inteligentes para decidir qué tráfico llega a nuestro servidor, qué tráfico es redirigido a un sitio legítimo y qué tráfico es simplemente descartado. En otras palabras, mod_rewrite actúa como un proxy.

Un Poco Más de mod_rewrite!

mod_rewrite es un módulo de Apache HTTP Server que proporciona un motor de reescritura de URLs basado en reglas. Utiliza regex para evaluar URLs entrantes y transformarlas, redirigirlas o bloquearlas según condiciones definidas.

Bueno, en este punto más de uno recordará el rendimiento de Nginx sobre Apache y se hará la pregunta “Por qué no usar un proxy inverso convencional como Nginx?” Mi respuesta es la lógica condicional.

Mientras que un proxy inverso convencional como Nginx puede reenviar tráfico, mod_rewrite permite crear lógica condicional compleja que evalúa múltiples variables de cada petición HTTP antes de decidir qué hacer con ella.

Fundamentos de mod_rewrite

Solo tienes que instalar Apache y habilitar los modulos rewrite , proxy y proxy_http.

1
2
sudo apt install apache2
sudo a2enmod rewrite proxy proxy_http

Verifica que mod_rewrite está cargado

1
apache2ctl -M | grep rewrite

Ubicación de Reglas

Las reglas de mod_rewrite dependiendo de dónde se coloquen, su alcance y comportamiento variarán, presento 3 a continuación.

1 - Configuración del VirtualHost

Se puede agregar a los VirtualHost y las reglas se aplicarán a dominios o subdominios específicos.

1
2
3
4
5
6
# File: /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
    ServerName ejemplo.com
    RewriteEngine On
    # Reglas aquí
</VirtualHost>

2 - Archivos .htaccess

Las reglas en .htaccess se aplicaran a directorios y subdirectorios

1
2
3
# /var/www/html/.htaccess
RewriteEngine On
# Reglas aquí

Para que .htaccess funcione, necesitas configurar AllowOverride:

1
2
3
<Directory /var/www/html>
    AllowOverride All
</Directory>

3 - Location

Las reglas tambien se pueden aplicar a directivas especificas como <Location> para que coincidan con rutas URL específicas.

1
2
3
4
<Location "/login">
    RewriteEngine On
    # Rules here #
</Location>

Sintaxis Básica de Reglas

Una regla de mod_rewrite tiene esta estructura fundamental:

1
2
3
RewriteEngine On             # Activa el motor de reescritura
RewriteCond %{VARIABLE} patrón [flags]    # definimos qué requisitos debe cumplir la petición como venir de una IP específica o tener un User-Agent de Windows para que la regla se ejecute
RewriteRule patrón destino [flags]        # Regla de reescritura, define qué patrón buscamos en la URL y a dónde vamos a enviar al usuario o qué archivo le vamos a mostrar

aca un ejemplo:

1
2
3
4
5
6
7
8
9
RewriteEngine on

# Los Filtros o Condiciones
# [TestString] [CondPattern] [Flags]
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* [NC]

# Regla
# [Pattern] [Substitution] [Flags]
RewriteRule ^login$ /sitio_clonado.html [L]

Tranquilo, ahora toca desglosarlo.

Sintaxis de RewriteEngine

1
RewriteEngine on

Sin esta directiva en on, Apache ignorará todas las reglas siguientes.

Sintaxis de RewriteCond

1
2
# RewriteCond [TestString] [CondPattern] [Flags]
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* [NC]

Esta es la condición que se buscará antes de ejecutar la regla.

TestString

En TestString puede ir una variable global del servidor, una variable de entorno o simplemente, cualquier dato relacionado con la solicitud en este caso, HTTP_USER_AGENT.

En Apache, cuando usamos variables globales (como HTTP_USER_AGENT, REMOTE_ADDR o QUERY_STRING), siempre deben ir precedidas por % y encerradas en llaves {}. Esto diferencia una variable del servidor de una cadena de texto cualquiera.

Variables de servidor que más uso

VariableDescripciónEjemplo
%{REQUEST_URI}URI solicitada/updates/check
%{HTTP_USER_AGENT}User-Agent del clienteMozilla/5.0...
%{REMOTE_ADDR}IP del cliente192.168.1.100
%{HTTP_HOST}Encabezado Hostejemplo.com
%{QUERY_STRING}Parámetros GETid=123&session=abc
%{HTTP_REFERER}Encabezado Refererhttps://google.com
%{HTTP_COOKIE}Cookies del clientesession=xyz
%{REQUEST_METHOD}Método HTTPGET, POST
%{HTTPS}Si es HTTPSon / off
%{HTTP:X-Custom-Header}Cualquier encabezadoValor personalizado
%{TIME_HOUR}Hora actual del servidor14

ref: mas variables

CondPattern

Ahora, en CondPattern va una regex que define la condición. Si la TestString coincide con este patrón, la RewriteRule se aplicará. En este caso, usamos ^Mozilla.* para filtrar por este User-Agent específico.

Flags

Los flags son parámetros opcionales que se añaden al final de una directiva para alterar o controlar cómo se procesa una condición o una regla. Sin ellos, el motor de reescritura es muy rígido, pero con ellos ganamos más flexibilidad.

Por ejemplo, el flag [NC] (No Case) le indica a Apache que realice la comparación sin distinguir entre mayúsculas y minúsculas para detectar User-Agents que varían ligeramente.

Podemos encadenar múltiples condiciones para crear filtros robustos. Por defecto, cuando colocas varias directivas RewriteCond una tras otra, Apache las procesa usando un operador lógico AND. Esto significa que todas las condiciones deben cumplirse para que la RewriteRule final se ejecute.

Flags principales:

FlagDescripción
[R=301]Redirección permanente
[R=302]Redirección temporal
[P]Proxy (reenvío transparente al backend)
[L]Last — deja de procesar reglas
[NC]No Case — sin distinción mayúsculas/minúsculas
[OR]OR lógico entre condiciones
[F]Forbidden — devuelve 403
[QSA]Query String Append — conserva parámetros
[CO]Cookie — establece una cookie
[E]Environment — establece variable de entorno
[NE]No Escape — no codifica caracteres especiales

Aca tienes mas flags.

Sintaxis de RewriteRule

1
2
# RewriteRule [Pattern] [Substitution] [Flags]
RewriteRule ^login$ /sitio_clonado.html [L]

Esta es la directiva que define finalmente qué vamos a hacer con la solicitud, la dejamos pasar al C2? , la enviamos a un sitio legítimo o simplemente la bloqueamos?

Pattern

Una va un regex que debe coincidir con la URL solicitada por el cliente.

Substitution

Es la URL de destino o la ruta interna a la que se reescribirá o redirigirá la petición. Aquí podras mandar a la victima a de tu Team Server o tu landing page.

Flags

Son modificadores que controlan el comportamiento de la regla como lo que vimos en RewriteCond

Un error común es pensar que las reglas se aplican de forma aleatoria. En realidad, mod_rewrite funciona de forma secuencial, muy similar a cómo un firewall procesa sus reglas (ACLs).

Las reglas se evalúan de arriba hacia abajo. Si una solicitud coincide con un patrón y tiene la bandera [L], el motor se detiene ahí mismo y ejecuta la acción. Si no tiene el flag [L], el motor continuará evaluando las reglas siguientes, lo que podría arruinar tu OPSEC si una regla posterior sobreescribe la anterior.

Aca tienes mas flags.

Diagrama

[!Tip] Es una buena práctica de OPSEC tener un servidor de salto.

diagrama

Tu no me puedes ver!

This post is licensed under CC BY 4.0 by the author.