Vulnerabilitati PHP – Insecure Permissions - Securitatea Informatica

Vulnerabilitati PHP – Insecure Permissions

Uitaţi-vă cu atenţie în scripturi, verificaţi dacă scriptul cere autentificare pentru a face diferite lucruri (e.g backup). Uitaţi-vă după permisiuni nesigure, poate putem face lucruri administrative fără a fi logaţi ca admin.

1. Exemplu de bază

Ne gândim la un script care lasă administratorul să vadă conţinutul bazei de date prin intermediul unui fişier plasat în folderul /admin. Acel fişier să aibă numele: db_lookup.php .

Cod:

<?php
// Lookup in the database
readfile('protected/usersdb.txt');
?>

Să ne gândim. Nu putem accesa folderul “protected” pentru că este protejat de .htaccess. Dar să ne uităm la fişierul acesta. Nu verifică dacă suntem logaţi, nimica. Deci dacă facem următoarea cerere:

http://127.0.0.1/admin/db_lookup.php

putem vedea baza de date. Tineţi minte, acesta este un exemplu creat de mine, nu unul real, dar puteţi găsii vulnerabilităţi de genul acesta în scripturi.

2. Citire users/passwords

Da, unii programatori sunt de-a dreptul idioţi. Salvează utilizatorii şi parolele în fişiere text, NEPROTEJATE. Un exemplu dintr-un script:

http://127.0.0.1/userpwd.txt

şi putem citii fişierul, utilizatorii şi parolele lor se află acolo.

3. Descărcare backup-uri

Unele scripturi au funcţia de backup al bazei de date. Unele sunt sigure, altele nu. O să vă arăt un exemplu real:

Cod:

<?php
function mysqlbackup($host,$dbname, $uid, $pwd, $structure_only, $crlf) {
$con=@mysql_connect("localhost",$uid, $pwd) or die("Could not connect");
$db=@mysql_select_db($dbname,$con) or die("Could not select db");
//.............................. etc ..........................
mysqlbackup($host,$dbname,$uname,$upass,$structure_only,$crlf);

?>

După o grămadă de cod, funcţia este apelată. Nu am copiat tot codul pentru că este uriaş. Am analizat scriptul, nu este necesar login, nu este nici o verificare, nimic. Deci dacă accesăm fişierul direct backup-ul bazei de date va începe. Exemplu:

http://127.0.0.1/adminpanel/phpmydump.php.

Acum avem backup-ul bazei de date salvat la noi pe computer.

4. Fişierele INC

Unele scripturi salvează date importante în fişiere INC. De obicei în fişierele INC se află cod PHP care conţine datele de conexiune la baza de date. Fişierele INC pot fi vizualizate în browser, chiar dacă conţin cod PHP. Cu o simplă cerere vom avea aces la fişier. Exemplu:

http://127.0.0.1/inc/mysql.inc.

Acum avem detaliile de conexiune la baza de date.

5. Cum să fixezi

Exemplu de bază: Verificaţi dacă administratorul este logat, dacă nu, redirecţionaţi.
Citire users/passwords: Salvaţi înregistrările într-o bază de date MySQL sau într-un fişier/folder protejat.
Descărcare backup-uri: Verificaţi dacă administratorul este logat, dacă nu, redirecţionaţi.
Fişierele INC: Salvaţi datele de conexiune în fişiere php sau protejaţi folderul cu .htaccess .

Sursa: SirGod

Twitter Digg Delicious Stumbleupon Technorati Facebook


Nici un comentariu inca... Fii primul care lasa un comentariu!

Lasa un raspuns

This site is protected by Comment SPAM Wiper. This site is protected by WP-CopyRightPro