Почувствуй себя счастливым
Если сегодня с утра ты проснулся здоровым, ты счастливее, чем 1 миллион человек, которые не доживут до следующей недели.
Если ты никогда не переживал войну, одиночество тюремного заключения, агонию пыток или голод, ты счастливее, чем 500 миллионов человек в этом мире.
Если ты можешь пойти в церковь без страха и угрозы заключения или смерти, ты счастливее, чем 3 миллиарда человек в этом мире.
Если в твоём холодильнике есть еда, ты одет, у тебя есть крыша над головой и постель, ты богаче, чем 75% людей в этом мире.
Если у тебя есть счёт в банке, деньги в кошельке и немного мелочи в копилке, ты принадлежишь к 8% обеспеченных людей в этом мире.
Small HTTP server: поиск блох
Small HTTP server 3.0395
Один знакомый спросил меня по аське — что я думаю по поводу Small HTTP server. Я его отправил к статьям годичной давности (смотреть тут, тут, тут и тут). «Ну, хорошо,» — сказал он — «а что ты думаешь по этому поводу сейчас?». Ничего по этому поводу «сейчас» я не думал, моего знакомого интересовала HTTP-составляющая этого сервера, поэтому я пообещал ему произвести
Из дальнейшей беседы я понял, что производительность сервера моего знакомого не волнует, зато сильно интересует вопрос безопасности и наличия багов. Я произвёл тестирование до той кондиции, когда мой знакомый решил, что я своё обещание выполнил. А когда произвёл, понял, что результаты тестирования могут быть интересны более широкой публике — людям, использующим этот сервер в своих повседневных задачах или не знакомым с ним вовсе.
Эти результаты, оформленные должным образом, я и предлагаю вашему вниманию.
Давненько я не рассматривал замечательный продукт нашего программиста Макса Феоктистова Small HTTP server (SHS) на предмет багов и уязвимостей (в прошлом я это делал
Small HTTP server — в прошлом HTTP-сервер, а в нынешней своей ипостаси — HTTP-, DNS-, Proxy-, FTP, POP3— и SMTP-сервер с поддержкой сервера динамических перенаправлений, виртуальных хостов, SSI, ISA и CGI-скриптов. Более всего продукт замечателен тем, что при своих возможностях он занимает всего 103 (!) килобайта.
В прошлом я периодически находил в нем уязвимости различного рода, Макс их исправлял, в частности, путём введения различных ограничений и проверок в код программы. В итоге, код так оброс различными коррективами, что в обработке запросов появились натуральные баги.
Сервер я запускал в установками по умолчанию, в корень сайта положил
Первая ошибка связана с обработкой GET-запроса к индексному файлу. Вообще, если сервер обнаруживает, что запрос пришел не конкретному файлу,
Все запросы, равно как и их содержание, в этом случае передаётся индексному файлу. Каким образом сервер отличает индексный файл от любого другого зависит от настроек сервера, собственно, как и его поведение в случае, если такой файл не найден.
Так вот, в случае SHS, GET-запрос к директории
Наверное, одна из самых распространённых ошибок доморощенных
SHS до жути боится двух точек в URL’e, так совершенно безвредные запросы
http://127.0.0.1/Folder../
http://127.0.0.1/file.shml?/..
http://127.0.0.1/file.shml?../
вызовут у него неадекватное bad reques (хотя ничего bad в таких requests нет).
Другая проблема SHS — негативное его отношение к слешам в конце запроса. Не то, чтобы они ему совсем не нравятся, но некоторые манипуляции с ними кажутся SHS чересчур подозрительными. Запросы ниже порождают уже знакомый «bad request».
http://127.0.0.1/file.shml?./
http:127.0.0.1/file.shml?
Другая беда — трансляция переменных запроса в переменные языка SSI. Видимо, преобразование URL к «нормальному» виду и отсечение всего подозрительного выполняются раньше любых других манипуляций. Так что после запроса
http://127.0.0.1/index.shtm?word/
в QUERY_STRING оказывается word\index.shtm, а после
http://127.0.0.1/index.shtm?/a
переменная QUERY_STRING содержит \a
Такое искажение данных недопустимо, если пытаться использовать вместе с SHS
Собственно, даже при использовании SSI любое искажение входных данных может приводить к неожиданным, неприятным последствиям. SHS, помимо стандартной переменной QUERY_STRING, помещает данные запросы ещё и в переменные окружения, подобно тому, как это делает язык PHP. Например, запрос ?bar=1&foo=2 приведет к появлению двух переменных — bar со значением 1 и foo со значением 2.
Это очень удобно, так как позволяет использовать язык SSI для более широкого круга задач. К сожалению, и тут есть небольшой баг, искажающий внешние данные. Так запрос
http://127.0.0.1/index.shtm?var==value
порождает переменную var со значением value, хотя, по логике var должна содержать строку =value.
http://127.0.0.1/index.shtm?var=1=2
этот запрос, как не странно, порождает переменную var со значением… 2.
http://127.0.0.1/index.shtm?&
Косметический баг. В переменных окружения — пара переменных с пустыми именами и значениями.
Теперь, что касается уязвимостей. Сразу скажу, серьезно в этом плане я сервер не тестировал. Просто попробовал несколько первых комбинаций, из тех, что сразу пришли в голову.
Начнем с локальных уязвимостей. Оставим в стороне CGI/ISA и другие «внешние» вещи и займемся SSI.
Несложная команда, не лишенная логики
<!--#echo var="\"\"" -->
заставляет сервер подвисать после выполнения нескольких запросов к файлу, её содержащему.
Так же SHS не переваривает команду
<!--#exec cmd="\s.exe" --> после неё сервер выполняет недопустимую операцию и, с приличествующим шумом, умирает.
Сходная с предыдущей, команда
<!--#exec cmd="\"" -->
вводит сервер в прострацию — он зависает.
Удалённая уязвимость, связанная, по всей видимости, с переполнением буфера (в этом легко убедиться, несколько сократив количество знаков & в запросе). Её я приберег на сладкое.
Как уже было сказано, запрос с одним амперсандом, порождает две пустые переменные, а вот запрос длиной в 40 амперсандов
http://127.0.0.1/index.shtm?&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
кончается для сервера фатально. По крайней мере, в моей Windows XP. Возможно, под другими операционками сакральное число этих знаков в запросе будет другим.
И, что самое интересное, судя по всему, вполне можно попытаться изготовить эксплоит, которых бы использовал эту уязвимость для выполнения вредоносного кода на атакуемой машине.
Повторюсь: все тесты выполнялись над версией 3.0395 под Windows XP. В качестве инструмента для всех запросов использовался браузер Internet Explorer 6.0. Сервер ставился в стандартной конфигурации, в корне сайта лежала
Вывод: Small HTTP server — безусловно отличный продукт, заслуживающий всяких похвал, но, к сожалению, недостаточно оттестированный. Для хостинга сайта, в силу постоянно обнаруживаемых ошибок в разборе HTTP-запроса, я бы его использовать не рекомендовал.
С другой стороны, в программе есть и другие сервера, которые, возможно окажутся более защищенными. Кроме того, у сервера есть неоспоримое преимущество — его размер в 103 килобайта,
Кстати, до версии 1.22 обновился [ Photoshop’s Crap Remover ]. Всем, кому интересно, качайте новую версию.
Пишите!
Показательный пример
Анализ
Рецепт
«Ложка в меду».
Это блюдо делается в глубокой посуде. Натуральный мёд переложить в приготовленную посуду, чайную ложку (можно взять столовую, по вкусу) положить в мёд, чуть утопить. Блюдо готово, можно подавать к столу.
«Обыкновенное чудо»
Мой любимый персонаж — добрый, наивный Король.
«Со мною происходит нечто ужасное… Доброе
Хозяин, которого я очень не любил в свое время, он казался мне жестоким. Сейчас он мне таковым не кажется.
«Слава храбрецам, которые осмеливаются любить, зная, что всему этому придет конец. Слава безумцам, которые живут так, как будто они бессмертны, -- смерть иной раз отступает от них.»
История любви Принцессы и Медведя, раньше я выводил её на первый план, теперь она мне кажется лишь объединяющим стержнем всех историй фильма, все эти события… Получил огромное удовольствие от просмотра, прекрасный фильм. Обыкновенное чудо.
Листая старые журналы
Разные грани одного предмета
Что такое батарея летом? Это, по сути, предмет ненужный и бесполезный. Греет она, греет, накаляется. Жители квартир проклинают ЖЭК. Ведь и так жарко. А батарея зимой? Батарея зимой — совсем другое дело. Батарея зимой — сердце квартиры, средоточие желаний жильцов. Поэтому не смотри на вещи однобоко. А лучше займи место у батареи заранее. И пизди ногой всякого, кто к тебе подойдет.
©
-----------------------------------------------------
Звук хода дешёвого китайского будильника меня успокаивает, а звонок — раздражает до боли. Разные грани одного предмета.
www.exler.ru
BOLK [цвета] табака

Таким засняли меня вчера в гостях у
Один день из жизни пейджинговой компании
|
|
Душа протестует против горячей клавиши «люблю, целую» — душе это кажется цинизмом. С другой стороны, набирать часто используемые фразы
Alt+Ctrl+9! Alt+2. Alt+3 Alt+4 или Alt+Ctrl+5, Alt+Ctrl+4. Alt+Ctrl+1 Alt+8, Alt+0. Alt+7. Alt+Ctrl+3, Alt+Ctrl+2.
Настёна aka savannavita
Всем построиться и спать!
---------------------------------------------------
Спят yсталые звеpyшки,
В паyтинке дpемлет мyшка.
Зацепившись за кpючок,
Спит пpитихший чеpвячок.
Став похож на yголёк,
Спит сгоpевший мотылёк.
Дpемлет безмятежным сном
Клоп, пpидавленный бpевном.
Спит, на плоский блин похож,
Под каток попавший ёж.
Подавившись скоpлyпой,
Спит бельчонок под сосной.
Мёpтвым сном бypyндyчок,
Спит, наткнyвшись на сyчок.
Утонyв в вонючей лyже,
Спит цыпленок и не тyжит.
А на высохшем полy,
Рыбки кyчкой спят в yглy.
Спит, намотанный на шинy,
Уж, попавший под машинy.
Спит yбитая лисичка,
Спит задyшенная птичка.
Спит застpеленные зайчишка,
В мышеловке дpемлет мышка.
Спит, пpикpывши лапой носик,
С голодyхи сдохший пёсик.
Спит повешенная кошка,
Спит pаздавленная блошка.
Спят yсталые звеpyшки,
СПИ, А ТО ПРИБЬЮ ПОДУШКОЙ!!!
---------------------------------------------------
Автор стихотворения неизвестен.
Вечеринка у vlada

Дополнение (от 1:04): почему у
Макаронные пряники

Сегодня купил Х/З* что за фруктовые пряники. Покупал я,
------------------------
Х/З* — для тех, кто не знает, известная аббревиатура «хуй знает».
Новые интерфейсы

Кусочек меню программы MapInfo Professional Version 5.5. «Показать
Это почему так?
- Владимир Сорокин «Голубое сало»
- Валерий Фрид «58 с половиной или записки лагерного придурка»
- Борис Акунин
«Алтын-Толобас» - Виктор Ерофеев «Пять рек жизни»
Photoshop's Crap Remover
Хочу сказать «спасибо» Спектатору — именно с его подачи я вчера попал на сайт «ПОтребитель», где прочёл статью «Куда ведёт нас Photoshop…». Статью рекомендую прочитать, хотя
Более всего меня заинтересовали эксперименты автора с картинками в формате JPEG/JFIF, сохранёнными из Photoshop’а. Автор утверждает, что после нехитрых манипуляций, ему удавалось сократить размер картинки
Мне захотелось выяснить так ли это, попытаться автоматизировать процесс избавления от мусора и, заодно, разобраться в природе «нехитрых манипуляций». Более всего они походили на шаманство, ибо, по моему убеждению (почитайте статью), относительно бинарного формата нельзя давать такие рекомендации — «искать текстовую строку, это вырезать, а вот это нужно приклеить сюда».
В считанные секунды я нашел то, что меня интересовало — предельно сжатое описание формата JPEG/JFIF и занялся изучением.
Небольшое отступление касаемо аббревиатуры «JFIF». JPEG — очень широкий стандарт, JFIF же является одной из его реализаций. Честно говоря, я вообще ничего не знаю о других реализациях, но уверен, что они существуют. Как бы то ни было, Photoshop сохраняет файлы именно в формате JFIF.
Дополнение: JPEG является алгоритмом сжатия, формат файлов, сжатых по алгоритму JPEG принято называть JFIF (JPEG File Interchange Format). Есть, например, TIFF/JPEG (TIFF 6.0) — формат TIFF, сжатие по алгоритму JPEG.
Узнать JFIF-файлы очень просто — они всегда начинаются с сигнатуры JFIF в секции APP0, что следует за секцией SOI (Start Of Image), т. е. сразу после сигнатуры JPEG-файла. Все эти магические слова означают следующее — JFIF-файл всегда начинается с сигнатуры 0xFF, 0xD8, 0xFF, 0xE0, <два байта длины>, JFIF, 0x00.
JPEG, как контейнер, устроен достаточно просто — секции, называемые сегментами, их длины и содержимое. Помимо всего прочего, среди сегментов определены 16 «сегментов приложения» (APPx) и один сегмент комментария (COM). Сегмент APP0 занят форматом JFIF, как служебный, остальные 15 разрешено использовать приложениям для своих целей.
Вот именно в них Photoshop (и другие программы тоже) помещает свои данные. Например, в сегменте APP2 Photoshop хранит собственный цветовой профиль, в APP13 — некоторые установки, например, установки печати. Кажется в сегменте JFIF (APP0) может хранится пиктограмма предварительного просмотра, но мне не удалось найти ни одного файла с такой пиктограммой, чтобы произвести эксперименты по очистке файла от неё, если вам попадется файл с длинной секции APP0 хотя бы в пару сотен байт, не поленитесь, пришлите его мне.
Итак сама программа. Назвал я её незатейливо — «Photoshop’s Crap Remover» (PCR). Написана она на PHP и должна, в принципе, работать и под
Если запустить программу без параметров, она даст краткие сведения о себе и своих параметрах, которых у неё негусто — при запуске с одним параметром программа в качестве выходного файла использует местный null, при запуске с двумя она обрабатывает первый файл, вычищает из него мусор и помещает результат во второй файл.
Проще говоря, программу следует запускать с двумя параметрами, если вы хотите насладиться результатом её работы — в качестве первого параметра указывается имя файла, который нужно подвергнуть обработки, в качестве второго — имя файла, куда будет помещен результат. Одно и тоже имя файла два раза указать нельзя — файл просто затрётся.
Опыт показывает, что более всего ненужной простому пользователю информации помещает в файл Photoshop 5.0 — после обработки его детищ детища эти действительно уменьшаются на 4—7КБ, Photoshop 7.0, для сравнения, помещает в файл всего 30—50 байт.
Под занавес две простенькие программки на Shell, облегчающие жизнь. Под Windows, естественно, работать не будут, но и под ними несложно придумать
# Посмотреть как изменится размер файлов в текущем каталоге, если обработать их PCR.
for file in *.jpg ; do ./pcr.php $file /dev/null; done
# Обработать все JPEG'и в текущем каталоге.
for file in *.jpg
do
./pcr.php $file /tmp/tmp_delete_me.jpg>/dev/null
mv -f /tmp/tmp_delete_me.jpg $file
donePhotoshop’s Crap Remover … Скачать … . 1,5КБ в архиве.
Дополнение (от 17:46): Вышла версия 1.10, исправлена текстовая опечатка в названии сегмента, PCR научился вырезать preview, если он расположен в отдельном сегменте APP0.
Дополнение (от 18:07): Вышла версия 1.20, теперь я полностью вычищаю еще и сегмент APP0, как оказалось от этого совершенно никто не страдает — ни программы просмотра, ни браузеры, а кроме того, теперь PCR работает, как с JPEG/JFIF, так и JPEG/EXIF.
Дополнение (от 5/10/2002): Вышла версия 1.22, исправлены опечатки. Спасибо alexander (ap at mail.kuzbass.net).
