Приветствую всех, в данной статье я хочу рассказать, как пользователю без знаний в php и классификации уязвимостей - можно проверить загружаемый продукт\скрипт, чтобы быть увереным в его безопасности в последующем.
Начнем с терминов:- XSS - Это недоработка в фильтре, проверки переменных, исполняемых скриптом.
- SQL INJ - Это недоработка в фильтре, проверки переменных, которые в последующем используются в запросах к обращению к БД.
- BACKDOOR - Это специально оставленная разработчиком уязвимость, с помощью которой можно получить доступ к вашему сайту.
---- Обфускация кода - Зашифрованный код в теле скрипта, которые может содержать в себе Бэк'доры, Ай'Фреймы и т.д.
Запомнили технические названия уязвимостей, которые мы начнем искать в нашем скрипте?
С чего начать проверку скрипта?
XSS
XSS может быть оставлена разработчиком, как специально, так и случайно.
Она может быть завуалирована по разному, но эффект от нее будет один и тот же, хотя они делятся по классам "активная" и "пассивная"
Активная опасней, ведь она без ведома пользователя может совершать манипуляции скрытой навигации по страницам и т.д.
Пассивная чаще всего выполняет лишь роль кражи Cookies(сюда входит сессия сайта и т.д.).
Покажу пример:
Есть php код:
1.php
PHP Code:
<?PHP
echo $_GET['e'];
?>
При обращении к скрипту 1.php?e=<script>alert('vB')</script>
Мы увидим всплывающее окно, соответственно, с надписью
vB.
Убрать эту уязвимость можно, отфильтровав запросы $_GET,$_POST,$_REQUEST,$_SESSION,$_COOKIES.
Получится примерно следующий код:
Есть php код:
1.php
PHP Code:
<?PHP
echo htmlspecialchars($_GET['e']);
?>
Теперь при таком же запросе к скрипту, мы увидем белую страницу с надписью
<script>alert('vB')</script>, которая будет вполне безопасна.
SQL INJ
Sql injection же может использоваться в скриптах, где есть работа с базой данных, иначе эта уязвимость не имеет в себе никакого смысла.
Рассмотрим так же пример с кодом:
2.php
PHP Code:
<?PHP
/*******Тут подключение к бд и основной код*********/
$result=mysql_query("SELECT * FROM user WHERE id=".$_GET['userid']."");
/*******Остальной код**************************/
?>
При обращении к скрипту с запросом: 2.php?userid=1
Нам по идее должны отобразиться данные с информацией о пользователе,
а при обращении с запросом: 2.php?userid=1'
Нам отобразиться что-то типа:
mysql_query(): You have an error in your SQL syntax check the manual that corresponds to your MySQL server version for the right syntax to use near '1''
Что не есть хорошо.
С помощью данной уязвимости пользователь сможет подобрать колонки и столбцы, вывести нужные данные об нужном пользователе, и далее взломать сайт или т.д.
На примере кода в php данную уязвимость можно вылечить так:
2.php
PHP Code:
<?PHP
/*******Тут подключение к бд и основной код*********/
$result=mysql_query("SELECT * FROM user WHERE id='".mysql_real_escape_string($_GET['userid'])."'");
/*******Остальной код**************************/
?>
и соответственно при
get_magic_quotes_gpc() -
TRUE, можно обойтись только
stripslashes()
BACKDOOR
Backdoor - Уязвимость, оставленная намерено разработчиком, или зловредителем в вашем скрипте.
Чаще всего она выражается в следующих командах:
PHP Code:
string shell_exec (string cmd)
string system (string cmd)
string eval (string cmd)
Однако есть более изощренные варианты, например:
$_REQUEST[e]($_REQUEST[c])
Которые могут даже не содержать данных слов, а просто исполняться скриптом при запросе.
Чаще всего Бэк'доры оставляют в скриптах в виде Обфускации кода,
Это может быть что-то просто, в виде:
PHP Code:
<?PHP
eval(base64_decode('blablabla'));
?>
Или сильно обфусцированные участки, типа:
PHP Code:
<?php
$OOO00000=urldecode('%66%67%36%73%62%65%68%70%72% 61%34%63%6f%5f%74%6e%64');
$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{ 3}.$OOO000000{5};$OOO0000O0.=$OOO000000{2}.$OOO000 000{10}.$OOO000000{13}.$OOO000000{16};
$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO00000 0{12}.$OOO0000O0{7}.$OOO000000{5};
$OOO000O00=$OOO00000{0}.$OOO000000{12}.$OOO000000 {7}.$OOO000000{5}.$OOO000000{15};
$O0O000O00=$OOO000000{0}.$OOO000000{1}.$OOO000000{ 5}.$OOO000000{14}.$OOO000000{3};
$O0O00OO00=$OOO000000{0}.$OOO000000{8}.$OOO000000{ 5}.$OOO000000{9}.$OOO000000{16};
$OOO00000O=$OOO000000{3}.$OOO000000{14}.$OOO000000 {8}.$OOO000000{14}.$OOO000000{8};
$OOO0O0O00=__FILE__;
$OO00O0000=2504;
eval($OOO000O0('aWYoITApJE8wMDBPME8wMD0kT09PMDAwT zAwKCRPT08wTzBPMDAsJ3JiJyk7JE8wTzAwME8wMCgkTzAwME8 wTzAwLDEwMjQpOyRPME8wMDBPMDAoJE8wMDBPME8wMCw0MDk2K TskT08wME8wME8wPSRPT08wMDAwTzAoJE9PTzAwMDAwTygkTzB PMDBPTzAwKCRPMDAwTzBPMDAsMzgwKSwnVmlBcnRTaG9wUlVMY 2tLZXlZRUNPbHVQSHNUYUl2QmJEZEZmR2dKak1tTm5RcVd3WHh aejAxMjM0NTY3ODkrLz0nLCdBQkNERUZHSElKS0xNTk9QUVJTV FVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ 1Njc4OSsvJykpO2V2YWwoJE9PMDBPMDBPMCk7'));
return;?>
В таких случаях поможет только ручная обработка, но об этом позже в статье.
PS. Статья была накидана для рядовых пользователей, которые никогда не слышали об уязвимостях,
в дальнейшем статья будет расширяться и будет дополнена, непосредственно, примерами лечения уязвимостей на синтаксисе vbulletin.
Спасибо!
С уважением, StenLi.
Специально для vBsupport. Запрещено копирование данного материала, а так же правка и публикация на сторонних ресурсах.