Когда-то все происходило несколько иначе. Управляющими считались поля “Subject”, в сообщениях, адресованных группе “all.all.ctl”. Для обеспечения совместимости многие серверы до сих пор поддерживают такое поведение, хотя описанная концепция устарела не на один ледниковый период.
Забавно, что в попытках защитить свой сервер и установить фильтры для управляющих сообщений многие администраторы забывают об этой маленькой документированной (плохо, но документированной) особенности.
Запретить управляющие сообщения администратор не может, потому что они используются для организации взаимодействия между NNTP-серверами. Впрочем, можно настроить систему безопасности так, чтобы потенциально «опасные» команды требовали аутентификации пользователя и были доступны лишь с соответствующими привилегиями доступа. Но в большинстве случаев установленную защиту можно с легкостью обойти, используя простейшие приемы подделки полей заголовка.
Для удаления сообщения можно воспользоваться командой “cancel”, указав уникальный идентификатор (“Message-Id”) удаляемого послания. Отправлять такую команду может только администратор сервера или автор сообщения, то есть поля “From” в удаляемом и управляющем посланиях должны совпадать [246].
Для того чтобы узнать идентификатор сообщения, достаточно воспользоваться командой HEAD. Если удаляемое сообщение текущее, то это может выглядеть, например, так:
Чтобы иметь возможность убедиться в успешности выполнения операции, необходимо воспользоваться командой GROUP, запомнив число сообщений в группе до попытки удаления корреспонденции.
· group medlux.doc.rus
· 211 3 3030 3032 medlux.doc.rus
· Newsgroups:medlux.doc.rus
· From:«kpnc@aport.ru»
· Approved:«kpnc@aport.ru»
· Subject:cmsg cancel «
Аналогичным образом можно воспользоваться служебным полем “Control”, тогда заголовок будет выглядеть так:
· Newsgroups:medlux.doc.rus
· From:«kpnc@aport.ru»
· Approved:«kpnc@aport.ru»
· Controclass="underline"
· Subject: Hello, Server!
Поле “Subject” должно присутствовать и в том и другом случае, иначе сервер не отправит сообщение.
Если удаление прошло успешно, результат работы команды “GROUP” должен выглядеть приблизительно так:
· group medlux.doc.rus
· 211 2 3030 3031 medlux.doc.rus
Количество сообщений уменьшилось на единицу! Следовательно, одно из них было только что удалено. Впрочем, на локальных дисках подписчиков не произошло никаких изменений [247], точно как и на всех серверах, уже успевших получить это сообщение.
Пользоваться управляющими сообщениями следует крайне осторожно. При возникновении ошибок обработки, сообщение об ошибке возвращается не отправителю, а администратору системы, последующие действия которого предугадать нетрудно.
Впрочем, экая невидаль удалить собственное послание! Вот если бы было можно то же проделывать и с чужой корреспонденцией. Но почему бы нет? Достаточно подставить фиктивный адрес в поле “From” в заголовке сообщения.
Эксперимент, приведенный ниже, демонстрирует удаление чужого сообщения с сервера:
· From: Nadezda Alexsandrovna
· Newsgroups: medlux.trade.optika
· Subject: I am looking for a permanent wholesale buyer of women's hair 30-60 cm long of all colours. Phone in Kharkov (0572)329639, 364556, fax 329763. [249]
· Date: Thu, 6 Apr 2000 05:01:15 +0300
· Organization: AOZT'Sharm'
· Lines: 16
· Distribution: world
· Message-ID: «8cgr73$bsl$25@uanet.vostok.net»
· Reply-To:okline@email.itl.net.ua
· NNTP-Posting-Host: ums.online.kharkov.com
· Mime-Version: 1.0
· Content-Type: text/plain; charset=koi8-r
· Content-Transfer-Encoding: 8bit
· X-Trace: uanet.vostok.net 954986531 12181 194.44.206.227 (6 Apr 2000 02:02:11 GMT)
· X-Complaints-To: usenet@vostok.net
· NNTP-Posting-Date: 6 Apr 2000 02:02:11 GMT
· Summary: Please call us or write in Russian or English.
· Keywords: hair
· X-Mailer: Mozilla 4.61 [en] (Win95; I)
· Xref: news.medlux.ru medlux.trade.optika:904
В заголовке сообщения присутствуют два поля “From” и “Reply-To”. В зависимости от настроек сервера он может проверять либо только первое из них, либо и то, и другое сразу.
Стандарт предписывает сличать поля “From” и “Sender” (если есть) и ничего не говорит обо всех остальных. Поэтому различные разработчики могут реализовывать это по-разному.
Например, можно отправить сообщение следующего содержания, в котором присутствует лишь поле “From”.
· From: Nadezda Alexsandrovna «okline@email.itl.net.ua»
· Newsgroup: medlux.trade.optika
· Approved: Nadezda Alexsandrovna «okline@email.itl.net.ua»
· Subject: cancel «8cgr73$bsl$25@uanet.vostok.net»
Таким же точно образом можно удалить содержимое всех конференций, достаточно воспользоваться несложным скриптом, по понятным причинам не прилагаемым к этой книге.
К сожалению, это действительно очень простой скрипт, который в состоянии написать даже начинающий программист. Хотелось бы, что бы владельцы NNTP-серверов серьезнее относились к вопросам безопасности и защиты информации.
Гораздо надежнее защита от несанкционированного создания и удаления конференций. Когда-то, давным-давно, на заре существования Internet, любой пользователь мог создать собственную группу, или удалить чужую [250].
Для создания новой конференции было достаточно воспользоваться управляющей командой «newgroup ИмяГруппы», отослав ее на «all.all.ctl». Сегодня ситуация несколько изменилась. Только редкий сервер разрешит рядовому пользователю подобные операции, и, кроме того, куда отправлять сообщение? Единого мнения на этот счет никого нет. Например, на nntp://mailserver.corvis.ru существуют специальные группы, находящиеся в самом начале списка, выдаваемого командой LIST.
· list
· 215 list of newsgroups follow
· control.cancel 7463 7423 y
· control.newgroup 1 2 y
· control.rmgroup 0 1 y
·…
Но не стоит обольщаться, обнаружив флаг “y”, разрешающий постинг. При попытке отправить управляющее сообщение, сервер потребует авторизации, попросив ввести имя и пароль администратора. Бессмысленно пытаться выяснить их перебором. При первой же ошибке владелец сервера получит уведомление об атаке.