Daugelis pradeda programuoti ir saugumo savo “programėlių” mažai rūpinasi, vien iš nežinojimo. Kuo daugiau patirties tuo paprastesni uždaviniai sprendžiami turėtų kuo sudėtingiau. Bent taip esu susidaręs nuomone, kur seniau problemos nematydavau, dabar atorodo uch… problematiška.
Štai keletas pavyzdžių, ką gali padaryti su jūsų paliktom “klaidelėm” ir pan.
Kartais padaro programėlė, kuri leidžia bilekam uploadinti failus. Tarkim nuotraukas ir kitus failus. Ir neduok dieve palikta galimybė uploadinti bile kokio tipo failą, tuo galima pasinauti ir dar kaip.
Tuo pasinaudojau ir aš, bet jau uždaroje zonoje, buvau pamiršęs FTP slaptažodį, o reikėjo iš tos svetainės atsinaujinti failus, ir pasiimti naujausią SQL dumpą. Na ką? Jei galima uploud oadaryti bilekokį failą, tai vadinasi galima įkelti ir PHP skriptą, tarkim pavadinkim job.php. Ką galima su juo padaryti? Ogi labai daug! Ypač nusimanantiems. Taigi pasinaudojas ta upload galimybę susizipavau visą direktoriją, ir parsitempiau į kompiuterį. Kitas dalykas reikėjo SQL dumpo, tai irgi pasirodo paprasta, suzinojus kur mėtosi mysqldump, ir žinant mysql slaptažodį laisvai galima pasidaryti dump, ir gal net taip patogiau.
Kaip tai veikia?
Ogi gan paprastai, pasinaudojus php komanda system
system() is just like the C version of the function in that it executes the given command and outputs the result.
The system() call also tries to automatically flush the web server’s output buffer after each line of output if PHP is running as a server module.
Taig bandom;
galima panagrinėti failų struktūra, kaip pavyzdys ls -la komanda, ir t.t. Žiūrint ko jums reikia. Tos komandos jums veiks tarkim *nix serveryje net jei nėra galimybės prisijungti prie shh.
Taigi elementarios eilutės:
<?
set_time_limit(0);
$str = “ls -la”; // pasirinkta komanda
echo system($str);
?>
Taigi keletas kitų naudingų komandų. Taigi galima suzipuoti direktoriją, gauti mysql dumpus ikelti mysql dumpą ir pan, ko tik prireiks.
Keletas svarbių komandų. Daugelis naudoja phpmyadmin’ą kuriuo įkelia lentelę, didelė problema būna kad upload failas limituotas. Standartiškai būna 2MB, o dažnai dideli projektai saugo daugiau nei 2MB duomenų, tad koks backup.sql failas gali būti didelis ir juo neįkelsi per phpmyadminą. Patogiausia naudotis per ssh mysqldump ir mysql komandomis. O kai neturi galimybės ssh turėti gali ir pats greitai pasirašyti simple komandas. Tai gali būti naudojama ir backupų darymui (import/export);
Įkelti sql dump failą
/path/to/mysql -u USER -pPASSWORD DBNAME < /path/to/dir/dumpas.sql
Eksportuojam dump failą
/path/to/mysqldump -u USERNAME -pPASSWORD DATEABAE > /path/to/dir/dumpas.sql
taigi pasinaudojus system(), laisvai importuosim/eksportuosim failus. o jei jau palikai spragą upload skripte kenkėjas ne tik gali parsisiųsti visus failus tavo direktorijoje, bet ir užvaldyti serveriuką. Dėl to turėtų pasirūpinti serverio administratoriai bei programuotojai, kad tokios klaidos nevelti.