Socks5 Server

Решил сделать небольшую поделку на основе двух существующих socks-серверов на perl'e. За основу были взяты sss и rdss.
Отличия:
[~] Вместо форка использованы треды
[~] Предварительно формируется пул потоков для обработки запросов
[~] Модуль MD5 выкинут, соответственно, пароль вводится в открытом виде
[~] Использует модуль IO::Select (эдакое мультиплексирование)
[~] Более читабельный код

В общем, надеюсь, кому-нибудь пригодится.
Скачать: serv.pl
GitHub: socks5-proxy-server

Модуль для работы с Web

Написал простой модуль для работы с web. Модуль довольно легкий, основан на IO::Socket::INET и IO::Socket::SSL.

Конструктор:
new()
new(arg => value, arg => value)

  Создает объект, который используется для дальнейших запросов. Доступные аргументы: agent (user-agent, который будет использоваться в запросе), timeout (таймаут соединения).

Методы:
set_cookie($arg)
  Устанавливает аргумент в качестве кукисов.

header(%arg)
  Устанавливает дополнительные заголовки.

proxy_auth($login, $passw)
  Устанавливает логин и пароль для авторизации при работе с http-прокси.

socks_auth($login, $passw)
  Устанавливает логин и пароль для авторизации при работе с socks-прокси.

proxy($proxy_type, $proxy)
  Включает работу через прокси.
  $proxy_type может принимать следующие значения: 0 - без прокси, 1 - http-прокси, 2 - socks5 прокси.
  $proxy в формате ip:port

request($method, $host, $port, $uri, $payload, $limit)
  Метод для непосредственного выполнения запроса
  $method - GET, POST, HEAD,
  $host - адрес сайта с http:// (например, http://rambler.ru),
  $port - порт,
  $uri - путь запроса (например, /index.php),
  $payload - тело POST-запроса,
  $limit - количество байт, которые необходимо считать из сокета (0 - считать весь ответ).

Примеры работы с модулем
Получение веб-страницы в переменную и вывод содержимого ответа на экран:

Работа через прокси:

POST запрос через прокси:

Скачать: web.pm

Simple Engine Scanner

Simple Engine Scanner - инструмент для автоматического сканирования веб-сайтов на наличие уязвимостей по заранее созданной базе. Инструмент состоит из двух частей: скрипт для определения уязвимостей (Perl) и программа на C# для облегченного создания базы уязвимостей, которую этот скрипт использует.

База представляет собой XML-документ. Описывать структуру не буду, сделаю некоторые пояснения по программе, которая позволяет эти XML'ки редактировать.
(База-пример лежит в архиве, ее можно открыть и полистать для того, чтобы понятнее было.)

База содержит информацию о движках для проверки. Можно добавлять новые. Каждый движок имеет секцию "Соответствие", в которой задаются критерии, по которым двиг будет идентифицирован. Эта секция позволяет делать запросы, проверять наличие файлов на сайте, проверять, присутствуют ли заданные строки в полученном запросом контенте и проверять его соответствие заданными регулярными выражениями. Можно задать число необходимых совпадений для идентификации движка.
Секции движков также содержат подраздел "Модули", куда можно добавлять уязвимости модулей движка. Имеется такая же секция соответствия (она тут вполне может быть пустой). Можно добавить системную секцию для создания временных переменных, необходимых для тестирования модуля. Созданные переменные можно использовать для тестирования текущего модуля - они вставляются с помощью фигурных скобок, например, {myvar}. Вставка работает в запросах, в данных POST-запросов, в Cookies, в именах и описаниях уязвимостей. Обязательно парсите переменную перед тем, как ее использовать. Системная секция выполняется перед всеми остальными запросами модуля, и поэтому может быть только одна. В секцию модуля можно также добавлять уязвимости, которые опять-таки детектируются с помощью уже знакомых соответствий.

В программе редактирования БД после изменения параметров не забудьте нажать кнопку "Сохранить", а после завершения редактирования - "Сохранить БД...".

Теперь немного о скрипте для проведения тестирования.
Запускается он следующим образом:

check.pl http://example.com/forum vuln_xml_file delay log_type log_file

Первый параметр - сайт для тестирования, vuln_xml_file - имя базы, по которой будет проводиться тестирование, delay - задержка между запросами, log_type - тип логирования (0 - простой вывод в консоль краткой информации, 1 - вывод в консоль и также запись лога в файл log_file, 2 - вывод в консоль краткой информации и в файл полной информации с найденными уязвимостями и информацией о них (этот режим и рекомендуем)).

Опциональные параметры:
-encoding
Примеры использования:
-encoding=auto - автоопределение кодировки сайта;
-encoding=enc (например, -encoding=utf8) - явное задание кодировки сайта.

-redirect404
Если она указана, то 301 и 302 редиректы будут считаться за страницу 404. Полезно, например, при работе с хостингом majordomo. Если она не указана, то скрипт теперь автоматически определит, стоит ли считать 301 и 302 редиректы за страницу 404. Стоит заметить, что такие вещи работают только с HEAD-запросами (и как раз с проверками существования файлов).

Также в скрипте есть строки, позволяющие при необходимости задать http-прокси или socks5 для проведения запросов:

#Proxy
my $proxy = '127.0.0.1:8080';
#0 - no proxy; 1 - http; 2 - socks5
my $ptype = 0;

Скачать: simple engine scanner

Simple mp3 broadcaster

Простой консольный скрипт на Perl'е для вещания mp3 потока в сеть. Проигрывает треки случайным образом из заданной директории.

Желающие также могут воспользоваться .bat файлом и netcat для этих целей:

Скачать: pl+bat

Small VK notifier

Небольшой скрипт на перле, уведомляющий о новых сообщениях в ВКонтакте.
Настройка через примитивный интерфейс:

Для работы необходим модуль Win32::GUI.

Скачать: vkmon

P.S.
Обновил Yet Anoter Odnoklassniki Sender (добавил поддержку антикапчи, макрос <<smile>>): Скачать
И несколько сигнатур для патчера: Скачать

Mini Facebook Sender

Написал небольшой скрипт рассылки по фейсбуку

[!] На данный момент шлет только по друзьям
[+] Многопоточность
[+] Антикапча
[+] Ротация сообщений
[+] Автообновление

Настройка скрипта производится в файле config.cfg.
Скрипт практически не тестировался. Обо всех ошибках и пожеланиях просьба сообщать в комментариях.

P.S. Если используете аккаунты, не подтвержденные по смс, то будет много капчи.

Скрипт: скачать

Конкурс ВКонтакте

В последнее время ВКонтакт стал регулярно проводить конкурсы, суть которых состоит в приглашении "друзей" на сайт.
Я решил посмотреть, какие возможности для приглашения существуют. Навскидку можно выделить следующие способы:

- покупка зарубежного траффика
- реклама на зарубежных сайтах
- приглашение средствами контакта

Так как траффик покупать невыгодно (хотя, если сделать хороший лендинг под такое, то будет больше толку), а сайта с зарубежной аудиторией у меня не имеется, то остался только третий вариант.

Пригласить друзей через вконтакт можно двумя способами: личное приглашение на одиночный email и типовые приглашения по контакт-листу заданного почтового ящика (массовый импорт контактов).

Первый способ показался мне слишком медленным, так как контакт лимитирует частоту обращения к своим страницам, то реальная скорость получается ~2-3 приглашения в секунду. Второй способ позволяет отправлять типовые сообщения по списку email'ов, то есть скорость возрастает на несколько порядков (я пробовал отправлять по 500 приглашений за один запрос с задержкой 400 мс).

Для второго способа написал небольшой скрипт на perl, автоматизирующий данный процесс (приглашения рассылаются по заданной базе емейлов). Приглашения приходят с некоторой задержкой, однако, в процессе проведения теста по моим приглашениям зарегистрировалось примерно 100 человек.

Скрипт: скачать

P.S. Не забудьте сменить язык на английский в настройках Вашего аккаунта.

SSH tool

Недавно возникла необходимость выполнять команды через SSH на множестве машин, для этого набросал небольшой скрипт на основе модуля Net::SSH::Perl.
Скрипт идет по списку ip адресов, пытается авторизоваться, перебирая пары логин:пароль, при удачной авторизации выполняет указанную команду и записывает результат выполнения в файл.

Если возникнет проблема с установкой модуля Net::SSH::Perl, то попробуйте предварительно установить один из следующих модулей:
Math::BigInt::GMP
Math::BigInt::Pari
Math::BigInt::BitVector

Скрипт: скачать

Yet Another Vkontakte Sender

Давно ничего не писал в блог, поэтому решил набросать скрипт рассылки по ВКонтакту.

Возможности:
[+] Многопоточность
[+] Рассылка по друзьям и диапазону
[+] Отправка сообщений на стену, в ПМ, заявку в друзья
[+] Установка лимита сообщений с одного аккаунта (при работе с диапазоном)
[+] Смена статуса
[+] Подстановка имени получателя
[+] Рандомизация сообщений (замена символов, добавление мусора, замена имен)
[+] Антикапча

Скрипт: скачать

Update 13.11.09:
[+] Исправил некоторые недочеты
[+] Добавил возможность рассылки статичных граффити по стенам

Скрипт: скачать

Update 26.12.09:
[~] Для работы необходим модуль JavaScript

Скрипт: скачать

Update 28.12.09:
С наступающим Новым Годом.
Скрипт: скачать

Update 07.01.10:
Скрипт: скачать

Оптимизация в Perl

Очевидные вещи

Ищите лучшие алгоритмы

Допустим, код выполняется с максимальной эффективность с Вашей точки зрения. Но, может быть, кто-то подошел к данной проблеме с совершенно другой стороны и нашел алгоритм, работающий в сотни раз быстрее. Вы уверены, что используете лучший алгоритм? Воспользуйтесь поисковиком, возможно, вам удастся найти лучшее решение.

mod_perl

Использование mod_perl может ускорить выполнение скрипта в 10 раз. Если Ваш скрипт по каким-либо причинам не работает под ним, то существует fastcgi. Или, возможно, Вам подойдет модуль PPerl, позволяющий превратить скрипт в практически полноценный “демон”.
Читать далее «Оптимизация в Perl»