[Pamoka] Puslapio sms sistemų, amxbans ir t.t apsaugos
Posted: 2015 Feb 08 17:02
Pastoviai gaunu prašymų dėl puslapio sistemų spragų tvarkymo, dažniausiai problema sql injectionas, su kuriuo iš duomenų bazių pavogiami ir ištrinami duomenys, retesniais atvėjais problema yra dėl Cross Site Scripting (XSS), šioje pamokoje pabandysiu kuo aiškiau ir paparasčiau pateikti reikalingiausią informaciją šių saugumo spragų tvarkymui step by step.
1. Visų pirma turite išsiaiškinti, ar pas jus puslapyje yra spragų, tiek sql injection tiek XSS spragas galima rasti, be jokios programinės įrangos, bet aš rekomenduoju naudoti programą pavadinimu Acunetix Web Vulnerability Scanner, ja naudotis itin paprasta, suvedi puslapio adresą ir spaudi mygtuką start, programa per tam tikrą laiko tarpą nuskaitys visą jūsų puslapį, ir raudonai pateiks rimčiausias spragas, su visa informacija apie tą spragą, konkrečiai infomaciją apie tą kintamajį/kintamuosius kuris/kurie yra nesaugūs. Torrent linkai parsisiusti programą https://thepiratebay.se/search/Acunetix ... ner/0/99/0
Programos scan lango su spragomis pavyzdys:

2. Jeigu spragos pavadinimas: Cross Site Scripting (XSS)
Naudodamasis šia spraga, įsilaužėlis gali siųsti kenkėjišką kodą naudodamasis javascript formomis, taip jis gali išgauti informaciją apie kitus vartotojus, padaryti keitimus duomenų bazėse ar net išgauti duomenų bazės vartotojo prisijungimo duomenis.
Problemos sprendimas:Sprendimų yra ganėtinai daug, kaip pavydžiui pateiksiu vieną su PHP. Jums reikia filtruoti metacharacters, tai galite padaryti naudodami komandą escapeshellcmd()
Pavyzdys:
Trumpai apie kitus variantus (Jeigu nesuprantate nieko apie PHP šiuos variantus galite ignoruoti): htmlspecialchars($str, ENT_QUOTES), escapeshellargs(),
su Mysqli:
su PDO:
3. Jeigu spragos pavadinimas: SQL Injection/Blind SQL Injection
Ši spraga yra dažniausiai pasitaikanti, o ir ja pasinaudoti gali beveik kiekvienas turintis PHP pagrindus, ar nuovokos naudojantis google paieškos sistema. Naudodamasis šia spraga įsilaužėlis gali gauti visą informaciją iš jūsų duomenų bazių, ją redaguoti, ištrinti.
Problemos sprendimas: Variantų taipogi yra daug naudojantis tiek PHP, tiek Mysqli, tiek PDO.
Vienas iš variantų naudojantis įrastu PHP: suradus _POST arba _GET:
Pakeisti į:
Aišku šis extensionas bus ateityje pašalintas iš PHP, panašiu principu veikia ir komanda
Kiti pavydžiai: panašiai kaip su XSS rekomenduojama naudoti Mysqli arba PDO (PDO eina nuo PHP 5.1 versijos), PHP versija galima pamatysi parašius
Pavyzdukas su PDO:
Su Mysqli:
---------------------------------------------------------------------------------
Pavyzdys su amxbans 6.xx Blind sql injection ir kaip tai sutvarkyti:
---------------------------------------------------------------------------------
į ban_details.php po session_start(); eilutės įrašome:
Noredami užblokuoti, kad įsilaužėlis negalėtų skanuoti jūsų web, galite blokotuoti failą robot.txt per .htaccess arba index faile įdėti kodą iš šios temos: http://amxmodx.lt/viewtopic.php?p=23035#p23035
Kol kas tiek, jeigu kažką domins papildysiu plačiau. ( Būtų naudinga stickint postą)
1. Visų pirma turite išsiaiškinti, ar pas jus puslapyje yra spragų, tiek sql injection tiek XSS spragas galima rasti, be jokios programinės įrangos, bet aš rekomenduoju naudoti programą pavadinimu Acunetix Web Vulnerability Scanner, ja naudotis itin paprasta, suvedi puslapio adresą ir spaudi mygtuką start, programa per tam tikrą laiko tarpą nuskaitys visą jūsų puslapį, ir raudonai pateiks rimčiausias spragas, su visa informacija apie tą spragą, konkrečiai infomaciją apie tą kintamajį/kintamuosius kuris/kurie yra nesaugūs. Torrent linkai parsisiusti programą https://thepiratebay.se/search/Acunetix ... ner/0/99/0
Programos scan lango su spragomis pavyzdys:
2. Jeigu spragos pavadinimas: Cross Site Scripting (XSS)
Naudodamasis šia spraga, įsilaužėlis gali siųsti kenkėjišką kodą naudodamasis javascript formomis, taip jis gali išgauti informaciją apie kitus vartotojus, padaryti keitimus duomenų bazėse ar net išgauti duomenų bazės vartotojo prisijungimo duomenis.
Problemos sprendimas:Sprendimų yra ganėtinai daug, kaip pavydžiui pateiksiu vieną su PHP. Jums reikia filtruoti metacharacters, tai galite padaryti naudodami komandą escapeshellcmd()
Pavyzdys:
Code: Select all
$privilegija_POST = $_POST["privilegija"]; // šį kodą keičiam į:$privilegija = escapeshellcmd($privilegija_POST);
su Mysqli:
Code: Select all
$privilegija_POST = $mysqli->real_escape_string($privilegija_POST); // bus plačiau prie sql injection
Code: Select all
$privilegija_POST->execute(array(':privilegija' => $_SESSION['privilegija']) ); // bus plačiau prie sql injection
Ši spraga yra dažniausiai pasitaikanti, o ir ja pasinaudoti gali beveik kiekvienas turintis PHP pagrindus, ar nuovokos naudojantis google paieškos sistema. Naudodamasis šia spraga įsilaužėlis gali gauti visą informaciją iš jūsų duomenų bazių, ją redaguoti, ištrinti.
Problemos sprendimas: Variantų taipogi yra daug naudojantis tiek PHP, tiek Mysqli, tiek PDO.
Vienas iš variantų naudojantis įrastu PHP: suradus _POST arba _GET:
Code: Select all
$page = $_GET['page'];$country = $_GET['country'];
Code: Select all
$page = mysql_real_escape_string($_GET['page']);$country = mysql_real_escape_string($_GET['country']);
Code: Select all
addslashes();
Code: Select all
phpinfo();
Code: Select all
$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name'); $stmt->execute(array('name' => $name)); foreach ($stmt as $row) { // do something with $row}
Code: Select all
$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');$stmt->bind_param('s', $name); $stmt->execute(); $result = $stmt->get_result();while ($row = $result->fetch_assoc()) {}
Pavyzdys su amxbans 6.xx Blind sql injection ir kaip tai sutvarkyti:
---------------------------------------------------------------------------------
į ban_details.php po session_start(); eilutės įrašome:
Code: Select all
$bid = mysql_real_escape_string($_GET['bid']);$bhid = mysql_real_escape_string($_GET['bhid']);
Kol kas tiek, jeigu kažką domins papildysiu plačiau. ( Būtų naudinga stickint postą)