Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
[ Обзор уязвимостей DX Board ] |

19.04.2008, 20:17
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме: 4137635
Репутация:
2407
|
|
[ Обзор уязвимостей DX Board ]
Спасибо всем, кто тестил и нашёл ошибки в движке, а я выкладываю его исходники, как и обещал. Скачать можно тут:
http://dxboard.ru/DX%20Board%202.1.13.zip
На сайте http://dxboard.ru по-прежнему можно проводить тесты, писать отзывы и т.д.
Ставить форум так: заливаем на хост все файлы и папки из архива и обращаемся к index.php.
Думаю, в ближайшее время напишу доки, как создавать новые оформления. Кстати, форум работает исключительно с windows-1251.
P.S. Для тех, кто не в теме: https://forum.antichat.ru/thread67620.html
Описание движка:
http://dxboard.ru/viewtopic.php?id=3
Жду ваших мнений 
Последний раз редактировалось d_x; 27.04.2008 в 00:41..
|
|
|

19.04.2008, 23:38
|
|
Постоянный
Регистрация: 11.11.2006
Сообщений: 834
Провел на форуме: 3941248
Репутация:
668
|
|
preg_match("/^(\d)+$/",$uid) === is_numeric
думаю хорошо бы было еслиб ты раставил все фалы по папкам как в ВБ
и можно также сделать перaиксы для файлов .. типо
function_db.php
Последний раз редактировалось Doom123; 19.04.2008 в 23:55..
|
|
|

20.04.2008, 00:42
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме: 4137635
Репутация:
2407
|
|
Ну, is_numeric в общем то не совсем то же, что и preg_match("/^(\d)+$/",$uid), так как
is_numeric возвратит true, если передать, например, число 0.123, или -123, или 5e10, или даже 0xFF. А регулярка только цифры пропускает.
думаю хорошо бы было еслиб ты раставил все фалы по папкам как в ВБ
и можно также сделать перaиксы для файлов .. типо
function_db.php
Да, исходники не в лучшем виде, как я и говорил, но если сейчас начать файлы сортировать и переименовывать - то это наверняка будет куча ошибок, они же друг на друга ссылаются многие.
Последний раз редактировалось d_x; 20.04.2008 в 00:44..
|
|
|

24.04.2008, 14:01
|
|
Постоянный
Регистрация: 12.04.2008
Сообщений: 403
Провел на форуме: 4700216
Репутация:
261
|
|
Хороший движок! афтару респект поюзайем)
|
|
|

26.04.2008, 01:15
|
|
Banned
Регистрация: 05.12.2005
Сообщений: 982
Провел на форуме: 4839935
Репутация:
1202
|
|
Результаты проверки на безопасность.
Тестирование на XSS атаки не проводилось.
===================================
DX Board 2.1.12 final
===================================
Дефолтные настройки:
Database: dxboard
Table prefix: dx_
Admin login: admin
Желательно сделать немного рэндомными или оставить пустыми и добавить проверку на пустоту, чтоб пользователь заполнял при установке сам.
===================================
Основные настройки с низким уровнем безопасности по дефолту.
Желательно отключить:
[v]Разрешать регистрироваться пользователям с повторными адресами e-mail
[v]Разрешить незарегистрированным пользователям просматривать профили
[v]Разрешить незарегистрированным пользователям просматривать список пользователей
[v]Разрешить незарегистрированным пользователям просматривать список групп пользователей
[v]Разрешить незарегистрированным пользователям просматривать онлайн-статистику
[v]Разрешить незарегистрированным пользователям пользоваться поиском
[v]Разрешать незарегистрированным пользователям читать чат
[v]Разрешить модераторам менять авторов сообщений и тем
Рекомендую добавить настройку регулировку длинны сообщения из админки. Сейчас отведено строго 150 символов на сообщение.
===================================
Система контроля целостности файлов.
Следит только за .php фалайми. Необходимо отслеживать ВСЕ файлы в каталогах.
Мне ничто не мешает загрузить в /dxsmiles вебшелл lol.png и .htaccess с содержимым:
Код HTML:
<Files lol.png>
AddType application/x-httpd-php .png
</Files>
===================================
ereg() NULL-byte bypass
Движок форума на ~90% полагается в защите на ereg(),eregi() , которые не совместимы бинарно
и потому уязвимы к нулл-байту, прекращая обработку строки при встрече с ним.
Форум уязвим при magic_quotes=OFF.
Необходимо заменить эти функции на preg_match().
Например этот URL-эксплоит меняет пароль администратора:
/lostpass.php?dat=2&code=12345678901234567890123456 789012&nick=h4ck%00'+or+nick='admin'/*
===================================
Движок форума потенциально уязвим к возможным новым уязвимостям,
поскольку нет защиты от register_globals=ON что дает возможность определить неопределенные переменные,
а также magic_quotes=OFF что дает потенциальную уязвимость к SQL-атакам.
Рекомендуеццо сделать следующее:
[1] Самый простой способ - положить в корень .htaccess с содержимым:
Код HTML:
# Security
php_flag safe_mode on
php_flag register_globals off
php_flag magic_quotes_gpc on
[2] Однако 1й способ не всегда работает.
Желательно внести небольшие изменения в код:
1) При фиксе register_globals=ON возникает проблема с сохранением админской сессии. Не разбирался почему.
Вызвать в начале headers.php:
PHP код:
if(@ini_get('register_globals')) run_unset();
function run_unset() {
if ( isset($_REQUEST['GLOBALS']) ) die('GLOBALS overwrite attempt detected');
$nounset = array('GLOBALS', '_GET', '_POST', '_COOKIE', '_REQUEST', '_SERVER', '_ENV', '_FILES', '_SESSION', 'nounset','input');
$input = array_merge($_REQUEST, $_FILES);
foreach ( $input as $k => $v )
if ( !in_array($k, $nounset) && isset($GLOBALS[$k]) ) {
$GLOBALS[$k] = NULL;
unset($GLOBALS[$k]);
}
}
2) При фиксе magic_quotes=OFF будет необходимо заменить вызовы "if(ini_get('magic_quotes_gpc')==1)" на "if(1)" в common.php, backup.php, adminmain.php
Вызвать в начале headers.php:
PHP код:
if (!@get_magic_quotes_gpc())
{
function addslashes_deep($value)
{
$value = is_array($value) ? array_map('addslashes_deep', $value) : addslashes($value);
return $value;
}
$_GET = array_map('addslashes_deep', $_GET);
$_POST = array_map('addslashes_deep', $_POST);
$_COOKIE = array_map('addslashes_deep', $_COOKIE);
$_REQUEST = array_map('addslashes_deep', $_REQUEST);
}
===================================
Недостаточная проверка имени файла.
Дело в том, что файл вида lol.php.jpg в некоторых случаях обрабатывается апачем как пхп.
В аттачах(lol.php.zip)
/files.php
Тоже самое с аватарами и галереей(lol.php.jpg)
/profile.php
===================================
Аттакующий, имея привилегии администратора, может загрузить вебшелл как смайл.
Недостаточная проверка имени файла, точнее её полное отсутствие.
Валидный смайл с шелом в EXIF-тэгах прилагается.
/adminsmiles.php
PHP код:
if(!copy($_FILES["sfile"]["tmp_name"],"dxsmiles/".$_FILES["sfile"]["name"]))
{
@unlink($_FILES["sfile"]["tmp_name"]);
redir("<span class='err'>{$lang['txt970']}!</span>","adminsmiles.php");
}
===================================
Аттакующий, имея привилегии администратора, может выполнить произвольный пхп-код,SQL-команды,создать произвольные файлы,
используя фиктивный сервер обновлений форума.
Необходимо установить пароль для смены адреса сервера.
Эксплоит прилагается в аттаче.
/update.php
Формат команд
PHP код:
preg_match_all("/>>>>>EVAL<<<<<(.+)>>>>>ENDEVAL<<<<</isU",$ans,$evlist);
preg_match_all("/>>>>>SQL<<<<<(.+)>>>>>ENDSQL<<<<</isU",$ans,$sqllist);
preg_match_all("/>>>>>FILE<<<<<:::::(\S+):::::(.+)>>>>>ENDFILE<<<<</isU",$ans,$fllist);
===================================
SQL-inj возможна для забанненого пользователя =))
NEED: magic_quotes=OFF
/index.php?PHPSESSID='[SQL-inj-more1row]
PHP код:
if(!isset($PHPSESSID) && isset($_REQUEST['PHPSESSID'])) $PHPSESSID=$_REQUEST['PHPSESSID'];
if(!isset($PHPSESSID)) $PHPSESSID=session_id();
if(!isset($_SESSION['username']))
{
if(mygetcookie('username') && mygetcookie('pass'))
{
if(!ereg("[{$lang['nickletters']}]",mygetcookie('username')) && !ereg("[^a-f0-9]",mygetcookie('pass')))
$result=@dbquery("select * from ".$pref."dxusers where nick='".mygetcookie('username')."' and pass='".mygetcookie('pass')."'");
else
$result=0;
if($result)
{
if(@dbnumrows($result)>0)
{
$uid=dbresult($result,0,'id');
$utp=dbresult($result,0,'usertype');
if((!checkban($uid) && @dbresult($result,0,'activated')==1) || $utp==1)
{
if(!@dbquery("delete from ".$pref."dxsessions where sess='$PHPSESSID' or uid=$uid"))
===================================
Читалка файлов.
Работает при отключенном интеллектуальном изменении изображений(по дефолту включено)
Меню->Основные настройки->
[ ]Применять интеллектуальное изменение размеров изображений gif, jpeg и png форматов
/check.php?act=2&addr=../../../../../../../etc/passwd
/check.php
PHP код:
$act=isset($_POST['act']) ? $_POST['act'] : 0;
if(!$act)
{
$act=isset($_GET['act']) ? $_GET['act'] : 0;
}
switch($act)
{
case '2':
$addr=isset($_GET['addr']) ? $_GET['addr'] : '';
if(get_param('imgresize')=='0')
@readfile($addr);
===================================
|
|
|

26.04.2008, 01:34
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме: 4137635
Репутация:
2407
|
|
Вот это супер просто, спасибо огромное! Буду патчить
1) При фиксе register_globals=ON возникает проблема с сохранением админской сессии. Не разбирался почему.
Админская сессия сбрасывается после просмотра сообщений, поиска, чтения приватных сообщений и т.д. Это сделано для того, чтобы админ случайно не нажал на подсунутую левую ссылку и не произвёл так что-нибудь плохое в админке.
Система контроля целостности файлов.
Следит только за .php фалайми. Необходимо отслеживать ВСЕ файлы в каталогах.
Думал над этим, но если сделать полную проверку, то замучаешься следить за загружаемыми пользователями аватарами, файлами и рисунками...
SQL-inj возможна для забанненого пользователя =))
Этот кусок наоборот за незабаненных отвечает
Насчёт XSS - как раз к этому моменту нашёл ещё парочку с register_globals=on, тоже пофиксю
А по поводу сервера обновлений - я его вообще переписать полностью думаю, а пароль на изменение добавлю.
Последний раз редактировалось d_x; 26.04.2008 в 01:50..
|
|
|

26.04.2008, 02:03
|
|
Постоянный
Регистрация: 11.11.2006
Сообщений: 834
Провел на форуме: 3941248
Репутация:
668
|
|
Elekt Зверь! Вот что значит человек знает своё дело +) я когда смотрел форум думал что движок не пробить а тут оказывается ...
|
|
|

26.04.2008, 03:04
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме: 4137635
Репутация:
2407
|
|
Понял, почему сессия админская не начиналась, если фиксить register_globals. Скрипт, который вставляется в начало всех исходников, просто удалял все переменные (даже неглобальные), которые передавались из cookies. Например, удалялась переменная $_SESSION['username'], потому что $username было определено и бралось из cookies.
Вот более правильный код:
PHP код:
if(@ini_get('register_globals'))
{
if(isset($_REQUEST['GLOBALS'])) die('GLOBALS overwrite attempt detected');
$nounset=array('GLOBALS','_GET','_POST','_COOKIE', '_REQUEST','_SERVER','_ENV','_FILES','_SESSION', 'nounset','input');
$input=array_merge($_REQUEST,$_FILES);
foreach($input as $k=>$v)
{
if(!in_array($k,$nounset) && isset($GLOBALS[$k]))
unset($$k); //удаляем ТОЛЬКО глобальную переменную. Остальные массивы типа $_SESSION не трогаем
}
}
|
|
|

27.04.2008, 00:40
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме: 4137635
Репутация:
2407
|
|
Ну, вроде бы всё поправил, форум снова доступен по адресу http://dxboard.ru, скачать новую версию можно тут: http://dxboard.ru/DX%20Board%202.1.13.zip
Код:
[2.1.13]
-Ликвидированы SQL-инъекции в файлах login.php и headers.php при логине пользователя
-Исправлена уязвимость чтения файлов при выключенном авто-изменении размера изображений в теге [img]
-Добавлена защита при register_globals=on
-Усилена проверка имён файлов и изображений пользователя при загрузке, добавлена проверка расширений изображений в галерее и аватаров
-В инсталлаторе убраны поля по умолчанию, добавлена генерация рандомного префикса имён таблиц
-Усилены настройки безопасности форума по умолчанию
-Все регулярные выражения POSIX заменены на PCRE
[new] Перезагрузка капчи по клику на ней
-Добавлена проверка длины тем в приватных сообщениях и названий сообщений
[new] Теперь администратор может указать максимальную длину сообщения
[new] Теперь длинные строки без разрывов (длина указывается администратором) искусственно дополняются пробелами (HTML теги не трогаются)
[new] Теперь для работы с обновлением форума можно задать пароль
-Изменён движок системы обновлений форума
-Исправлена ошибка при удалении смайлов администратором
[new] Теперь можно выбрать контроль целостности всех файлов, или только файлов, содержащих в имени подстроку ".php"
Скоро выложу мануал по созданию оформлений для форума и сделаю нормальный сайт с сервером обновлений
Последний раз редактировалось d_x; 27.04.2008 в 01:45..
|
|
|

27.01.2009, 18:44
|
|
Познающий
Регистрация: 02.06.2008
Сообщений: 35
Провел на форуме: 29238
Репутация:
5
|
|
не работает капча и не показывает картинки в постах. в чем может быть проблема?
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|