Print This Post Прокси-ботнет из роутеров

Пятница, 30. Март 2012
Раздел: C/C++, Linux, PHP, автор:

В 2010 году, в период тестирования SSH Bruteforce'a одним хорошим человеком, я узнал, что на Европейских диапазонах IP-адресов попадается приличное количество SSH-доступов к всевозможным роутерам. Наиболее частыми среди них оказались роутеры с MIPS-процессором и известной кастомной прошивкой DD-WRT.
Казалось бы, особой пользы с них не извлечь, но ещё тогда был предложен вариант использования их в качестве прокси. До тестирования концепции на тот момент руки не дошли, а сегодня я как раз разбирал старые архивы и решил попробовать собрать рабочий пример под подобный роутер. Благо, у меня валяется парочка таких. Стоит отметить, что поднятие прокси-серверов на роутерах также обладает всем известной спецификой, которая заключается в том, что у провайдеров часто используются динамические IP, поэтому, естественно, прокси-сервер должен сообщать свой текущий IP некой веб-админке.

В качестве прокси-сервера я остановился на Satanic Socks Server: RDot edition, но с самодельной модификацией, которая добавляет периодические веб-запросы к админке, чтобы отслеживать актуальный IP роутера. В этой реализации нет поддержки доступа по паролю (актуально, если вам необходим некий пул прокси, чисто для себя), но в более старых версиях она есть, и любой при желании сможет её добавить. Итак, немного дефайнов:

Метод, совершающий веб-запросы:

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

Все, измененный код сокс-сервера готов.
Теперь очередь админки. Писать будем на PHP, админка будет очень простой и будет обладать следующими возможностями: запись содержимого REMOTE_ADDR в файл, вывод списка доступных прокси по паролю. Исходный код админки:

Чтобы файл с прокси не был доступен из веба, следует в директории с пхп-скриптом создать файл .htaccess со следующим содержанием:

На данном этапе перед нами стоит задача сборки прокси-сервера под MIPS архитектуру и дальнейшая загрузка получившихся бинарников на роутеры, а также прописывание их в автозапуск (вдруг роутер перезагрузится). Для сборки необходимо настроить среду кросс-компиляции. Тут можно пойти двумя путями: либо найти готовый toolchain, либо сделать его самому. Так как мне было лень что-то там собирать, то я просто скачал готовые тулчейны по адресу: ftp://dd-wrt.com/others/sourcecode/toolchains/current-toolchains.tar.bz2 и закинул их на 64-битную виртуальную машину с Ubuntu. Далее я пользовался компилятором из директории toolchain-mipsel_3.3.6*. Компилируется все без особых проблем, поэтому подробно освещать этот аспект не буду. Могут возникнуть проблемы совместимости с некоторыми роутерами, но, в принципе, никто не мешает скомпилировать несколько вариантов бинарников и реализовать несложный алгоритм определения версии прошивки и ядра ОС, а потом загружать соответствующий бинарник.

Теперь напишем простой скрипт, который будет загружать получившийся бинарник на роутер, добавлять его в автозапуск и запускать. Также скрипт будет выполнять ещё несколько полезных команд, которые необходимы, чтобы все нормально работало под DD-WRT. Для работы скрипта нам понадобится модуль Net::SSH::Perl и один из следующих модулей: Math::BigInt::GMP / Math::BigInt::Pari / Math::BigInt::BitVector. Исходный код:

Абсолютные пути в массиве @cmds обусловлены особенностью устройства модуля Net::SSH::Perl. При исполнении очередной команды он как бы не дожидается возврата управления консоли и исполняет очередную команду в отдельном "инстансе".
Комплект готов, теперь любой из Вас сможет с пользой утилизировать добытые доступы к роутерам и, может быть, организовать свой сервис по продаже прокси.

Исходные коды: скачать

 Обсудить на форуме


Получать обновления на почту:     

Комментариев: 56 к “Прокси-ботнет из роутеров”


  1. Signal :

    ну и как gdb юзать на модеме?

    [Ответить]

    Kaimi:

    Скачать исходный код gdb, собрать под модем, скопировать на модем, юзать

    [Ответить]


  2. Signal :

    ))думаю сам процесс сборки под модем, замет больше времени, чем сделать рабочий прокс)))

    [Ответить]


  3. Signal :

    пробовал отдельно компилить твою функцию do_requst без прокса, все пашет нормально, модем юзаю свой Glitel GT-5802W
    почему прокс нечитает из сокета в thread хрен пойму

    [Ответить]

    Kaimi:

    да поможет тебе отладчик под модемом

    [Ответить]


  4. Signal :

    Так я не допонимаю, как его там собрать?

    [Ответить]

    Kaimi:

    google -> cross-compiling gdb mips

    [Ответить]


  5. Nub :

    добрый день ! В чем может быть трабла? Can't locate object method "new" via package "Net::SSH::Perl" (perhaps you forgot to load "Net::SSH::Perl"?) at /root/Desktop/skript.pl line 39, line 1.

    [Ответить]

    Kaimi:

    В том что you forgot to load "Net::SSH::Perl"

    [Ответить]


  6. Nub :

    А подскажи на какой системе ты ставил модуль Net::SSH::Perl ?

    [Ответить]

    Kaimi:

    Ubuntu 9.04

    [Ответить]


  7. Nub :

    пишет ошибку в 38 строчке как исправить именно , (p.s Net::SSH::Perl установил)

    [Ответить]

    Kaimi:

    Ясное дело, что никак

    [Ответить]


Оставьте ваш комментарий