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 [2023/12/04 15:12] – lss | 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 |
| - | 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** | ||
| - | **TODO: ubaci opis zadatka ovdje** | + | < |
| + | Lokalna trgovina je odlučila napraviti svoju web stranicu na kojoj kupci mogu pratiti svoju povijest kupovine. Korisnici se mogu sami registrirati na tu stranicu, i pri svakoj fizičkoj kupnji u trgovini mogu dati svoje korisničko ime kako bi se njihova povijest kupovine unijela u bazu podatka. Stranica bi mogla biti korisna svim sadašnjim i budućim kupcima trgovine! | ||
| + | |||
| + | Flag je u formatu CTF2021[brojevi] | ||
| + | |||
| + | http:// | ||
| + | </ | ||
| Pri rješavanju zadatka, prvo što nam se nudi je forma za registraciju. | Pri rješavanju zadatka, prvo što nam se nudi je forma za registraciju. | ||
| Line 47: | 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 | + | Nakon stvaranja korisničkog računa |
| {{second_order_4.png}} | {{second_order_4.png}} | ||
| - | Ovo znači da smo uspjeli izvršiti SQL injekciju nad sustavom i da sada znamo iskoristiti ranjivost. Sada još samo moramo pronaći način kako napraviti SQL injekciju | + | Ovo znači da smo uspjeli izvršiti SQL injekciju nad sustavom i da sada znamo iskoristiti ranjivost. Sada još samo moramo pronaći način kako napraviti SQL injekciju |
| - | Iz koda znamo da u bazi postoji tablica // | + | Iz koda znamo da u bazi postoji tablica // |
| 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 69: | 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 85: | 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.1701702746.txt.gz · Last modified: 2025/12/01 11:40 (external edit)