DVWA — testno okruženje
DVWA (Damn Vulnerable Web Application) je namjerno ranjiva web aplikacija za vježbanje napada. Hostirano na dvwa.structureality.com na LAMP stacku (Linux, Apache, MySQL/MariaDB, PHP).
Razine sigurnosti DVWA
- Low — bez ikakve zaštite (za vježbanje)
- Medium — neka zaštita (escape funkcije)
- High — jača zaštita
- Impossible — parametrizirani upiti (prava zaštita)
SQL Injection — koncept
SQLi napad ubacuje SQL kod u polje koje se direktno spaja u upit bez sanitizacije. Napadač može:
- Čitati podatke iz baze
- Modificirati ili brisati podatke
- Izvršiti OS naredbe (u nekim konfiguracijama)
Error-based SQL Injection
Napadač uzrokuje SQL grešku koja otkriva informacije o bazi podataka.
Primjer — otkrivanje baze podataka
Unos jednostrukog navodnika u User ID polje:
' Generirani SQL upit postaje nevažeći, a poruka greške otkriva:
- Tip baze: MariaDB (MySQL fork)
- Sintaksu upita koji se izvodi
- Ime tablice ili stupca
Boolean SQL Injection
Uvijek-istinit payload
1' or '1'='1 Modificira WHERE uvjet:
WHERE id='1' OR '1'='1' Budući da je '1'='1' uvijek istinito, vraća sve zapise iz tablice.
ORDER BY — određivanje broja stupaca
1' ORDER BY 1##
1' ORDER BY 2##
1' ORDER BY 3## ## komentira ostatak upita. Ako ORDER BY 3 daje grešku, a ORDER BY 2 uspijeva — upit vraća 2 stupca.
UNION SELECT napadi
UNION SELECT dodaje rezultate drugog SELECT upita, omogućujući čitanje podataka iz bilo koje tablice.
Korak po korak — UNION SELECT
- Otkrivanje verzije baze:
1' UNION SELECT @@version, NULL## - Popis svih baza podataka:
1' UNION SELECT table_schema, table_name FROM information_schema.tables## - Popis stupaca tablice users:
1' UNION SELECT column_name, NULL FROM information_schema.columns WHERE table_name='users'## - Čitanje lozinki:
1' UNION SELECT user, password FROM users##
information_schema
Posebna MySQL/MariaDB baza koja sadrži metapodatke o svim bazama, tablicama i stupcima.
information_schema.tables— popis tablicainformation_schema.columns— popis stupaca- Dostupna svim korisnicima (read-only)
DVWA users tablica
Stupci: user_id, first_name, last_name, user, password, avatar, last_login, failed_login
Tablice u dvwa bazi: guestbook i users
Lozinke su pohranjene kao MD5 hashevi — mogu se crackat.
Apache access logovi
SQL injection napadi ostavljaju trag u web server logovima — ključan izvor za forenzičku analizu.
Apache Combined Log Format
/var/log/apache2/access.log Format zapisa:
[IP] [identd] [user] [datetime] "[method URL protocol]" [status] [bytes] "[referer]" "[user-agent]" URL enkodiranje u logovima: %27 = jednostruki navodnik ('). SQLi napadi lako prepoznatljivi po %27, OR, UNION, SELECT u URL-u.
Kviz — 12 pitanja
1. Što znači skraćenica DVWA?
2. Koji unos u polje User ID uzrokuje SQL grešku koja otkriva tip baze?
' prekida SQL string, čineći upit sintaktički nevažećim. Poruka greške često otkriva tip baze (MySQL, MariaDB, MSSQL), verziju i strukturu upita — kritična informacija za daljnje napade.3. Koji tip baze podataka koristi DVWA na dvwa.structureality.com?
4. Zašto payload 1' or '1'='1 vraća sve zapise iz tablice?
5. Zašto se koristi ORDER BY 1##, ORDER BY 2##, itd. u SQLi?
6. Koja MySQL varijabla/funkcija daje trenutnu verziju baze podataka?
7. Koja SQL tablica sadrži metapodatke o svim bazama, tablicama i stupcima u MySQL/MariaDB?
8. Koje tablice se nalaze u DVWA dvwa bazi podataka?
9. Gdje se nalaze Apache access logovi na Linux sustavu?
10. Što znači %27 u Apache access logu?
11. Koji format koriste Apache access logovi za evidentiranje zahtjeva?
12. Koja je jedina prava zaštita od SQL injectiona prema DVWA "Impossible" razini?