Razno Tehnologija Vodič

Burp Suite – alat za testiranje ranjivosti aplikacija

Burp Suite - alat za testiranje ranjivosti aplikacija logo

Burp Suite je set softverskih alata za testiranje bezbednosti web aplikacija. Već smo ga predstavili u tekstu Popularni alati za testiranje bezbednosti aplikacija, koji možete pronaći na našem blogu. U pitanju je moćan paket alata koji u sebi obuhvata sve potrebne alate koji vam mogu pomoći da detektujete sve ranjivosti u vašoj web aplikaciji i da obavite sva potrebna testiranja.

U ovom tekstu ćemo korak po korak proći kroz ceo proces, od podešavanja okruženja za rad, preko konfigurisanja Burp Proxy-a, pa sve do rada sa glavnim funkcionalnostima kao što su Repeater, Comparer i Intruder. Takođe, prikazaćemo na nekoliko primera kako da uradite testiranje na ranjivost i ujedno dati neke predloge iz najbolje prakse, kako da zaštitite svoje web aplikacije od tih ranjivosti.

Za potrebe ovog teksta koristili smo Community Edition Burp-a, koji je podrazumevano instaliran u Kali Linux-u. U pitanju je besplatna verzija ovog alata, koja uključuje sve funkcionalnosti neophodne za manuelno testiranje web sajtova i servisa.

Pored ove verzije postoje i komercijalne verzije Burp Suite Professional i Burp Suite Enterprise, koje dolaze sa naprednim funkcionalnostima koje mogu biti pogodnije za neke naprednije testne scenairije. U vreme pisanja ovog teksta Burp Suite Professional košta 449 EUR, dok je za Burp Suite Enterprise potrebno poslati upit kompaniji Portswigger koja je vlasnik softvera.

Hajde sada da se detaljnije upoznamo sa ovim alatom.

Podešavanje Burp Suite-a

Pre nego što počnete, pobrinite se da imate instaliranu poslednju verziju Burp Suite-a i odgovarajuća podešavanja proxy-a. Instalacija poslednje verzije je potrebna kako biste obezbedili da vaša Burp instalacija ima najnovije funkcionalnosti i ispravke.

Ažuriranje Burp Suite-a

Za početak otvorite terminal i kucajte: sudo apt update -y

(kali@ kali)-[~] sudo apt update -y 
[sudo] password for kali: 
Hit:1 http://packages.microsoft.com/repos/code stable InRelease 
Hit:2 http://kali.download/kali kali-rolling InRelease Reading package lists... 
Done Building dependency tree... 
Done Reading state information... 
Done All packages are up to date.

Ovo će pokrenuti ažuriranje liste sistemskog package manager-a. Ova lista koja se preuzima putem komande update sadrži podatke o posednjoj verziji dostupnih softverskih paketa.

Da biste proverili da li Burp Suite treba da bude ažuriran, kucajte: sudo apt upgrade burpsuite.

(kali@ kali)-[/]
sudo apt upgrade burpsuite
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
burpsuite is already the newest version (2023.1.2-0kali1).

Ako je ažuriranje dostupno, ažuriraće se na najnoviju verziju za Kali Linux.

Sada kada smo sve pripremili, vreme je da krenemo sa instalacijom proxy extenzije za browser.

Instalirajte Foxy Proxy ekstenziju

Bez obzira koji browser koristite, naša je preporuka da za ovu priliku koristite Firefox ekstenziju pod nazivom FoxyProxy. Iako postoji i ekstenzija za Chrome, verzija za Firefox je po našem mišljenju bolja i jednostavnija za rad. Ova ekstenzija vam omogućava jednostavno prebacivanje između različitih proxy servera, bez potrebe da ručno unosite podešavanja u browser.

FoxyProxy ima ekstenziju i za Chrome, pa ukoliko želite možete ga koristiti i sa Chrome-om.

Da biste instalirali FoxyProxy u Firefox-u, pratite sledeće korake:

Instalirajte FoxyProxy Standard ekstenziju u vašem browser-u.

Kliknite na FoxyProxy ikonicu i izaberite Options.

Sada kreirajte novu proxy konfiguraciju sa sledećim podešavanjima.

Title: Burp
Proxy Type: HTTP
Proxy IP: 127.0.0.1
Port: 8080

Sačuvajte ovu proxy konfiguraciju i podesite je da bude aktivna u toolbar-u, kada god koristite Burp Suite.

Burp Suite možete da pokrenete na nekoliko različitih načina. Jedan od načina je da otvorite terminal i kucate burpsuite.

Drugi način je da otvorite Burp Suite iz menija aplikacije pod opcijom Web Application Analysis. Kliknite na burpsuite da biste pokrenuli aplikaciju.

Pojaviće vam se pop-up prozor sa greškom vezano za verziju JRE-a. Ignorišite ovu grešku i kliknite na OK.

Sada će vam se otvoriti prozor sa pitanjem da li želite da kreirate ili otvorite projekat. Za potrebe ovog teksta, koristićemo podrazumevana podešavanja.

Kliknite na Next.

Konačno, u poslednjem prozoru ostavite podrazumevana podešavanja i kliknite na Start Burp.

Dodavanje SSL sertifikata u browser

Da bismo presreli i analizirali enkriptovanu komunikaciju između klijenta i servera, potrebno je da u naš browser dodamo SSL sertifikat.

Ovo funkcioniše tako da se Burp Suite ponaša kao man-in-the-middle, tako što presreće i dekriptuje komunikaciju korišćenjem generisanog sertifikata. Ipak, da bi ovo bilo moguće, klijent mora da veruje generisanom sertifikatu. Uvozom Burp-ovom CA sertifikata u klijentov trust store, klijent će autorizovati presretanje i dekriptovanje koje radi Burp Suite.

Ukoliko pokušate da posetite https://google.com sa uključenim presretanjem, dobićete sledeću poruku:

Da biste poravili ovu grešku, pratite sledeće korake da instalirate CA sertifikat.

  1. pokrenite Burp Suite i idite do Proxy tab-a
  2. sada kliknite na Intercept tab unutar Proxy tab-a i uključite dugme Intercept
  3. idite na http://burpsuite u browser-u i kliknite na CA Certificate da ga preuzmete. Ovaj fajl se zove cacert.der

Sada kucajte about:preferences u Firefox search bar i pritisnite enter. Ovo će vas odvesti na stranicu za Firefox podešavanja. Potražite opciju Certificates i kliknite na dugme View Certificates.

Dugme View Certificates vam omogućava da vidite sve svoje trusted CA sertifikate. Možete da registrujete novi sertifikat za Portswigger pritiskom na Import i odabirom fajla koje ste malopre preuzeli.

U meniju koji će vam iskočiti izaberite Trust this CA to identify websites, a zatim kliknite OK.

Svaki enkriptovani saobraćaj bi sada trebalo da ide kroz Burp Suite, omogućavajući vam da presretnete zahteve. Sada kada ste sve podesili, hajde da vidimo šta sve možete da radite pomoću ovog alata.

Burp Proxy

Da biste počeli da koristite Burp Suite, potrebno je da uključite njegov proxy i počnete sa presretanjem saobraćaja.

Kako radi Proxy

Uprošćeno rečeno, proxy je server između klijenta, kao što je recimo browser, i servera, kao što je recimo web aplikacija.

Proxy je kao neka vrsta prevodioca između dve osobe koje pričaju različitim jezicima. Prevodilac (u našem slučaju proxy) sluša jednu osobu (u našem slučaju klijent), prevodi njene poruke, i prosleđuje ih drugoj osobi (ciljanom serveru). Zatim prevodilac sluša odgovor, prevodi ga i prosleđuje ga prvoj osobi.

Prateći ovu analogiju, prevodilac može po potrebi da izmeni poruku ili odgovor, baš kao što proxy može da menja mrežni saobraćaj između klijenta i servera.

Kada koristite Burp Suite važno je da razumete kako da radite sa njegovom proxy funkcionalnostima. Burp Proxy će vam omogućiti da presretnete HTTP zahtev da proveri i modifikuje mrežni saobraćaj između browser-a i neke aplikacije.

U nastavku teksta ćemo koristiti DVWA (Damn Vulnerable Web Application) kao našu ciljanu aplikaciju, da bismo vam pokazali kako da koristite alate u Burp Suite-u. Postoje i mnoge druge aplikacije koje vam mogu pomoći da naučite kako da testirate aplikacie pomoću Burp Suite-a, kao na primer OWASP juice shop ili bWARP.

Podešavanje ciljanog scope-a

Naredni korak je da podesite ciljani scope. Ciljani scope definiše opseg projekta i obezbeđuje da test bude izveden samo na određenim domenima, poddomenima i URL putanjama.

Da biste u Burp Suite-u definisali ciljani scope, pratite sledeće korake.

  1. Idite na tab pod nazivom Target
  2. Izaberite pod-tab pod nazivom Scope settings da biste definisali scope vaše ciljane aplikacije
  3. Unutar sekcije Target scope liknite na dugme Add da biste definisali koji URL-ovi ili domeni će biti uključeni u ciljani scope.

Pojaviće se pop-up prozor Proxy history logging. Kliknite na Yes da biste sprečili Burp Suite da loguje bilo koji zahtev van scope-a.

Podešavanje zahteva za presretanje

Podešavanje presretanja klijentskih zahteva u Burp Suite-u vam omogućava da kontrolišete koji se zahtev presreće i vidi dok radite.

To će vam omogućiti da nastavite surfovanje internetom i posećujete druge sajtove, jer će Burp Suite presretati samo saobraćaj koji ste definisali unutar scope-a.

Da biste to podesili, pratite sledeće korake:

  1. idite na tab Proxy u vrhu Burp Suite interfejsa
  2. Izaberite pod-tab Proxy settings da biste pristupili podešavanjima za Burp Proxy
  3. Pod sekcijom Request intercept rules definišite uslove za hvatanje zahteva
  4. Omogućite And/URL/is in target scope i kliknite OK
  5. uradite iste izmene u sekciji Response intercept rules

Kada ste konfigurisali ova podešavanja, sada će Burp Suite presretali samo HTTP i HTTPS zahteve koji su unutar scope-a, omogućavajući vam da budete fokusirani na saobraćaj ciljane aplikacije.

Hajde sada da vidimo kako Burp Proxy radi korišćenjem DVWA. Pokušaćemo da se ulogujemo u aplikaciju, korišćenjem sledećih kredencijala:

username:admin
password:admin

Kada kliknemo na dugme Login, zahtev koji šaljemo ka serveru će biti presretnut od strane Burp Suite-a i onda ćemo imati opciju da editujemo parametre pre slanja serveru za odgovor.

Ovde možemo da prosledimo zahtev onakav kakav jeste, da ga odbacimo ili da izmenimo ono što šaljemo serveru. Tako na primer u header-u možemo promeniti vrednosti za korisničko ime i lozinku.

Hajde da prosledimo zahtev ka serveru da vidimo šta će se desiti.

Nakon što smo prosledili zahtev ka serveru, možemo da vidimo da nismo mogli da se ulogujemo sa kredencijalmo koje smo prosledili. Nešto kasnije ćemo u sekciji o Intruder-u videti kako možemo da pokušamo brute force napad da bismo se ulogovali.

Uvek podesite Burp Proxy prema svojim potrebama i zahtevima projekta. To će vam pomoći da ostanete mnogo efikasniji i organizovaniji tokom rada sa Burp Suite-om.

Zaštita od brute force napada

Brute force napad je tehnika koju napadači koriste da bi dobili pristup korisničkim nalozima putem pokušaja svih mogućih kombinacija lozinki ili korisničkih imena dok ne pronađu ispravnu. Ovi napadi mogu biti automatizovani, omogućavajući napadaču da u kratkom vremenu pokuša veliki broj lozinki. Da biste zaštitili svoj sajt od ovih napada, potrebno je primeniti nekoliko ključnih mera zaštite.

Ograničavanje broja pokušaja logovanja

Jedan od najefikasnijih načina za zaštitu od brute force napada je ograničavanje broja pokušaja logovanja po korisničkom nalogu ili IP adresi. Nakon određenog broja neuspešnih pokušaja logovanja, nalog može biti zaključan na određeni vremenski period ili zahteva dodatne korake za otključavanje, poput slanja emaila korisniku.

  • Rate limiting: Ograničite broj zahteva koje korisnik može poslati za određeni vremenski period (npr. 5 pokušaja u 10 minuta). Ako korisnik premaši ovaj broj, privremeno blokirajte dalji pristup.
  • Zaključavanje naloga: Nakon određenog broja neuspešnih pokušaja, možete privremeno zaključati nalog na 15-30 minuta. Ovo sprečava napadače da brzo ponove napade.

U PHP-u možete koristiti $_SESSION ili bazu podataka za praćenje broja neuspešnih pokušaja logovanja, a zatim zaključati nalog nakon određenog broja neuspešnih pokušaja.

if ($unsuccessful_attempts >= 5) {
$account_locked = true;
// Zaključajte nalog i prikažite poruku korisniku
echo "Vaš nalog je privremeno zaključan zbog previše neuspešnih pokušaja logovanja.";
}

Korišćenje Captcha verifikacije

Captcha je sistem koji pomaže da se razlikuju ljudi od automatskih sistema (botova) tako što traži od korisnika da reši zadatak koji je lak za ljude, ali težak za računare. Dodavanjem Captcha verifikacije na stranici za logovanje, možete sprečiti automatizovane brute force napade.

  • reCAPTCHA: Jedna od najpopularnijih implementacija Captcha sistema je Google reCAPTCHA, koji možete jednostavno integrisati na vašu login stranicu.
  • Opcije za CAPTCHA: CAPTCHA možete dodati na prvi pokušaj logovanja ili samo nakon nekoliko neuspešnih pokušaja, kako ne biste ometali korisnike sa ispravnim podacima.

Integracija reCAPTCHA na login formu može se obaviti uz pomoć Google-ovog API-ja:

<form method="POST" action="login.php">
<input type="text" name="username" required>
<input type="password" name="password" required>
<div class="g-recaptcha" data-sitekey="your-site-key"></div>
<button type="submit">Log In</button>
</form>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>

Dvofaktorska autentifikacija (2FA)

Dvofaktorska autentifikacija (2FA) pruža dodatni sloj sigurnosti jer zahteva od korisnika da unesu drugi oblik autentifikacije, pored lozinke. To može biti jednokratna šifra poslata SMS-om, putem emaila ili generisana pomoću aplikacije kao što je Google Authenticator. Čak i ako napadač uspe da dobije korisničko ime i lozinku, neće moći da se prijavi bez drugog faktora.

  • Softverske aplikacije: Korišćenje aplikacija kao što su Google Authenticator ili Authy može biti efikasna i jednostavna implementacija 2FA.
  • Hardverski tokeni: Takođe možete koristiti hardverske uređaje kao što su YubiKey za fizičku autentifikaciju.

Korišćenje aplikacije kao što je Google Authenticator može se implementirati uz PHP biblioteku kao što je PHPGangsta/GoogleAuthenticator:

$secret = $ga->createSecret();
echo "Proverite 2FA kod na vašem uređaju: " . $ga->getCode($secret);

Zahtev za jakim lozinkama

Napadači mogu lako pogoditi jednostavne i slabe lozinke. Da biste smanjili ovu opasnost, obavezno implementirajte politiku korišćenja jakih lozinki, koja zahteva da korisnici koriste lozinke koje su teške za pogađanje.

  • Minimalni zahtevi za lozinke: Definišite minimalni broj karaktera (npr. najmanje 8 znakova), kao i kombinaciju malih i velikih slova, brojeva i specijalnih karaktera.
  • Zahtevi za promenu lozinke: Omogućite korisnicima opciju da periodično menjaju svoje lozinke, pogotovo nakon dužeg perioda neaktivnosti ili sumnjivih aktivnosti.

Možete koristiti regularne izraze da proverite složenost lozinke:

if (!preg_match('/[A-Z]/', $password) ||
!preg_match('/[a-z]/', $password) ||
!preg_match('/[0-9]/', $password) ||
!preg_match('/[^w]/', $password) ||
strlen($password) < 8) {
echo "Lozinka mora sadržati najmanje 8 karaktera, uključujući mala, velika slova, brojeve i specijalne karaktere.";
}

Kombinovanjem ovih strategija možete značajno smanjiti rizik od brute force napada i osigurati visok nivo zaštite za svoje korisnike i aplikacije.

Kreiranje sitemap-a

Jedna od bitnih funkcionalnosti Burp Suite-a je kreiranje sitemap-a za web sajt koji testirate. Ova opcija vam daje uvid u strukturu određenog web sajta. Takođe, možete koristiti ovu opciju da biste poslali sadržaj drugim alatima unutar Suite-a.

Da biste kreirali sitemap, potrebno je da je presretanje isključeno, da je omogućen FoxyProxy i da je ciljani sajt dodat u scope. Nakon toga idite do taba Target i odaberite pod-tab pod nazivom Site map.

Idite na ciljani sajt i Burp Suite će početi sa pravljenjem sitemap-a.

Kada završi crawl-ovanje, možete da pregledate prikupljeni sadržaj pod tabom Target. Ovaj detaljan prikaz strukture sajta je veoma bitan za dalje testiranje i analizu, omogućavajući vam da identifikujete potencijalne ranjivosti.

Stablo foldera sa leve strane prozora sadrži hijerarhijski prikaz sadržaja, kao i URL-ove, domene, direktorijume, fajlove i paramatrizovane zahteve.

Burp Repeater

Sada ćemo videti kako da koristite alat pod nazivom Repeater i kako vam može poslužiti za analizu ranjivosti.

Repeater vam omogućava da modifikujete i ponovo šaljete HTTP ili WebSocket poruke. Ovo može biti korisno za testiranje ranjivosti zasnovanih na opciji unosa od strane posetioca sajta.

Možemo da uhvatimo zahtev pomoću Burp Proxy-a, napravimo izmene, a zatim pošaljemo isti zahtev više puta uzastopno, koliko god puta želimo.

Hajde prvo da pogledamo ranjivost poznatiju pod nazivom ranjivost uključivanja lokalnih fajlova (local file inclusion vulnerability) unutar DVWA. Ova ranjivost omogućava napadaču da pristupi, čita, ili uključi fajlove sa servera koji nisu namenjeni za pristup.

Ovde možemo da vidimo kako to radi, koristeći opciju Repeater.

Pre toga se pobrinite da je Burp aktivan i da su vam aktivne opcije Intecept i FoxyProxy.

Prvo ćemo presresti zahtev od file inclusion stranice i proveriti je u Burp-u. element koji nas u ovom slučaju najviše zanima se nalazi posle znaka =. Tu vrednost možemo da menjamo.

Sada ćemo poslati to u repeater na dalju proveru ranjivosti. Da bismo to uradili, kliknućemo bilo gde unutar sekcije i odabrati opciju Send to Repeater.

Kada je zahtev u Repeater-u, možete da izmenite parametre, header-e, iili druge elemente da biste testirali ciljanu aplikaciju. Da biste poslali zahtev serveru na odgovor, kliknite na Send. Odgovor od strane servera će biti prikazan u tab-u pod nazivom Raw.

Možemo da prikupimo dosta informacija iz odgovora servera. U ovom slučaju, vidimo da ova konkretna aplikacija pokreće Apache i PHP na Ubuntu linux-u. Ovo može biti korisna informacija kada radite penetration test.

Takođe možete da vidite odgovore u Pretty, Hex ili Render view-u. Pretty obezbeđuje formatiran prikaz koji je lak za čitanje. Hex će prikazati sirove binarne podatke, koji se najbolje mogu koristiti na ne-tekstualne podatke. Render obezbeđuje prikaz kao u browser-u, omogućavajući vam da vidite kako bi se sadržaj prikazao u browser-u.

S obzirom da ovde testiramo ranjivost uključivanja lokalnih fajlova na Linux sistemu, možemo pokušati da čitamo /etc/passwd fajl. U Linux-u ovaj fajl sadrži informacije o svakom korisničkom nalogu na sistemu.

Da bismo ovo uradili, možemo da promenimo vrednost GET zahteva nakon ?page= iz include.php u /etc/passwd i kliknemo na Send da proverimo odgovor u Repeater-u.

Kao što vidite, uspeli smo. Možemo da vidimo sve korisnike koji su deo sistema.

Zaštita od ranjivosti uključivanja lokalnih fajlova (Local File Inclusion)

Ranjivost uključivanja lokalnih fajlova (LFI) je ozbiljna pretnja za web aplikacije jer omogućava napadačima da pristupe osetljivim fajlovima na serveru, čitaju ih ili izvršavaju, čime mogu dobiti pristup osetljivim informacijama poput korisničkih podataka, konfiguracionih fajlova ili čak sistema.

Evo detaljnijih koraka koje možete preduzeti da biste zaštitili svoj sajt od LFI napada:

Saniranje i validacija korisničkog unosa

  • Uvek sanirajte korisnički unos pre nego što ga prosledite kao parametar za učitavanje fajlova. To znači da sve korisničke podatke morate tretirati kao potencijalno opasne. Koristite PHP funkcije kao što su basename() kako biste izbegli korišćenje relativnih putanja (poput ../../).
  • Takođe, uvek validirajte vrstu i format unosa pre nego što ga upotrebite. Na primer, ako očekujete ime fajla, proverite da li unos odgovara dozvoljenim formatima (npr. da završava sa ekstenzijom .txt ili .php, ako je to potrebno) i koristite funkciju preg_replace() za uklanjanje nedozvoljenih karaktera.

Korišćenje unapred definisanih putanja

  • Umesto da dozvoljavate korisnicima da direktno unose ili menjaju putanje do fajlova, ograničite izbor na unapred definisane fajlove ili direktorijume. Na primer, umesto da prosleđujete korisnički unos direktno, koristite fiksne liste dozvoljenih fajlova koje možete birati na osnovu ID-a ili drugih sigurno definisanih vrednosti.
  • Na primer, umesto da prosleđujete:
    include($_GET[‘file’]);
    koristite:

    $whitelist = ['home.php', 'about.php', 'contact.php'];
    if (in_array($_GET['file'], $whitelist)) {
    include($_GET['file']);
    } else {
    // Prikazati grešku ili preusmeriti korisnika
    }

Ograničavanje pristupa kritičnim fajlovima

  • Postavite odgovarajuće dozvole za fajlove i direktorijume kako biste sprečili neovlašćeni pristup. U većini slučajeva, korisnici servera ne bi trebalo da imaju direktan pristup sistemskim fajlovima kao što su /etc/passwd ili bilo koji drugi sistemski fajl. Preporučuje se da koristite minimalne neophodne dozvole, kao što su 644 za fajlove i 755 za direktorijume.
  • Ograničite korisničke privilegije na serveru. Ako aplikacija ne mora da čita određene sistemske fajlove, osigurajte da te fajlove može čitati samo root ili specifični korisnik sa odgovarajućim ovlašćenjima.

Upotreba PHP direktiva za bezbednost

  • Postavite PHP direktive koje sprečavaju neovlašćeni pristup datotekama. Na primer, pomoću direktive open_basedir možete ograničiti PHP skripte da pristupaju samo određenim direktorijumima.
open_basedir = /var/www/html:/tmp

Ovo osigurava da PHP skripte mogu pristupati samo određenim direktorijumima i time ograničava mogućnost čitanja ili uključivanja kritičnih fajlova van definisanih putanja.

Izbegavanje direktnog uključivanja korisničkog unosa u funkcije za učitavanje fajlova

Funkcije kao što su include(), require(), include_once() i require_once() su ranjive ako uzimaju korisnički unos direktno. Nikada ne dozvoljavajte direktno prosleđivanje parametara kroz te funkcije bez prethodne provere i validacije. Ove funkcije mogu izvršavati PHP kod unutar fajla, što može rezultirati zlonamernim aktivnostima.

Primenom ovih mera možete značajno smanjiti šanse za uspešan LFI napad u vašoj web aplikaciji i osigurati da osetljivi fajlovi budu zaštićeni.

Burp Comparer

Nekada vam možda bude potrebno da uporedite rezultate različitih zahteva unutar Burp Suite-a. Za ovo možete da koristite alat pod nazivom Comparer.

Onog trenutka kada imate više zahteva ili odgovora u Comparer-u, možete da ih uporedite da biste pronašli razlike. Ovaj alat ističe razlike, olakšavajući na taj način proces analiziranja ciljane aplikacije.

Možemo ovde da vidimo primer korišćenja ubrizgavanja komande unutar DVWA.

Prvo je potrebno da presretnemo zahtev u Burp Suite-u. Čim uhvatimo zahtev, možemo da ga pošaljemo repeater-u. Čim je u Repeater-u, šaljemo zahtev serveru.

Sada kliknite desnim klikom na odgovor i izaberite opciju Send to Comparer.

S obzirom da Comparer očekuje više od jednog odgovora, moramo poslati različit zahtev ka serveru. Pošto je ovo ranjivost izvršavanja komande, trebalo bi da smo u mogućnosti da pokrenemo ls komandu. dodaćemo komandu nakon IP adrese u zahtevu i poslati je na server. Zatim kliknite desnim klikom na odgovor i izaberite opciju Send to Comparer.

Podaci unutar Comparer-a mogu biti podeljeni na tri sekcije. Glavni prozor je mesto gde vidite sve što upoređujete, kao što je broj elemenata, dužina elemenata i podaci o njima. U gornjoj desnoj sekciji ekrana se nalaze opcije Paste, Load, Remove ili Clear. U donjem levom uglu ekrana imate dve opcije za poređenje podataka: Words i Bytes.

Po dužini podataka možemo da vidimo da postoji razlika u odgovorima. Poredićemo naša dva odgovora po opciji Words i pogledati rezultate. Omgućite opciju Sync views tako da oba prozora mogu da se pokreću istovremeno, olakšavajući vam na taj način da uočite razlike.

Comparer će prikazati podatke u tri različite boje. Narandžasta boja znači Modified, plava Deleted i žuta Added.

Ako skrolujete na dole videćete neke razlike u podacima koje smo dobili od servera. Bilo smo u mogućnosti da uspešno izvršimo komandu i prikažemo sadržaj direktorijuma.

Zaštita od ranjivosti izvršavanja komandi (Command Injection)

Ranjivost izvršavanja komandi (Command Injection) omogućava napadačima da izvrše proizvoljne sistemske komande na serveru koristeći ranjive delove aplikacije. Ova vrsta napada je vrlo opasna jer može omogućiti napadaču da dobije neovlašćeni pristup sistemu, kompromituje podatke ili čak preuzme kontrolu nad serverom.

Da biste efikasno zaštitili svoju aplikaciju od Command Injection napada, preporuka je da implementirate sledeće mere zaštite:

Validacija i sanacija korisničkog unosa

Prva linija odbrane je da validirate i sanirate sav korisnički unos pre nego što ga koristite unutar aplikacije. Nikada ne uzimajte korisnički unos zdravo za gotovo, jer može sadržati zlonamerne komande ili specijalne karaktere koji se mogu iskoristiti za napad.

  • Validacija tipa unosa: Proverite da li unos korisnika odgovara očekivanom tipu podataka. Na primer, ako očekujete numerički unos, proverite da li je unos zaista broj pomoću funkcije kao što je is_numeric().
  • Sanacija podataka: Uklonite sve specijalne karaktere koji mogu biti iskorišćeni za izvršavanje komandi, kao što su ;, &, |, >, <, i drugi. PHP funkcija escapeshellarg() može se koristiti za bezbedno sanitizovanje korisničkog unosa koji se prosleđuje sistemskim komandama:
    $user_input = escapeshellarg($user_input);
  • Ograničavanje dužine unosa: Definišite maksimalnu dužinu korisničkog unosa da biste sprečili pokušaje slanja predugačkih ili nepredviđenih podataka.

Primer validacije i sanacije unosa:

$filename = $_GET['file'];
if (preg_match('/^[a-zA-Z0-9_-]+$/', $filename)) {
// Unos je validan
echo "Pristupate fajlu: " . escapeshellarg($filename);
} else {
echo "Neispravan unos.";
}

Izbegavanje direktnog pozivanja sistemskih komandi

Nikada nemojte omogućiti korisnicima da direktno ili indirektno unose vrednosti koje se koriste u sistemskim komandama. Kada god je moguće, izbegavajte pozivanje sistemskih komandi u vašoj aplikaciji. Ako ipak morate izvršavati komande, koristite sigurnije alternative.

  • Korišćenje ugrađenih funkcija umesto sistemskih komandi: Umesto pozivanja shell komandi putem exec(), shell_exec(), system() ili passthru(), koristite ugrađene funkcije programskog jezika. Na primer, umesto korišćenja system(‘ls’) za listanje fajlova, koristite funkcije kao što su scandir() ili glob() u PHP-u:
    $files = scandir('/path/to/directory');
  • Ograničenje prava izvršavanja komandi: Ako je neophodno koristiti sistemske komande, osigurajte da vaša aplikacija ima najmanje moguće privilegije za izvršavanje tih komandi. Ovo će ograničiti potencijalnu štetu u slučaju da napadač uspe da izvrši neovlašćene komande.

Korišćenje unapred definisanih parametara

Kada morate da prosleđujete podatke sistemskim komandama, uvek koristite unapred definisane parametre ili fiksne vrednosti. Na taj način, korisnici ne mogu direktno da manipulišu komandom ili parametrima.

  • Definisanje bele liste (whitelist): Umesto da dozvolite korisnicima da unose vrednosti koje će biti uključene u sistemske komande, koristite unapred definisane dozvoljene vrednosti. Na primer, ako korisnik bira određenu datoteku za pretragu, umesto da dozvolite slobodan unos, kreirajte bele liste datoteka koje se mogu pretraživati.
    $allowed_files = ['file1.txt', 'file2.txt', 'file3.txt'];
    $file = $_GET['file'];
    if (in_array($file, $allowed_files)) {
    $command = "cat " . escapeshellarg($file);
    shell_exec($command);
    } else {
    echo "Nedozvoljen unos.";
    }

Koristite pripremljene upite (Prepared Statements)

Ako se korisnički unos koristi za izvršavanje SQL upita ili bilo koje druge funkcionalnosti koja može biti ranjiva na napade, kao što je SQL Injection, koristite pripremljene upite. Pripremljeni upiti osiguravaju da unos korisnika bude pravilno odvojen od izvršnog koda, čime se onemogućava ubrizgavanje zlonamernih komandi.

  • Korišćenje PDO (PHP Data Objects) za pripremljene upite:
    $stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
    $stmt->bindParam(':username', $username);
    $stmt->execute();

Pripremljeni upiti onemogućavaju da korisnički unos bude interpretiran kao deo SQL naredbe, što značajno smanjuje rizik od napada.

Ograničavanje pristupa sistemskim resursima

Ograničite pristup sistemskim resursima i komandama koje aplikacija može koristiti. Postavljanjem strožih dozvola za korisnike aplikacije možete smanjiti štetu u slučaju zloupotrebe.

  • Pravila pristupa (Access Control): Koristite prava pristupa koja omogućavaju samo određene resurse aplikaciji, dok su svi ostali sistemski resursi blokirani. Na primer, aplikacija može imati pristup samo određenom direktorijumu, dok su svi drugi direktorijumi i fajlovi zaštićeni.
  • Korišćenje „chroot“ okruženja: Za dodatnu sigurnost, možete koristiti tzv. chroot okruženje (skraćeno od „change root“) za izolaciju aplikacije od ostatka sistema. Ovo omogućava pokretanje aplikacije u izolovanom delu sistema fajlova, smanjujući mogućnost pristupa kritičnim delovima sistema.

Kombinovanjem ovih načina obezbeđujete da vaša web aplikacija bude otpornija na Command Injection napade i da pruža bolju zaštitu korisnicima i sistemskim resursima.

Burp Intruder

Intruder je moćan alat automatizaciju prilagođenih napada na web aplikacije. Možete ga koristiti da testirate različite inpute i identifikujete potencijalne ranjivosti.

Da biste u potpunosti iskoristili brzinu Intruder-a, potreban vam je Burp Professional. Iako može biti korišćen sa verzijom Burp Community, ta opcija je prilično limitirana. Zato mnogi profesionalci u svetu testiranja aplikacija odlučuju da za ove zadatke koriste neki drugi alat.

U ovom delu ćemo objasniti kako da koristimo Intruder da izvršite brute force napad.

Koristićemo DVWA-ov brute force sekciju. Kada smo presreli zahtev ka login stranici, možemo da pošaljemo zahtev Intruderu tako što ćemo kliknuti desnim klikom a zatim odabrati Select to Intruder.

Kada ste u Intruder tab-u, morate da podesite sve opcije da biste pokrenuli napad. Podrazumevano, Burp Suite će naglasiti sve potencijalne payload promenljive i zatvoriti ih $ karakterom. Neće nam trebati svi, već samo oni u poljima username i password.

Da biste obrisali payload pozicije kliknite na Clear.

Treba da izaberete koji napad želite da koristite. Na raspolaganju vam je nekoliko opcija za napade, a mi ćemo u ovom testu koristiti opciju Cluster bomb napad.

Ovaj napad pokreće prolazak kroz svaki payload set, testirajući na taj način sve moguće kombinacije koje smo mu dali.

Sada samo dodajte vrednosti za korisničko ime i lozinku, označavajući admin i admin i kliknite na Add.

Kliknite na pod-tab pod nazivom Payloads da biste konfigurisali payload-e koje želite da koristite u napadu. S obzirom da smo podelili dve payload pozicije, moramo da podesimo zasebno svaki set. Prvi set je za korisničko ime, a drugi za lozinku.

Za potrebe ovog testa možemo da ostavimo tip payload-a kao Simple list, ali imajte u vidu da postoje i druge liste kao što su Custom iterator i Character substitution kojima se nećemo dalje baviti u ovom tekstu.

Postoji šest opcija pod Payload Settings sekcijom. Ovo nam dozvoljava da učitamo listu elemenata ili da ih dodamo ručno. U ovom testu ćemo dodati naše sopstvene elemente:

  • Paste – ubacuje listu iz vašeg clipboard-a
  • Load – učitava listu iz fajla
  • Remove – briše naglašeni element
  • Clear – briše sve elemente u listi
  • Deduplicate – briše dupe ulaze iz vaše liste. To povećava efikasnost vašeg napada smanjujući broj poslatih zahteva
  • Add – unosi nov element

Kada je sve podešeno, kliknite na Start attack.

Rezultat napada će biti prikazan u novom prozoru. Analizirajte odgovore traženjem razlika ili indikatora potencijalnih ranjivosti.

U prozoru sa rezultatima napada možete da ih sortirate po različitim filterima, da biste lakše identifikovali varijacije u odgovorima koji mogu da budu nagoveštaj uspešnog logovanja na web apilikaciju.

Obično možete da identifikujete neke zanimljive odgovore kroz:

  • različit HTTP statusni kod
  • različita dužina odgovora
  • prisustvo ili osustvo određenih izraza
  • pojava greške ili timeout-a

Možete da sortirate po koloni Length i videti da li postoje neke razlike u dužini.

Kao što možete da vidite, imamo jednu veličinu koja se razlikuje od ostalih. To može da bude znak da imamo uspešno logovanje. To možemo da proverimo tako što ćemo pokušati da se ulogujemo u aplikaciju sa kredencijalima.

Uspešno smo se ulogovali sa kredencijalima username:admin i password:password.

Zaštita od ranjivosti u JavaScript bibliotekama (Retire.js)

JavaScript biblioteke su ključna komponenta mnogih modernih web aplikacija, ali kao i svaki softver, one mogu sadržati ranjivosti koje mogu biti iskorišćene za napade. Ranjivosti u popularnim JavaScript bibliotekama poput jQuery, Angular, React, ili različitih pluginova mogu omogućiti napadačima da dobiju neovlašćen pristup, ukradu podatke ili kompromituju bezbednost sajta. Zato je važno da redovno pratite stanje JavaScript biblioteka i da primenjujete bezbednosne zakrpe.

Evo nekoliko detaljnih koraka koje možete preduzeti da biste zaštitili svoj sajt od ranjivosti u JavaScript bibliotekama:

Redovno ažuriranje JavaScript biblioteka

Jedan od najvažnijih koraka u zaštiti vašeg sajta je redovno ažuriranje svih JavaScript biblioteka koje koristite. Zastarele biblioteke često sadrže poznate ranjivosti koje napadači mogu iskoristiti.

  • Praćenje zvaničnih ažuriranja: Redovno proveravajte zvanične sajtove i repozitorijume biblioteka koje koristite, kao što su npm ili GitHub, da biste bili sigurni da imate najnoviju verziju.
  • Automatska ažuriranja: Postavite automatske alarme ili alate za obaveštenja o ažuriranjima u vašem okruženju za razvoj, kako biste odmah saznali kada su dostupne nove verzije. Alati kao što su npm (npm outdated) mogu da identifikuju zastarele biblioteke.

Primer korišćenja npm za proveru ažuriranja:

npm outdated

Ova komanda prikazuje sve zastarele pakete, zajedno sa informacijama o najnovijim verzijama koje su dostupne.

Korišćenje alata poput Retire.js za identifikaciju ranjivosti

Retire.js je alat dizajniran za identifikaciju poznatih ranjivosti u JavaScript bibliotekama. On automatski skenira aplikaciju i sve zavisnosti koje koristi, upozoravajući vas na sve ranjive verzije biblioteka koje bi trebalo da ažurirate.

  • Kako radi Retire.js: Retire.js prepoznaje ranjive verzije biblioteka tako što poredi verziju biblioteka koje koristite sa bazom podataka poznatih ranjivosti. On skenira ne samo biblioteke koje direktno koristite, već i sve zavisnosti (dependency) vaših aplikacija.
  • Korišćenje Retire.js u projektu: Alat može biti korišćen kao CLI (Command Line Interface) alat ili kao dodatak u okviru vašeg build procesa. Možete ga integrisati u svoj razvojni ciklus kako bi skenirao aplikaciju svaki put pre nego što je objavite.

Instalacija i korišćenje Retire.js:
Instalirajte alat pomoću npm:

npm install -g retire

Skenirajte aplikaciju:

retire

Retire.js će prikazati listu zastarelih i ranjivih biblioteka zajedno sa preporukama za ažuriranje.

Retire.js može biti integrisan i u CI/CD pipeline kako bi automatski skenirao aplikaciju pri svakom novom deploy-u, osiguravajući da nećete objaviti sajt sa ranjivim bibliotekama.

Provera zavisnosti (dependencies) i podzavisnosti

Mnoge JavaScript aplikacije zavise od biblioteka koje same imaju zavisnosti (tzv. podzavisnosti). Ove podzavisnosti mogu takođe biti ranjive, i zato je važno da i njih ažurirate zajedno sa glavnim bibliotekama.

  • Alati za upravljanje zavisnostima: Alati poput npm, yarn, i Snyk pružaju mogućnosti za detaljno ispitivanje i ažuriranje zavisnosti. Na primer, npm audit može biti korišćen za proveru i popravku ranjivih zavisnosti.Primer korišćenja npm za proveru zavisnosti:
    npm audit
  • Korišćenje alata kao što je Snyk: Snyk je još jedan alat za automatsku detekciju ranjivosti u zavisnostima, a pruža i preporuke za ažuriranje.

Oprez prilikom korišćenja third-party biblioteka i plugin-ova

JavaScript third-party biblioteke mogu olakšati razvoj, ali one takođe predstavljaju bezbednosni rizik. Pre nego što ih uključite u svoj projekat, uverite se da su proverenog porekla i da se aktivno održavaju.

  • Provera popularnosti i ažuriranja: Pre nego što uključite third-party biblioteku, proverite njen repozitorijum na GitHub-u ili npm-u. Biblioteke koje nemaju redovna ažuriranja ili imaju mali broj korisnika mogu biti rizične.
  • Minifikovani fajlovi: Ako koristite minifikovane verzije JavaScript biblioteka, uverite se da dolaze iz zvaničnih izvora. Minifikacija može sakriti zlonameran kod, pa je važno da znate da koristite verifikovane verzije.

Kontrola verzija i rollback strategije

Kada ažurirate JavaScript biblioteke, uvek zadržite mogućnost povratka na prethodnu stabilnu verziju. Ovo je važno jer nova verzija biblioteke može doneti neželjene greške ili konflikte.

  • Korišćenje semantičkog versioniranja: Pratite semantičko versioniranje (`x.y.z` gde su x – major, y – minor, z – patch) i ažurirajte prema potrebama. Na primer, ažuriranje samo “patch” verzija (z) obično donosi ispravke grešaka bez promene funkcionalnosti, dok major ažuriranja (x) mogu uvoditi veće promene.
  • Rollback strategija: Uvek testirajte nove verzije biblioteka u razvojnom okruženju pre nego što ih primenite na produkciji. Ako nešto krene po zlu, imajte spremnu strategiju povratka na prethodnu stabilnu verziju biblioteke.

Zatvaranje nepotrebnih API-ja i funkcionalnosti

Ako koristite JavaScript biblioteke sa funkcionalnostima koje vam nisu potrebne, isključite ih ili ograničite njihov pristup. Svaka funkcionalnost predstavlja potencijalni bezbednosni rizik.

  • Uklonite nepotrebne funkcije: Na primer, ako koristite biblioteku koja sadrži funkcije za rad sa kolačićima ili lokalnim skladištem, a te funkcije vam nisu potrebne, isključite ih.
  • Ograničite pristup API-jevima: Ne pružajte otvoren pristup API-jevima ili funkcionalnostima koje ne koristite. Ove funkcije mogu biti meta napadača ako nisu pravilno osigurane.

Burp ekstenzije

ekstenzije za Burp Suite vam omogućavaju da prilagodite i dodate neke nove funkcionalnosti u Burp Suite. Da biste dodali i upravljali ekstenzijama, idite na tab pod nazivom Extender i pristupite BApp Store-u.

Postoji veliki broj besplatnih ekstenzija koje su ovde dostupne, a koje su kompatibilne sa Burp Suite Community izdanjem. Evo samo kratkog opisa nekih od najpopularnijih ekstenzija na tržištu.

  • Param Miner: Automatski pretražuje skrivene ili nepoznate parametre u web aplikacijama, pomažući vam da otkrijete dodatne tačke za napad koje standardni zahtevi možda ne pokazuju.
  • Hackvertor: Omogućava fleksibilne konverzije i transformacije podataka (kodiranje, dekodiranje, heširanje) direktno unutar Burp Suite-a, što olakšava rad sa složenim podacima.
  • Autorize: Automatski testira propuste u autorizaciji tako što proverava da li različiti korisnici mogu neovlašćeno pristupiti istim resursima.
  • JSON Beautifier: Omogućava lakše čitanje i analizu JSON podataka tako što formatira JSON odgovore i zahteve u čitljiv oblik unutar Burp Suite-a.
  • Retire.js: Skenira JavaScript biblioteke korišćene u aplikaciji i identifikuje poznate ranjivosti u njima, pomažući u prepoznavanju zastarelih i nesigurnih biblioteka.
  • Active Scan++: Povećava mogućnosti Burp Suite-ovog aktivnog skeniranja dodavanjem dodatnih sigurnosnih provera, što omogućava otkrivanje šireg spektra ranjivosti.
  • CO2: Sadrži kolekciju alata za manipulaciju enkripcijom, dekodiranje podataka i druge specifične zadatke, čime proširuje funkcionalnost Burp Suite-a za naprednije sigurnosne testove.
  • Logger++: Pruža napredno logovanje HTTP/HTTPS saobraćaja, omogućavajući vam da pratite specifične zahteve i odgovore za detaljniju analizu. Ova ekstenzija je korisna za pregled i analizu zahteva koji prolaze kroz Burp Suite.
  • SAML Raider: Specijalizovana ekstenzija za testiranje SAML (Security Assertion Markup Language) autentifikacije. Omogućava manipulaciju SAML potpisima, analizu SAML zahteva i odgovora, i identifikaciju ranjivosti u SAML implementacijama.
  • Burp Beautifier: Služi za automatsko formatiranje različitih vrsta podataka (HTML, CSS, JavaScript, JSON) kako bi bili lakši za analizu unutar Burp Suite-a.
  • Turbo Intruder: Ova ekstenzija je dizajnirana za brze brute-force napade. Turbo Intruder koristi asinhroni dizajn, što omogućava mnogo brže izvođenje napada u poređenju sa standardnim Intruder alatom.
  • HTML5 Auditor: Alat koji identifikuje specifične sigurnosne ranjivosti povezane sa HTML5 tehnologijama. Pomaže u pronalaženju problema u HTML5 aplikacijama koje koriste nove API-je.
  • Software Vulnerability Scanner: Ova ekstenzija omogućava skeniranje za poznate ranjivosti u softverskim komponentama koje koristi ciljna web aplikacija. Radi na bazi podataka o ranjivostima u popularnim softverskim paketima.

Imajte u vidu da se BAPP Store redovno ažurira sa novim ekstenzijama, pa povremeno proverite da li je postavljena neka nova koja možda može da vam zatreba u vašem svakodnevnom poslu testiranja aplikacija.

Zaključak

Kao što ste videli, Burp Suite je izuzetno moćan alat za testiranje bezbednosti web aplikacija, koji nudi širok spektar funkcionalnosti kako za početnike, tako i za iskusne profesionalce.

U ovom tekstu smo prošli kroz korake za podešavanje Burp Suite okruženja, rad sa glavnim alatima poput Proxy-a, Repeater-a i Intruder-a, kao i način dodavanja ekstenzija koje proširuju njegove mogućnosti.

Korišćenjem besplatnih ekstenzija iz BApp Store-a, kao što su Param Miner, Hackvertor i CO2, možete dodatno poboljšati svoje testiranje i otkriti ranjivosti koje bi inače mogle ostati skrivene.

Ostavi komentar

Vaša adresa neće biti objavljena