Как избавится от шелла
Только когда у нас будет мужество воспринимать вещи такими, какие они есть, без какого-либо самообмана и иллюзий, из череды происходящего соберется свет, который может осветить нам путь к успеху.
Два больших вопроса
Ральф Уолдо Эмерсон: В Гарварде изучают все ветви знаний.
Генри Дэвид Торо: Действительно, все ветви, но ни один из корней.
Как профессор права, деловой этики и менеджмента в Школе бизнеса Уортона, я наиболее известен своими работами в области переговоров, убеждения и межличностного влияния. Я написал две популярные книги на эти темы, преподаю курс MBA, а также базовые университетские курсы. Я также консультировал и проводил бизнес-тренинги для самой широкой аудитории слушателей – от сотрудников Navy SEALs[2] и агентов ФБР, ведущих переговоры об освобождении заложников, до руководителей высшего звена сети Four Seasons Hotels и топ-менеджеров Google.
С учетом того, чем я занимаюсь сейчас, большинство с удивлением узнает, что свою академическую карьеру я начал, лишь когда мне исполнилось 37 лет. До этого я многие годы провел без постоянной работы и основную часть этого времени пребывал в глубоких сомнениях по поводу своего места в жизни и будущих занятий. Но те годы я все же считаю самыми важными в жизни. Именно в тот бурный и непростой период, столкнувшись с неудачей, я начал понимать значение успеха.
Вот как это все происходило.
Меня приняли в колледж на полную воинскую стипендию. В обмен на эту «дармовщинку» и финансирование моего обучения я согласился по его окончании стать офицером ВМС и отдать по крайней мере шесть лет воинской службе. В то время это представлялось мне вполне обычным делом, ведь я и сам был выходцем из семьи военных. Мой отец, отставной генерал Корпуса морской пехоты США, был начальником Вирджинского военного института, а оба деда тоже были в свое время кадровыми военными.
Пока дела шли неплохо.
Но это была эпоха вьетнамской войны. На фоне ужасов сражений, убежденный в том, что этой войне не было и нет никакого оправдания, в окружении разделявших мои взгляды сокурсников и преподавателей, я отказался от стипендии и вручил свое призывное свидетельство университетскому священнику. Я решил стать пацифистом. Военные традиции моей семьи больше не были для меня источником гордости. Вместо этого они стали источником кризиса и конфликта.
И пусть никто не говорит вам, что символические поступки мало что значат. В тот день, когда было сдано мое призывное свидетельство, я разорвал повествовательную нить рассказа о своей жизни. В то время как внешне я продолжал «функционировать» – на этот раз всерьез занявшись литературой и сочинительством, – я больше не отдавал себе отчета в том, кто я такой. Я получил высшее образование, но вместо того чтобы надеть военный мундир, вопреки ожиданиям стал социальным работником и стал консультировать вашингтонские семьи, обитающие (по-другому не скажешь) в аварийных домах без отопления, воды и электричества. Новые клиенты рассказывали мне, как они умудряются выживать даже в таких ужасных условиях. Однако они не могли подсказать, как мне следует поступить с моей собственной жизнью. Не в состоянии толком представить свое будущее, я оставил эту работу и некоторое время подрабатывал маляром. Я прекратил общаться с родителями, отказываясь приходить домой даже на Рождество. Моя жизнь в качестве «успевающего ученика» была напрочь разрушена. Я понятия не имел, как все это снова соединить.
Так началось мое путешествие, которое в итоге, через много лет, привело к созданию этой книги.
Социологи выявили относительно новый, характерный этап жизни людей в западном обществе – «Годы одиссеи», или «Приключенческие годы». Этот период соответствует возрасту от 20 до 35 лет (т. е., грубо говоря, от поступления в колледж до вступления в брак), когда мужчины и женщины определяются с собственными ценностями и целями. Подобная одиссея может начаться и позднее – после неожиданного увольнения с работы или развода или с приближением пенсионного возраста. В этот период у человека происходит формирование следующего этапа жизни, и он начинает задумываться, что ему делать дальше. Порой все это происходит на фоне семейных конфликтов, в напряженной культурной или экономической обстановке. Путь каждого отдельного человека, по определению, индивидуален, и вы никогда не можете знать наверняка, куда он вас приведет и где закончится.
Моя одиссея началась с магии. Я посещал семинары самосовершенствования, где узнал о самоутверждении, визуализации, самогипнозе и «управлении сознанием». Я занимался магией, перешел на мантры трансцендентальной медитации, а потом переключился на психотерапию. В промежутках между своими малярными работами я участвовал в постановках местных театров и даже совершил поездку по стране в составе разношерстной театральной группы левого толка под странным названием The People’s Revolutionary Road Company[3].
Но на фоне всей этой деятельности я жил в состоянии тихого отчаяния. Надо признать, что малярное дело обладает одним большим преимуществом: оно дает человеку много времени на размышления. Я пользовался этим и с лихвой тратил его на мечты и фантазии, в которых неизменно присутствовал в роли весьма успешного героя, вызывавшего всеобщую зависть и восхищение. Я представлял себя всемирно известным поэтом. Потом важным членом конгресса. Ну, и т. д. и т. п. Но наступали периоды, когда было уже не до фантазий: например, когда предстояло выкрасить оконные рамы, не заляпав стекол, или аккуратно провести длинную линию, причем строго параллельно полу или иной горизонтальной поверхности.
Источник
WEB-Shell на PHP. Что это такое и способы его спрятать
Начнем с определения что такое «веб-шелл» (WEB-Shell)? Что нам говорит интернет по этому поводу: Это некий вредоносный скрипт (программа), который злоумышленники используют для управления чужими сайтами и серверами: выполнения команд терминала, перебора паролей, доступа к файловой системе и т.п. Для размещения скрипта чаще всего используются уязвимости в коде сайта или подбор паролей.
Хотя тут требуется уточнение. Вредоносным он становится в случае если он загружен не вами на ваш сервер, а злоумышленником. Если он загружен вами, то обычно это очень даже полезный инструмент.
PHP WEB-Shell обычно построен на PHP команде exec();
и по большому счету
уже является шеллом.
Но, как правило, от шелла хочется немного больше комфорта. Ведь неудобно каждый раз менять PHP код, чтобы выполнить команду.
Пример более удобного шелла можно найти в разделе файлы.
Но вот все хорошо, шелл размещен на сервере, но возникает вопрос как его скрыть от посторонних глаз.
Первое что приходит в голову, это сменить название на то, которое не вызовет подозрений (скажем functions.php).
Далее а стоит поменять время создания/изменения файла. В этом нам поможет команда touch с параметром -t
-t время
Использовать вместо текущего указанное время. Время задается десятичным числов вида:
[[CC]YY]MMDDhhmm[.SS]
где каждая пара цифр представляет следующее:
MM Месяц года 6.
DD День месяца 22.
hh Час дня 17.
mm Минута часа 49.
CC Первые две цифры года.
YY Последние две цифры года.
SS Секунда минуты 11.
Пример:
touch -t 200911030000 test.txt
В данном случае время изменится на 2009-11-03 00:00
Так же можно Shell встроить в уже существующий PHP файл, но это лучше делать с компактным шеллом.
Например с таким:
Данный шелл проверяет, вызван ли скрипт с GET параметром pwd, который задан в переменной $pa (вызов скрипта должен выглядеть как: http://путь_и_имя_скрипта.php?pwd=qwe)
Перед его добавлением в существующий PHP файл следует удалить из него комментарии и максимально его сжать.
После удаления комментариев, лишних пробелов и переносов строк получится:
Но в любом случае лучше подстраивать стиль под стиль кода в существующем файле.
Хотя можно пойти и другим путем. Предварительно обфусцировать код, чтобы он стал не читаемым.
Пример легкой обфускации:
Это тот же простой шелл, просто с запутанным кодом.
Пример сильной обфускации:
Это все тот же простой шелл, но с шифрованием в base64. он так же будет исполняться.
Можно встроить загрузчик шелла в существующий скрипт. Этот путь хорошо в качестве резервного. Если основной шелл стерли и уязвимость закрыли, то возможно остался загрузчик, через который можно повторно закачать шелл. Хотя это иногда бывает довольно творческой работой, потому что не всегда все папки доступны на запись.
Пример загрузчика(в данном случае используется утилита wget через exec):
данная строка закачает файл shell.txt с сервера example.com и сохранит его под именем shell.php в папке, из которой исполнялся скрипт, если скрипт, в который она внедрена, вызван с параметром ?pwd=dl
Так же можно сделать загрузку с помощью самого PHP:
данный код так же закачает файл shell.txt с сервера example.com и сохранит его под именем shell.php в папке, из которой исполнялся скрипт, если скрипт, в который она внедрена, вызван с параметром ?pwd=dl
Только не забываем предварительно разместить шелл на сервере, с которого он будет закачан. И с не исполняемым расширением файла.
Скрипт закачки шелла на сервер так же желательно сжать, освободить от комментариев и, по желанию, обфусцировать.
Еще шелл можно спрятать в базе данных, но это уже зависит от используемой CMS и ее настроек. Если текст страниц хранится в базе данных, и CMS по каким-либо причинам не фильтрует PHP код при выводе текста из базы на страницу для конечного пользователя, то эти скрипты вполне могут жить в базе данных. Правда данный материал уже выходит за рамки этой статьи.
Вообще методов сокрытия шелла существует огромное множество. И данная работа больше напоминает творческую.
Что касается защиты: старайтесь держать эталонные версии скриптов и список файлов на сервере в резервной копии (естественно находящейся не на том же сервере). Тогда можно будет быстро сравнить все изменения, в случае если у вас есть подозрения.
Заказать создание и поддержку безопасной IT-инфраструктуры любой сложности
Быть уверенным в своей IT-инфраструктуре — это быть уверенным в завтрашнем дне.
Источник
Как обезопаситься от шеллов на сервере?
Есть виртуальный выделенный сервер. На нем крутятся порядка 50 сайтов, все на разных CMS и версиях. Недавно все сайты практически были заражены шеллами и рассылали письма со спамом. После чего пришлось восстанавливать бэкап. Как можно обезопаситься? Обновлять CMS не представляет возможности, есть модули которые заточены только под текущую версию joomla или opencart например.
Возможно взломали только один сайт и через соседнии директории заразили остальные.
- Вопрос задан более трёх лет назад
- 4637 просмотров
Оценить 2 комментария
Для начала необходимо разделить сайты друг от друга физически. Сами скрипты сайта, временные файлы и файлы сессий.
Например, структура может быть такая:
В папке site расположены скрипты сайта. Обычно эта папка (или одна из вложенных) является document root сайта.
В sessions находятся файлы сессий посетителей сайта. Если их не разделять, то взлом одного сайта автоматически дискредитирует сессии всех пользователей остальных сайтов. То есть, взломав example.com, можно стырить сессию администратора toster.ru. Путь к этой папке настраивается директивой session.save_path.
А в temp находятся временные файлы, загружаемые пользователями через html формы (директива upload_tmp_dir). Туда же неплохо направить и остальные временные файлы, генерируемые функциями tmpfile(), tempnam(), самостоятельным образом (используя результат функции sys_get_temp_dir() для построения пути) или любой другой функцией, которая использует системную временную директорию. К сожалению, директива sys_temp_dir, ответственная за это, появилась только в php 5.5.0. Если у вас более ранняя версия, тогда нужно учитывать момент, что сайты могут ходить в /tmp и нельзя блокировать доступ к этой папке.
Далее необходимо настроить нормальные права доступа. Часто в интернете можно видеть советы «делайте chmod 777 на всё». Так делать нельзя. Подобные права доступа как раз наихудшим образом сказываются на безопасности, потому что дают возможность отредактировать любой скрипт на сайте и встроить маленький бэкдор в самый незаметный скрипт, принадлежащий CMS. Надежно избавиться от такого довеска можно будет только полной переустановкой CMS. Или можно загнать весь сайт в систему контроля версий, как предложил Максим Гречушников, и одной командой узнать какие скрпиты были заражены. Тем не менее, одно другое не исключает. Система контроля версий позволит выявить заражение постфактум, а нормальные права не дадут возможности заразить файл в принципе.
Я рекомендую на папки устанавливать права 755, а на файлы 644. При этом, владельцем всех папок и файлов должен быть кто угодно, но не пользователь, из-под которого запущен веб-сервер или php (например, пользователь, под которым вы сами заходите на сервер по ssh). Но такие права на всё устанавливать тоже нельзя. Сайт в процессе своей работы может генерировать свои временные файлы (например, кешировать что-то в файл, компилировать шаблоны, хранить какие-нибудь настройки), поэтому для папок, в которые сайт может что-то записать, права должны быть другие. Вот здесь уже можно ставить 777 для папок и 666 для файлов. Это довольно кропотливая работа, потому что у каждого сайта (особенно если они на разных CMS) свои папки и часто определение таких папок нетрвиально.
И права доступа не решают всех проблем. Злоумышленник может встроить вредоносный код в скомпилированный шаблон или отравить кеш. Тогда не помогут ни права (так как для нормальной работы сайту нужно иметь права на запись в такие файлы), ни система контроля версий (так как подобные файлы слишком часто меняются и, как правило, не хранятся в репозитории). Хотя надо сказать, этот способ внедрения сложнее и недолговечнее, чем встраивание в нормальный скрипт.
И ещё автоматическое обновление сайта перестанет работать. Если CMS позволяет обновить себя через кнопку в веб-интерфейсе админки, то такое обновление не будет работать, так как права доступа не разрешают веб-серверу модифицировать скрипты. Обновлять скрипты теперь можно только вручную от имени пользователя, которому принадлежат все файлы. Безопасность и удобство — разные концы одной палки.
Даже с учётом всех недостатков — нормально настроенные права доступа на файлы и папки значительно сокращают вектор возможных атак. Так что обязательно разберитесь с этим вопросом.
После раскидывания сайтов по своим папкам и настройки прав, необходимо ограничить доступ сайтов друг к другу. Проще всего это сделать настройкой php директивы open_basedir. Эта директива определяет список директорий, внутри которых (а так же во всех вложенных папках) скрипты могут читать и писать. Доступ за пределы этих директорий будет пресекаться. То есть нужно каждому сайту прописать в open_basedir путь к своей папке и к /tmp (если версия php более трёх лет назад
Источник