RSS
 

Posts Tagged ‘phoenix exploit kit’

Säkerhetshål i Phoenix Exploit Kit 2.3

04 Jan

Phoenix Exploit Kit är ett script som används för att enkelt smitta datorer med malware. Det består dels av filer som attackerar kända säkerhetshål i webbläsare, Adobe Flash och Adobe reader, dels av en kontrollpanel där man enkelt kan ladda upp den fil man vill ska installeras på attackerade datorer och se statistik över attacken.

Ironiskt nog innehåller denna kontrollpanel ett säkerhetshål som rapporterades 2 januari. Säkerhetshålet gör att man kan logga in utan att känna till lösenordet förutsatt att serverns har register_globals aktiverat. Php-koden som hanterar inloggningen ser ut så här:

I rad 9 och 10 kontrolleras dels om något är fel med lösenordet (pw), dels om något är fel med användarnamnet (login). Sistnämnda är intressant, då man på kontrollpanelens inloggningssida endast fyller i lösenord. För att inloggningen ska misslyckas måste både lösenord och användarnamn vara felaktigt.

Variabeln $ADMINLN som kontrolleras på rad 10 sätts aldrig. Det spelar ingen roll för funktionaliteten eftersom en misslyckad inloggning kräver att både lösenordet och användarnamnet är fel. Däremot kan man sätta $ADMINLN, enklast genom att ange det i adressfältet, förutsatt att register_globals är aktiverat. På rad  21 sätts sessioncookie med namnet ‘login’ oavsett om inloggningen lyckats eller inte, rad 22 gör att sidan laddas om och först då kontrolleras att inloggningen är korrekt, via rad 9 och 10.

Vi har alltså möjlighet att kontrollera värdena i både sessioncookien ‘login’ och variabeln $ADMINLN. Eftersom kontrollen på rad 9 och 10 godkänner inloggning om inte både lösenord och användarnamn är fel kan vi nu logga in utan att veta lösenordet, eftersom vi har full kontroll över användarnamnet.

Enklast är att visa med hjälp av ett php-script.

<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_COOKIEJAR, ”cookie.txt”);
curl_setopt($ch, CURLOPT_URL, ”http://example.org/phoenix/statistics.php”);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, ‘login=’);
curl_exec($ch);

curl_setopt($ch, CURLOPT_URL, ”http://example.org/phoenix/statistics.php?ADMINLN=da39a3ee5e6b4b0d3255bfef95601890afd80709”);
curl_setopt($ch, CURLOPT_POST, 0);
curl_exec($ch);

curl_close($ch);
?>

I den första curl-requesten postar vi ett formulär till inloggningssidan, i detta fall http://example.org/phoenix/statistics.php. Enda fältet i det postade formuläret är login som lämnas tomt. Sessioncookien ‘login’ kommer nu att sättas med värdet av sha1-hash av en tom sträng. I nästa curl-request hämtar vi sidan igen och denna gången kommer $ADMINLN att sättas via adressen. Den sätts till värdet av sha1-hash av en tom sträng. När inloggningen kontrolleras kommer vi att uppfylla både kravet att sessioncookien ‘login’ är satt och att den har samma värde som variabeln $ADMINLN. Php-scriptet kommer att returnera sen html-kod som visas efter en lyckad inloggning.