second_order_sqli
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| second_order_sqli [2026/06/17 15:47] – minor bold mbunic | second_order_sqli [2026/06/18 17:52] (current) – mbunic | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====Second order SQL injection==== | ====Second order SQL injection==== | ||
| - | **Second order SQL injection** je podskup **SQL injection** ranjivosti, koji je kompliciraniji za izvršiti, ali je i razvojnim programerima | + | **Second order SQL injection** je podskup **SQL injection** ranjivosti. Iskorištavanje ove ranjivosti |
| - | Jednostavan primjer bi bio aplikacija, gdje je forma za registraciju korisnika zaštićena od SQL injectiona | + | Uobičajeni SQL injection se pojavljuje kada se korisnički unos direktno koristi za konstrukciju SQL upita, dok se second order SQL injection izvršava tako da se neki korisnički |
| - | Primjer nezaštićenog koda za izmjenu lozinke | + | Jednostavan primjer bila bi aplikacija u kojoj se unos iz forme za registraciju korisnika koristi u SQL upitu za dodavanje korisnika u bazu na siguran način, ali se taj unos pri kasnijem korištenju ne koristi ispravno. |
| + | |||
| + | Aplikacija pri registraciji ispravno interpretira unos korisničkog imena kao string, te konstrukcija SQL upita za stvaranje korisnika nije ranjiva na SQL injection. | ||
| + | |||
| + | Pri registraciji napadač kao korisničko ime unosi vrijednost: | ||
| + | |||
| + | < | ||
| + | |||
| + | čime se samo u bazi stvara novi korisnik s tim korisničkim imenom. | ||
| + | |||
| + | Ako postoji funkcionalnost za promjenu lozinke, gdje se koristi SQL upit u koji se ubacuje korisničko ime korisnika kojemu se mijenja lozinka, bez adekvatnih zaštita, može doći do SQL injectiona. | ||
| + | |||
| + | Primjer ranjivog | ||
| < | < | ||
| - | "UPDATE users SET password=" | + | UPDATE users SET password = '" + novi_password + "' |
| </ | </ | ||
| - | (pretpostavka je da je korisnikov | + | (pretpostavka je da je unos lozinke |
| - | Pri pokretanju ovog koda za prethodno registriranog korisnika | + | Kada bi napadač |
| - | < | ||
| - | No, uzimajući u obzir da je </code>—</ | + | < |
| + | UPDATE users SET password = ' | ||
| + | </ | ||
| - | < | + | Dvije crtice koje se pojavljuju u upitu su oznaka za početak komentara u mnogim relacijskim bazama podataka. |
| + | |||
| + | < | ||
| + | |||
| + | Radi toga se dio upita nakon pojave te oznake više ne tretira kao SQL kod, pa je zato prethodni upit ekvivalentan sljedećem: | ||
| + | |||
| + | < | ||
| + | |||
| + | Ovaj upit bi promijenio | ||
| + | |||
| + | |||
| + | < | ||
| __**Primjer**__ - **Zadatak s Hacknite platforme** - **e-Trgovina Union** | __**Primjer**__ - **Zadatak s Hacknite platforme** - **e-Trgovina Union** | ||
| Line 53: | Line 77: | ||
| Kao prvi pokušaj iskorištavanja ranjivosti možemo probati napraviti korisnički račun kojemu će korisničko ime biti | Kao prvi pokušaj iskorištavanja ranjivosti možemo probati napraviti korisnički račun kojemu će korisničko ime biti | ||
| - | < | + | < |
| Nakon stvaranja korisničkog računa s ovim korisničkim imenom, vidimo da se sada unutar tablice povijesti proizvoda nalaze proizvodi svih ostalih korisnika u sustavu, kao što je prikazano na slici ispod. | Nakon stvaranja korisničkog računa s ovim korisničkim imenom, vidimo da se sada unutar tablice povijesti proizvoda nalaze proizvodi svih ostalih korisnika u sustavu, kao što je prikazano na slici ispod. | ||
| Line 65: | Line 89: | ||
| Sada možemo pokušati izvršiti SQL injection, gdje će korisničko ime biti: | Sada možemo pokušati izvršiti SQL injection, gdje će korisničko ime biti: | ||
| - | < | + | < |
| Kako bismo dohvatili imena i lozinka korisnika iz baze. Izvršavanjem ove SQL injekcije, dobivamo error koji je prikazan na slici ispod. | Kako bismo dohvatili imena i lozinka korisnika iz baze. Izvršavanjem ove SQL injekcije, dobivamo error koji je prikazan na slici ispod. | ||
| Line 75: | Line 99: | ||
| Iz koda znamo da izraz odgovara sljedećem: | Iz koda znamo da izraz odgovara sljedećem: | ||
| + | < | ||
| SELECT * FROM povijest WHERE korisnik= ' | SELECT * FROM povijest WHERE korisnik= ' | ||
| + | </ | ||
| + | |||
| + | |||
| + | Iako se u tablici za prikaz proizvoda na početnoj stranici nalaze samo dva stupca, SQL izraz kojeg mi manipuliramo, | ||
| + | |||
| + | < | ||
| + | SELECT * FROM povijest | ||
| + | </ | ||
| - | Iako se u tablici za prikaz proizvoda na početnoj stranici nalaze samo dva stupca, SQL izraz kojeg mi manipuliramo, | + | jedino znamo da se dohvaćaju svi stupci iz tablice povijest, ali ne znamo točno koliko |
| - | U sljedećem pokušaju možemo probati izvršiti SQL injection, | + | U sljedećem pokušaju možemo probati izvršiti SQL injection, |
| - | < | + | < |
| {{second_order_6.png}} | {{second_order_6.png}} | ||
| Line 91: | Line 124: | ||
| {{second_order_7.png}} | {{second_order_7.png}} | ||
| - | Sada smo uspješno izvršili SQL injection pomoću kojega smo dohvatili i prikazali korisnička imena i hasheve | + | Sada smo uspješno izvršili SQL injection pomoću kojega smo dohvatili i prikazali korisnička imena i hasheve |
| - | Kako bi dobili njegovu lozinku, odnosno „revers“ hasha njegove lozinke, možemo iskoristiti crackstation.net, | + | Kako bi dobili njegovu lozinku, odnosno „revers“ hasha njegove lozinke, možemo iskoristiti crackstation.net, |
| {{second_order_8.png}} | {{second_order_8.png}} | ||
second_order_sqli.1781711221.txt.gz · Last modified: 2026/06/17 15:47 by mbunic