Вы, конечно, слышали о троянских mIRC скриптах,
бэкдорах, червях и прочем.
В этой статье речь пойдет об ошибке несколько другого рода,
причиной которой является своеобразная интерпретация команды /timer.
Итак, реальный пример из одного скрипта - "самообучающийся"
говорящий бот, коих на основе mIRC скриптов понаделано весьма немало.
Бот запоминает фразы пользователей и отвечает выбранной случайно.
Remote:
on 1:TEXT:*:?:{
write dictionary.txt $$1-
timerANSWER 1 3 msg $nick $read dictionary.txt
}
По замыслу автора, таймер служил своеобразной защитой от флуда,
тк возвращал не более 1 ответа в 3 секунды, независимо от количества
запросов.
Теперь посмотрим, что получается, если сообщение имеет вид
bot - sucker | /exit
Строка сохраняется в файл и впоследствии, при выдачи его,
произойдет следующее:
скрипт интерпретирует | как разделитель операторов и закроет mIRC.
На месте /exit может быть и любая другая команда или даже несколько.
Таким извращенным образом можно обмениваться файлами, удаленно управлять
клиентом, а если еще подгрузить пару-тройку утилит...
Приведенная строка характерна для поздних версий mIRC'a, где пофиксены
баги интерпретации. Если версия ранняя, то выполнение команды произодет
еще раньше - во второй строке. Если моментальное выполнение нежелательно,
то можно заменять | на $chr(124).
Эта же замена позволяет обходить всяческие фильтры, поставленные
зловредными скриптописателями.
Вообще говоря, крайне полезным может оказаться использование таких
identifiers как $os, $version, $read, $cb и многих других.
Посланная тому же боту строка
Os: $os Version: $version Clipboard: $cb Dir: $mircdir
При выдаче пользователю покажет соответственно версию системы,
мирка, содержимое клипбоарда и папку мирка.
Как всегда, AUX, PRN, NUL и CON служат для нас подспорьем.
Если имеется возможность заставить скрипт write/read/play или еще как
обратиться к файлу, имя которого мы можем задать, подстановка этих
внешних устройств вместо имени файла вызывает подвисания, увисания,
отвисания и прочие явления, связанные с system crash.
Например, команда /write aux eatme намертво весит систему под Win9x.
Трояны, подобные описанным, можно встретить во многих
скриптах, причем авторы, как правило, даже не подозревают о дополнительных
возможностях своего кода...