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).

Važno: SQL injection se smije vježbati ISKLJUČIVO u namjenski ranjivim okruženjima (DVWA, HackTheBox, TryHackMe). Nikad na produkcijskim sustavima bez eksplicitnog pisanog odobrenja!

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

  1. Otkrivanje verzije baze: 1' UNION SELECT @@version, NULL##
  2. Popis svih baza podataka: 1' UNION SELECT table_schema, table_name FROM information_schema.tables##
  3. Popis stupaca tablice users: 1' UNION SELECT column_name, NULL FROM information_schema.columns WHERE table_name='users'##
  4. Č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 tablica
  • information_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

0 / 12
Odgovori na pitanja da vidiš rezultat.

1. Što znači skraćenica DVWA?

DVWA (Damn Vulnerable Web Application) je namjerno ranjiva web aplikacija dizajnirana za sigurnosno obrazovanje. Hostirano na LAMP stacku, pruža ranjivosti poput SQLi, XSS, CSRF, command injection za vježbanje u sigurnom okruženju.

2. Koji unos u polje User ID uzrokuje SQL grešku koja otkriva tip baze?

Jednostruki navodnik ' 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?

DVWA u labu koristi MariaDB — open-source fork MySQL-a koji je nastao nakon što je Oracle preuzeo MySQL. MariaDB je kompatibilan s MySQL sintaksom. Ovo se otkrilo kroz error-based SQLi grešku pri unosu jednostrukog navodnika.

4. Zašto payload 1' or '1'='1 vraća sve zapise iz tablice?

SQL WHERE id='1' OR '1'='1' — za svaki redak, provjeri: id='1' (može biti false) OR '1'='1' (uvijek true). Budući da je OR zadovoljen ako je JEDAN uvjet true, svi reci zadovoljavaju uvjet i svi se vraćaju.

5. Zašto se koristi ORDER BY 1##, ORDER BY 2##, itd. u SQLi?

UNION SELECT zahtijeva isti broj stupaca kao originalni SELECT. ORDER BY testira broj stupaca — ako ORDER BY 3 daje grešku a ORDER BY 2 uspijeva, znamo da SELECT vraća 2 stupca. ## komentira ostatak upita (MySQL style; -- ili /* */ su alternative).

6. Koja MySQL varijabla/funkcija daje trenutnu verziju baze podataka?

@@version je MySQL/MariaDB sistemska varijabla koja sadrži verziju servera. Koristi se u SQLi: 1' UNION SELECT @@version, NULL## Daje string poput "10.4.21-MariaDB" — otkriva točnu verziju za targeting poznatih ranjivosti.

7. Koja SQL tablica sadrži metapodatke o svim bazama, tablicama i stupcima u MySQL/MariaDB?

information_schema je posebna read-only baza dostupna svim MySQL/MariaDB korisnicima. Sadrži: .tables (popis tablica), .columns (stupci), .schemata (baze). UNION SELECT table_schema, table_name FROM information_schema.tables## otkriva sve baze i tablice.

8. Koje tablice se nalaze u DVWA dvwa bazi podataka?

DVWA baza ima dvije tablice: guestbook (za XSS vježbe) i users (za SQLi vježbe). users tablica sadrži: user_id, first_name, last_name, user, password, avatar, last_login, failed_login. Lozinke su MD5 hashirane.

9. Gdje se nalaze Apache access logovi na Linux sustavu?

/var/log/apache2/access.log je standardna lokacija za Apache access logove na Debian/Ubuntu. Na Red Hat/CentOS: /var/log/httpd/access_log. Logovi bilježe sve HTTP zahtjeve uključujući SQLi payload u URL-u.

10. Što znači %27 u Apache access logu?

URL encoding pretvara specijalne znakove u %XX format gdje XX je heksadecimalni ASCII kod. Jednostruki navodnik (') ima ASCII 0x27 = 39 decimalno. %27 u URL-u logova = napadač je unio navodnik = potencijalni SQLi napad. IDS/SIEM alati prate ovakve obrasce.

11. Koji format koriste Apache access logovi za evidentiranje zahtjeva?

Apache koristi Combined Log Format (nadogradnja na Common Log Format): IP identd user [datetime] "method URL protocol" status bytes "referer" "user-agent". Referer i user-agent su dodaci (Combined). Ovaj format podržavaju gotovo svi SIEM alati.

12. Koja je jedina prava zaštita od SQL injectiona prema DVWA "Impossible" razini?

Jedina pouzdana obrana od SQLi su parametrizirani upiti (Prepared Statements / Bind Parameters): SELECT * FROM users WHERE id = ? — korisnikov unos se šalje odvojeno od SQL koda i tretira se kao podatak, ne kod. Input validacija, escaping i WAF su dopunske mjere ali ne same po sebi dovoljne.
0 / 12
Riješi kviz da vidiš rezultat.