Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #108, ДЕКАБРЬ 2007 г.

Большой FAQ

Евгений «Corwin» Ермаков

Степан «Step »Ильин (faq@real.xakep.ru)

Хакер, номер #108, стр. 108-138-1

Q: Как запустить эксплойт с расширением py? Что это вообще за зверь?

A: Это сплоит, написанный на Python'e. Запускается он аналогично эксплойтам, написанным на Perl'e, PHP. Скачать интерпретатор можно отсюда: http://python.org/download.

Q: Стал использовать утилиту для поиска ошибок/уязвимостей в исходниках, но десятки строчек, которые мне выдает программа и в которых якобы имеются уязвимости, нереально проверить самому. Как правило, в большей части выданных строк ошибок нет вообще. Как быть?

A: Для анализа сорцов я сам пользуюсь утилитой под названием RATS - Rough Auditing Tool for Security. В readme ясно сказано, что пользователь (посредством ключа ‘-w’) может указать warning-левел (1-3), то есть чувствительность утилиты к различным уязвимостям:

  • 1 - уровень по дефолту, самый высокий;
  • 2 - средний;
  • 3 - низкий уровень.

К примеру, пишем в командной строке:

rats.exe script.php -w 3

Таким образом, мы указываем программе, что нужно выводить предупреждения об ошибках, имеющих низкий уровень опасности.

Q: Есть желание устраивать торги на eBay'e, но люди говорят, что потребуются «фиды». Что это такое?

A: Feedback (он же фид) - это отзыв селлеров (продавцов)/баеров (покупателей) о eBay-аккаунте. Имея большое количество отзывов, ты имеешь больше шансов продать свой товар на аукционе.

Q: На определенном сайте, где запрещена регистрация более чем с одного IP-адреса, мои акки постоянно банят, но ведь я при этом использую прокси. Как такое может быть?

A: Не все прокси одинаково полезны :). Возможно, ты вообще заюзал прозрачные прокси-серверы. Вспомним основные переменные окружения, которые мы передаем конечному серверу:

  • HTTP_USER_AGENT - применяемый клиентом браузер и его версия (MSIE 6.0, к примеру);
  • HTTP_ACCEPT_LANGUAGE – язык, используемый браузером;
  • HTTP_HOST - название сервера;
  • REMOTE_ADDR - IP-адрес пользователя;
  • HTTP_VIA – если значение есть, следовательно, используется проксик. Это значение - адрес (или несколько адресов) прокси-сервера.
  • HTTP_X_FORWARDED_FOR - если эта переменная не пустая, значит используется прокси. Значение - реальный адрес юзера (IP).

Так вот при использовании прозрачного прокси, переменные окружения приобретают такой вид:

REMOTE_ADDR = IP прокси

HTTP_VIA = IP прокси

HTTP_X_FORWARDED_FOR = твой реальный IP

Какая-либо анонимность при таком раскладе отсутствует напрочь.

Может быть, на сервере в принципе запрещено использовать прокси, и поэтому банятся абсолютно все пользователи, юзающие таковые. Как и прозрачные, анонимные прокси не скрывают факт своего применения. При их использовании также заданы переменные окружения, которые их выдают (HTTP_VIA, HTTP_X_FORWARDED_FOR):

REMOTE_ADDR = IP прокси

HTTP_VIA = IP прокси

HTTP_X_FORWARDED_FOR = IP прокси

Самыми надежными и по-настоящему анонимными являются элитные прокси-серверы, которые не выдают ни реальный IP-адрес клиента, ни факт самого использования прокси. Заголовок становится таким:

REMOTE _ADDR = IP прокси

HTTP_VIA = не определена

HTTP_X_FORWARDED_FOR = не определена

Но кроме проверки переменных окружения есть другие методы пробива реального IP-адреса юзера или факта использования прокси. Cookies, например. Представь такую ситуацию: ты впервые заходишь на сайт без всяких прокси, и сервер записывает твой реальный IP тебе же в кукисы. В следующий раз ты уже заходишь на сайт, накрывшись проксиком, а сервер проверяет ранее созданные куки с записанным IP и сравнивает его с текущим значением. Ip-адреса, естественно, не совпадают, и ты идешь в БАНю :). Поэтому следует либо чистить созданные cookies'ы, либо запретить их вообще. Также очень рекомендую отключить в браузере Java и ActiveX.

Q: Еще я слышал про некие искажающие прокси? Как они работают?

A: Это те же самые анонимные прокси, только реальный IP клиента скрывается от конечного сервера:

REMOTE_ADDR = IP прокси

HTTP_VIA = IP прокси

HTTP_X_FORWARDED_FOR = случайный IP

Но надо сказать, встречаются такие прокси довольно редко.

Q: Как запретить чтение файлов в MySQL?

A: Открываем файл /etc/my.cnf и в разделе [mysqld] пишем такую строку:

set-variable=local-infile=0

Q: Как определить, что при SQL-injection я работаю с MS Access?

A: В ответе сервера будет либо примерно такая строка: «[Microsoft][ODBC Microsoft Access Driver]», либо такая: «Syntax error in string in query expression ...».

Q: А как, собственно, выдирать из MS Access названия таблиц?

A: Рассмотрим конкретный пример. Названия всех таблиц хранятся в системной таблице MSysObjects:

http://target/?newsitem=-1+union+select+name,2,3,4,5,6+from+MSysObjects+where+MSysObjects.Type=5

На запрос получаю ответ сервера: «Ошибка Record(s) cannot be read; no read permission on 'MSysObjects' на тэге NEWSITEM». И это нормально - по умолчанию доступ к системным таблицам закрыт.

Представим, что нам удалось получить доступ к таблице MSysObjects. Тогда для вытаскивания остальных таблиц следует использовать оператор TOP:

http://target/?newsitem=-1+union+select+top+1+start+at+2+name,2,3,4+from+MS ysObjects+where+MSysObjects.Type=6

Про остальные триксы в Ms Access читай в MS Access SQL Injection Cheat Sheet (http://www.webapptest.org/ms-access-sql-injection-cheat-sheet-EN.html).

Q: Как быть, если SQL-injecion находится в INSERT-запросе. СУБД MSSQL?

A: Предположим уязвимый сценарий выполняет такой запрос:

insert into articles values($id, 'message');

Тогда мы внедряем свой запрос и с помощью оператора комментария ("#"), отсекаем последующий запрос:

insert into articles values(123, (select collumns from table where id=1))#, 'message');

Q: Есть подозрения, что мой сервер взломали и протроянили некоторые файлы. Как это определить?

A: В предыдущем FAQ'e мы уже писали, что взломщик легко может указать собственную дату последнего изменения файлов, поэтому следует проверить контрольные суммы возможно протрояненных файлов. Само собой, у тебя должны быть заранее записаны чексуммы «чистых» файлов (команда md5sum /dir/* >> /home/user/file; file - название файла, в который мы записываем все чексуммы файлов, расположенных в директории /dir/). Для сравнения текущих чексумм с ранее записанными выполним команду md5sum -c /home/user/file. Если после этого появится список файлов и напротив каждого из них будет красоваться надпись «Success», то произведено изменений не было. Если появится ошибка - время бить тревогу.

Q: Реально ли подзаработать на HYIP-проектах? Что для этого нужно?

A: Если это было бы нереально, то на веб-форумах не было бы десятков сообщений с предложением вложить свои деньги в высокодоходный проект и стать миллионером :). Для непосвященных в реалии грязного сетевого бизнеса скажу, что HYIP - это, грубо говоря, финансовая пирамида. Основатель хайпа выплачивает лаве нескольким первым десяткам (или единицам, здесь все зависит от масштабности пирамиды) человек за счет вкладов множества других буратин, после чего весь проект пропадает. Ну а бизнес этот долгий и трудоемкий. Один раз вложить большие деньги и потом в течение нескольких лет пожинать плоды здесь не удастся.

А вот, собственно, что будет нужно: дешевый хостинг, домен(ы), лаве для мониторов, движок для всего проекта. Вкладывать деньги в дешевый хостинг мы будем потому, что его придется часто менять, так же как и домены. Кстати говоря, далеко не один хостинг предоставляет тестовый бесплатный период использования на 2-5 недель. Конечно, этого маловато для одного хайпа, но для начала сойдет.

Несколько движков для HYIP-проектов есть в свободном доступе в Сети, но я настоятельно советую написать/заказать свой, так как в любом случае код паблик-движков придется модифицировать.

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

Далее нужно задействовать традиционную рекламу: спам по мылам/аськам, рекламу на форумах. Форумы нужно выбирать специализированные (а не что-то вроде форума на xaker.ru, где целая толпа хацкеров полезет ломать твой чудо-проект :)). Рекламное сообщение, думаю, ты и сам прекрасно сочинишь. Но и здесь не обходится без обмана. Мой знакомый, который работает HYIP-бизнесе, рассказал, что после регистрации на борде он делает рассылку личных сообщений уважаемым юзерам с порядочным количеством постов (от 1500) с предложением поучаствовать в своем проекте или оставить положительный отзыв в созданной рекламной теме о проекте за энную сумму денег. Зачастую, такое предложение принимают админы и оставляют сообщение вроде «Проверено "Название_этого_крутого_форума"». Также с начала проекта следует ввести систему рефералов. Как правило, именно рефы являются самой успешной рекламой. По идее, юзеры сами будут выполнять работу по распространению рекламы.

Проект отработал, ты получил свою сотню бачей, повесил на индексной странице сообщение, что пирамидка закрывается в связи с приближением к Земле метеорита и... стал переделывать дизайн для нового хайпа :). Естественно, я описал только самые основные моменты, все подробности невозможно привести в одном FAQ'e. Поэтому работай, совершенствую свои навыки... но только на локалхосте! :)

Q: Произошел какой-то сбой в моем RAID 0 stripe массиве. Как теперь быть? Как-нибудь можно восстановить данные?

A: RAID 0 stripe – это очень мощная штука, способная феноменально увеличить производительность файловой системы. Но, к сожалению, ценой надежности хранения данных. Если полетел хотя бы один винт в массиве, можно считать, что полетели сразу все данные. Впрочем, это самый худший вариант. Предположим, что ничего подобного у нас не случилось, а просто произошла какая-то ошибка и теперь необходимо восстановить данные. Действуем по следующему алгоритму:

  1. Подключаем жесткие диски к системе (в обход RAID-контроллера, разумеется) и загружаемся с LiveCD на базе Windows, который предварительно можно создать с помощью программы BartPE (www.nu2.nu/pebuilder).
  2. Первым инструментом, который нам понадобится, будет программа RAID reconstructor (www.runtime.org/raid.htm), предназначенная для работы с RAID5 и RAID0. Функционирует она следующим образом: проходя посекторно жесткие диски, утилита путем подбора анализирует размер блока рейда и после этого создает образ массива. Можно тут же скопировать его на носитель или же создать файл-контейнер. Я рекомендую второй вариант.
  3. Когда через некоторое время, подчас довольно продолжительное, образ массива будет создан, в ход пойдет другая замечательная утилита от того же разработчика — GetDataBack for NTFS (www.runtime.org/gdb.htm). Она быстро откроет файл-образ, проанализирует его и, если повезет, выдаст внушительный список файлов, которые сможет восстановить. Причем в этот список также будут входить давно удаленные документы. Их можно отфильтровать, установив соответствующую галочку.

Q: В одном из подкастов подслушал идею авторизации с помощью телефона, а именно встроенного модуля Bluetooth. Выглядит это примерно так: как только мы подходим с телефоном в радиус действия Bluetooth-донга, вставленного в USB, компьютер тут же разблокируется и осуществляется вход в систему. А если мы выходим за этот радиус, компьютер сразу же лочится. Как это можно реализовать?

A: Все уже давно сделали для нас. Вот отличный продукт — LockItNow! (www.bluetoothshareware.com), который предоставляет в точности описанную тобой возможность. От себя скажу, что штука эта поистине впечатляющая и ей реально можно удивить друзей и подруг.

Q: Посоветуй хороший бесплатный email-сервис с поддержкой IMAP.

A: Если еще месяц назад я бы задумался над твоей просьбой, то теперь, что тебе посоветовать, знаю наверняка: gmail.com. С недавнего времени email-сервис от Google предлагает всем пользователям использовать современный протокол для приема/передачи почты. Для этого в почтовой программе достаточно указать сервер: imap.gmail.com:993 и включить SSL. Напомню, что протокол IMAP позволяет сохранять всю почту на сервере и синхронизировать ее (в том числе состояние прочитанных и непрочитанных писем) даже в том случае, если ты работаешь на разных компьютерах и клиентах. Короче говоря, прощай POP – добро пожаловать, современный IMAP!

Q: Как на старте системы подключить все нужные сетевые диски?

A: Самое правильное – сделать это с помощью следующего VB-скрипта:

Set objNetwork = CreateObject("WScript.Network")

Set oDrives=objNetwork.EnumNetworkDrives

mydrv = "U:"

mapped = false

myshare = "\\wg\nd"

For i = 0 to oDrives.Count - 1 Step 2

' WScript.Echo "Drive " & oDrives.Item(i) & " = " & oDrives.Item(i+1)

If oDrives.Item(i)=mydrv Then mapped = true

Next

'WScript.echo "mapped = " & mapped

If Not mapped Then objNetwork.MapNetworkDrive mydrv, myshare

Q: В настройках прокси есть такая галка - «Искать параметры прокси автоматически». Как это работает?

A: Автоматический поиск параметров прокси-сервера, который реализован практически во всех современных браузерах, основан на протоколе WPAD (Web Proxy Auto-Discovery Protocol). Его задача заключается в обнаружении скрипта с настройками сервера, написанными на языке JavaScript, который называется PAC (Proxy Auto Config). Для этого браузер использует DNS, DHCP и Service Location Protocol (SLP). WPAD позволяет клиентам автоматически определять настройки proxy-сервера без участия пользователя. Если у тебя включена настройка «Автоматическое определение настроек», то при подключении к интернету браузер попытается найти сервер wpad.<имя-вашего-домена>. В случае неудачи браузер будет добавлять wpad ко всем именам доменов уровнем выше (вплоть до третьего уровня). Если один из серверов все-таки найдется, то браузер в корневом каталоге попытается обнаружить файл wpad.dat и в случае успеха будет использовать его как скрипт с параметрами прокси-сервера.

Q: Как настроить WPAD в своей локальной сети?

A: 1. Сначала нужно создать PAC-файл с настройками прокси. Подробности и пример такого конфига можно найти в Википедии: http://en.wikipedia.org/wiki/Proxy_auto-config.

2. Сохраняем этот файл в корневом каталоге нашего web-сервера (из домена) под именем wpad.dat и убеждаемся, что он доступен по адресу http://www.<имя-вашего-домена>/wpad.dat. При необходимости можно использовать HTTP-редирект.

3. Добавляем строку «application/x-ns-proxy-autoconfig dat» в файл mime.types в настройках нашего веб-сервера и перегружаем сервис.

4. Далее создаем запись DNS, которая позволит распознавать имя wpad.<имя-вашего-домена> в IP-адрес web-сервера.

5. В браузере выбираем пункт Use Automatic Configuration Script («Использовать сценарий автоматической настройки»), прописываем там адрес, по которому находится наш файл wpad.dat (например, http://wpad.your.domain.name/wpad.dat) и смотрим, как работает скрипт.

6. Если все нормально, включаем автообнаружение, выставив значок напротив «Искать параметры прокси автоматически». Все должно работать.

Q: Как на практике реализовать проброс портов через SSH?

A: Допустим, в локальной сети есть терминал с IP-адресом 192.168.0.2, к которому нет доступа извне. В этой же сети функционирует маршрутизатор с внутренним IP 192.168.0.1 и внешним адресом 85.86.87.88. Как подключиться к терминалу? А вот так:

$ssh -L 3389:192.168.0.2:3389 85.86.87.88

После аутентификации появится обычное, на первый взгляд, соединение по SSH, однако вместе с ним будет проброшен порт на 192.168.0.10:3389 (напомню, 3389 - это rdp-порт). Теперь мы можем сделать вот так:

rdesktop -a16 -g1024x768 127.0.0.1:3389

Да-да, мы коннектимся к себе же на 127.0.0.1:3389. Но подключаемся при этом к терминалу 192.168.0.10!

Q: Как наладить совместную работу над проектом и контроль версий. Пишу большую часть кода прямо в блокноте и никаких изысканных средств использовать не могу!

A: Проще всего воспользоваться CVS-сервером. В качестве клиента можно заюзать очень простую программу - Tortoise CVS (www.tortoisecvs.org), которая удобно встраивается в Windows Explorer в качестве плагина. Нашей целью будет создание сайта в качестве модуля в репозитарии CVS. Для этого обращаемся через проводник к папке с сайтом, кликаем по ней правой кнопкой, в меню выбираем «CVS -> Make new module». Далее задаем необходимые параметры соединения с сервером. Все. Теперь пару слов о команде commit. Она не только фиксирует файлы, но и изменяет номера версий у отредактированных файлов. Это дает возможность по команде diff построить диаграмму изменений и в случае чего откатиться до определенной версии файла, например до последней рабочей. Необходимо также помнить, что каждую правку кода необходимо сопровождать командами add, content и commit. В противном случае мы рискуем получить несинхронизированную копию где-нибудь в том месте, из которого мы работаем.

Знаешь ли ты?

  • Несмотря на то что в Windows нет такой полезной команды, как uptime, дату и время запуска можно посмотреть сервере, если набрать в консоли net statistics server. После слов «Статистика после» (Statistics since) идет то, что нам нужно.
  • Пользователи никсов, привыкшие переключать раскладку одной кнопкой (чаще всего <Caps Lock>), могут не изменять своим привычкам и под Виндой. Достаточно установить эту полезную утилиту — http://haali.cs.msu.ru/winutils.
  • Код многих полезных функций, причем на самых разных языках программирования, можно найти, если воспользоваться специальным поисковиком от Google. Вот он, заветный URL: www.google.com/codesearch.
Содержание