SQL Injection

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 12

SQL Injection

Plantilla : welcome.php

<?php
session_start();

// Verificar si el usuario está autenticado


if (!isset($_SESSION['username'])) {
// Si no hay una sesión activa, redirigir al usuario al formulario de inicio de sesión
header("Location: index.php");
exit(); // Asegurar que el script se detenga después de redirigir
}

if (isset($_GET['logout'])) {
// Eliminar todas las variables de sesión
session_unset();
// Destruir la sesión
session_destroy();
// Redirigir al usuario a la página de inicio de sesión
header("Location: index.php");
exit(); // Asegurar que el script se detenga después de redirigir
}

?>

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bienvenido</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f0f0f0;
text-align: center;
margin-top: 100px;
}
.welcome-box {
width: 300px;
margin: 0 auto;
background-color: #fff;
padding: 20px;
border-radius: 10px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
.welcome-box h2 {
margin-bottom: 20px;
}
.welcome-box a {
display: block;
margin-bottom: 10px;
padding: 10px;
background-color: #4CAF50;
color: white;
text-decoration: none;
border-radius: 5px;
}
</style>
</head>
<body>
<div class="welcome-box">
<h2>Bienvenido, <?php echo $_SESSION['username']; ?></h2>
<a href="registro_equipo.php">Registrar Equipos</a>
<a href="listar_equipos.php">Listar Equipos</a>
<a href="consultar_equipo.php">Consultar Equipos</a>
<p><a href="welcome.php?logout=true">Cerrar sesión</a></p>
</div>
</body>
</html>

Plantilla: index.php

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Iniciar Sesión</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f0f0f0;
text-align: center;
margin-top: 100px;
}
.login-box {
width: 300px;
margin: 0 auto;
background-color: #fff;
padding: 20px;
border-radius: 10px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
.login-box h2 {
margin-bottom: 20px;
}
.login-box input[type="text"],
.login-box input[type="password"] {
width: calc(100% - 20px);
padding: 10px;
margin-bottom: 15px;
border: 1px solid #ccc;
border-radius: 5px;
}
.login-box input[type="submit"] {
background-color: #4CAF50;
color: white;
border: none;
padding: 10px 20px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
border-radius: 5px;
cursor: pointer;
}
.error-message {
color: red;
font-weight: bold;
}
</style>
</head>
<body>
<div class="login-box">
<h2>Iniciar Sesión</h2>
<?php
// Mostrar mensaje de error si existe
if (isset($_GET['error']) && $_GET['error'] == 'true') {
echo '<p class="error-message">Usuario o contraseña incorrectos. Inténtelo de nuevo.</p>';
}
?>
<form action="login.php" method="POST">
<label for="username">Usuario:</label><br>
<input type="text" id="username" name="username" required><br><br>

<label for="password">Contraseña:</label><br>
<input type="password" id="password" name="password" required><br><br>

<input type="submit" value="Iniciar Sesión">


</form>
</div>
</body>
</html>

Plantilla: registro-equipo.php

<?php
session_start();

// Verificar si el usuario está autenticado


if (!isset($_SESSION['username'])) {
// Si no hay una sesión activa, redirigir al usuario al formulario de inicio de sesión
header("Location: index.php");
exit(); // Asegurar que el script se detenga después de redirigir
}

// Incluir la conexión a la base de datos


$servername = "localhost";
$username = "root";
$password = "";
$dbname = "santiago";
// Mensaje de error inicial vacío
$error_message = "";

// Procesar el formulario cuando se envíe


if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Obtener el código del equipo ingresado por el usuario
$codigo_equipo = $_POST['codigo_equipo'];

// Validar que el código del equipo no esté vacío


if (empty($codigo_equipo)) {
$error_message = "Por favor, ingrese un código de equipo.";
} else {
// Establecer la conexión con la base de datos
$conn = new mysqli($servername, $username, $password, $dbname);

// Verificar la conexión
if ($conn->connect_error) {
die("Conexión fallida: " . $conn->connect_error);
}

// Consulta SQL para obtener la información del equipo por su código


$sql = "SELECT * FROM equipos_futbol WHERE codigo = '$codigo_equipo'";
$result = $conn->query($sql);

// Verificar si se encontró algún resultado


if ($result->num_rows > 0) {
// Mostrar los datos del equipo encontrado
$row = $result->fetch_assoc();
$nombre_equipo = $row['nombre_equipo'];
$pais = $row['pais'];
// Puedes añadir más campos aquí según tu estructura de datos
} else {
$error_message = "No se encontró ningún equipo con el código proporcionado.";
}

// Cerrar la conexión
$conn->close();
}
}
?>

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Consultar Equipo</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f0f0f0;
text-align: center;
margin-top: 50px;
}
.consulta-box {
width: 400px;
margin: 0 auto;
background-color: #fff;
padding: 20px;
border-radius: 10px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
.consulta-box h2 {
margin-bottom: 20px;
}
.error-message {
color: red;
font-weight: bold;
margin-bottom: 10px;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 15px;
}
table, th, td {
border: 1px solid #ccc;
padding: 10px;
}
</style>
</head>
<body>
<div class="consulta-box">
<h2>Consultar Equipo por Código</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
<label for="codigo_equipo">Código de Equipo:</label><br>
<input type="text" id="codigo_equipo" name="codigo_equipo" required><br><br>
<input type="submit" value="Consultar">
</form>

<?php
// Mostrar mensaje de error si existe
if (!empty($error_message)) {
echo '<p class="error-message">' . $error_message . '</p>';
}

// Mostrar los datos del equipo si se encontró uno


if (isset($nombre_equipo)) {
echo '<h3>Datos del Equipo</h3>';
echo '<table>';
echo '<tr><th>Código</th><th>Nombre del Equipo</th><th>País</th></tr>';
echo '<tr>';
echo '<td>' . $codigo_equipo . '</td>';
echo '<td>' . $nombre_equipo . '</td>';
echo '<td>' . $pais . '</td>';
echo '</tr>';
echo '</table>';
}
?>
</div>
</body>
</html>

Plantilla: login.php

<?php
session_start();

if (isset($_GET['logout'])) {
session_unset(); // Eliminar todas las variables de sesión
session_destroy(); // Destruir la sesión
header("Location: index.php"); // Redirigir al formulario de inicio de sesión
exit();
}
// Establecer la conexión con la base de datos
$servername = "localhost"; // Cambiar si es necesario
$username = "root"; // Cambiar por el nombre de usuario de la base de datos (en este caso, root)
$password = ""; // Contraseña vacía para la base de datos en local
$dbname = "santiago"; // Cambiar por el nombre de tu base de datos

// Crear la conexión
$conn = new mysqli($servername, $username, $password, $dbname);

// Verificar la conexión
if ($conn->connect_error) {
die("Conexión fallida: " . $conn->connect_error);
}

// Obtener los datos del formulario


$username = $_POST['username'];
$password = $_POST['password'];

// Consulta SQL para verificar las credenciales


$sql = "SELECT * FROM user WHERE usuario = '$username' AND password = '$password'";
$result = $conn->query($sql);

// Verificar si el usuario y contraseña son correctos


if ($result->num_rows > 0) {
// Inicio de sesión exitoso, guardar el nombre de usuario en la sesión
$_SESSION['username'] = $username;
// Redireccionar a la página de bienvenida
header("Location: welcome.php");
} else {
// Inicio de sesión fallido, redirigir de vuelta al formulario con mensaje de error
header("Location: index.php?error=true");
}

// Cerrar la conexión
$conn->close();
?>

Plantilla: listar-equipos.php
<?php
session_start();

// Verificar si el usuario está autenticado


if (!isset($_SESSION['username'])) {
// Si no hay una sesión activa, redirigir al usuario al formulario de inicio de sesión
header("Location: index.php");
exit(); // Asegurar que el script se detenga después de redirigir
}

// Establecer la conexión con la base de datos


$servername = "localhost";
$username = "root";
$password = "";
$dbname = "santiago";

// Crear la conexión
$conn = new mysqli($servername, $username, $password, $dbname);

// Verificar la conexión
if ($conn->connect_error) {
die("Conexión fallida: " . $conn->connect_error);
}

// Consulta SQL para obtener los equipos registrados


$sql = "SELECT codigo,nombre_equipo,pais FROM equipos_futbol";
$result = $conn->query($sql);

?>

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Listado de Equipos</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f0f0f0;
text-align: center;
margin-top: 50px;
}
.equipos-list {
width: 600px;
margin: 0 auto;
background-color: #fff;
padding: 20px;
border-radius: 10px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
.equipos-list h2 {
margin-bottom: 20px;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 15px;
}
table, th, td {
border: 1px solid #ccc;
padding: 10px;
}
</style>
</head>
<body>
<div class="equipos-list">
<h2>Listado de Equipos Registrados</h2>
<table>
<tr>
<th>ID</th>
<th>Nombre del Equipo</th>
<th>País</th>
<!-- Agrega más columnas según tu estructura de datos -->
</tr>
<?php
// Iterar sobre los resultados de la consulta
while ($row = $result->fetch_assoc()) {
echo "<tr>";
echo "<td>" . $row['codigo'] . "</td>";
echo "<td>" . $row['nombre_equipo'] . "</td>";
echo "<td>" . $row['pais'] . "</td>";
// Agrega más celdas según tu estructura de datos
echo "</tr>";
}
?>
</table>
</div>
</body>
</html>

<?php
// Cerrar la conexión
$conn->close();
?>

Plantilla: consultar-equipo.php

<?php
session_start();

// Verificar si el usuario está autenticado


if (!isset($_SESSION['username'])) {
// Si no hay una sesión activa, redirigir al usuario al formulario de inicio de sesión
header("Location: index.php");
exit(); // Asegurar que el script se detenga después de redirigir
}

// Incluir la conexión a la base de datos


$servername = "localhost";
$username = "root";
$password = "";
$dbname = "santiago";

// Mensaje de error inicial vacío


$error_message = "";
// Procesar el formulario cuando se envíe
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Obtener el código del equipo ingresado por el usuario
$codigo_equipo = $_POST['codigo_equipo'];

// Validar que el código del equipo no esté vacío


if (empty($codigo_equipo)) {
$error_message = "Por favor, ingrese un código de equipo.";
} else {
// Establecer la conexión con la base de datos
$conn = new mysqli($servername, $username, $password, $dbname);

// Verificar la conexión
if ($conn->connect_error) {
die("Conexión fallida: " . $conn->connect_error);
}

// Consulta SQL para obtener la información del equipo por su código


$sql = "SELECT * FROM equipos_futbol WHERE codigo = '$codigo_equipo'";
$result = $conn->query($sql);

// Verificar si se encontró algún resultado


if ($result->num_rows > 0) {
// Mostrar los datos del equipo encontrado
$row = $result->fetch_assoc();
$nombre_equipo = $row['nombre_equipo'];
$pais = $row['pais'];
// Puedes añadir más campos aquí según tu estructura de datos
} else {
$error_message = "No se encontró ningún equipo con el código proporcionado.";
}

// Cerrar la conexión
$conn->close();
}
}
?>

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Consultar Equipo</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f0f0f0;
text-align: center;
margin-top: 50px;
}
.consulta-box {
width: 400px;
margin: 0 auto;
background-color: #fff;
padding: 20px;
border-radius: 10px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
.consulta-box h2 {
margin-bottom: 20px;
}
.error-message {
color: red;
font-weight: bold;
margin-bottom: 10px;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 15px;
}
table, th, td {
border: 1px solid #ccc;
padding: 10px;
}
</style>
</head>
<body>
<div class="consulta-box">
<h2>Consultar Equipo por Código</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
<label for="codigo_equipo">Código de Equipo:</label><br>
<input type="text" id="codigo_equipo" name="codigo_equipo" required><br><br>
<input type="submit" value="Consultar">
</form>

<?php
// Mostrar mensaje de error si existe
if (!empty($error_message)) {
echo '<p class="error-message">' . $error_message . '</p>';
}

// Mostrar los datos del equipo si se encontró uno


if (isset($nombre_equipo)) {
echo '<h3>Datos del Equipo</h3>';
echo '<table>';
echo '<tr><th>Código</th><th>Nombre del Equipo</th><th>País</th></tr>';
echo '<tr>';
echo '<td>' . $codigo_equipo . '</td>';
echo '<td>' . $nombre_equipo . '</td>';
echo '<td>' . $pais . '</td>';
echo '</tr>';
echo '</table>';
}
?>
</div>
</body>
</html>
Después de realizar todo hacer el siguiente paso:

2.- La sección de registro de equipos debe ser vulnerable a Stored, Persistant


Cross-Site Scripting. El código malicioso debe genera una petición http en la que
se incluya su nombre a través de un parámetro a un servidor web diferente al de
la aplicación. Cada vez que cargue la sección con el código malicioso, se debe
observar en el registro del servidor web esta actividad (2 puntos).

3.- En la sección consultar datos del equipo determine que es vulnerable a SQL
Injection mediante el uso del operador AND. (1 punto)

4.- Las secciones de login debe ser vulnerable a SQL Injection. La secuencia de
explotación. Debe explicar la secuencia de explotación. (1 punto)

5.- Mediante SQL Injection determine la cantidad de columnas utilizadas en el


query de la aplicación relacionado a la funcionalidad de login, no utilizar ORDER
BY. (1 punto)

6.- Mediante SQL Injection determine la cantidad de columnas utilizadas en el


query de la aplicación relacionada a la sección consultar datos del equipo, no
utilizar ORDER BY. (1 punto)

7.- La sección de consulta de equipos debe ser vulnerable a SQL Injection y debe
permitir el nombre de la base de datos actual utilizada por la aplicación. Debe
explicar la secuencia de explotación. (1 punto).

8.- La sección de consulta de equipos debe ser vulnerable a SQL Injection y debe
permitir el nombre del usuario utilizadao por la conexión a la base de datos
utilizada por la aplicación. Debe explicar la secuencia de explotación. (1 punto).

9.- La sección de consulta de equipos debe ser vulnerable a SQL Injection y debe
permitir extraer todos los nombres de todaslas bases de datos de su instancia
MySQL o MariaDB (depende de la base de datos que haya elegido para su
implementación). Debe explicar la secuencia de explotación. (1 punto).

10.- La sección de consulta de equipos debe ser vulnerable a SQL Injection y debe
permitir extraer todos los nombres de todas las tablas de todas las bases de datos
de su MySQL o MariaDB (depende de la base de datos que haya elegido para su
implementación). Debe explicar la secuencia de explotación. (1 punto)

11.- Determine la cantidad de columnas del query SQL relacionado al login en la


aplicación DVWA, nivel low. (1 punto)

11.- Implemente un mecanismo de bloqueo de autenticación de una cuenta de


usuario luego de 3 intentos consecutivos (2 puntos)

También podría gustarte