Необычная защита от PHP Include

7 комментариев

Нестандартное мышлениеДавайте с вами подумаем кто такой хакер? Хакер — это не взломщик! Люди часто путают эти понятия. Хакер — это прежде всего человек с нестандартным мышлением, и в этом его сила, если можно так сказать.

Чтобы успешно противостоять хакеру, нужно также научится нестандартно мыслить. Как говорится, клин клином вышибают.

Сегодня я предложу вам очень необычный способ защитится от атак типа php include. Подходит он конечно далеко не всем. И если чесно защищает он не от самой атаки, а от ее обнаружения. Заинтриговал?

Как ищется инклуд…

Давайте сначала разберемся как именно взломщик пытается обнаружить уязвимость.

Выглядит это следующим образом. Злоумышленник модифицирует все входящие параметры по очереди, предполагая что данные этих параметров попадают в функцию инклуда. Ну или если по-простому пытается «приинклудить» файлы. И для того чтобы определить есть ли уязвимость или нет, ему необходимо приинклудить какой нибудь файл на целевой системе (приикнулдилось — уязвимость есть, нет — уязвимости нет).

Естественно если злоумышленник действует извне, то он не знает структуру расположения каталогов и файлов, и не может приинклудить любой файл, так как не будет знать пути к нему. Но бывают такие файлы, которые всегда существуют в системе, и к которым есть всегда права на чтение. Для Linux — это /etc/passwd, а для Windows — пусть будет C:\boot.ini. Но впрочем Windows нас мало интересует, поэтому дальше мы будем говорить про passwd

/etc/passwd

Наверное вы натыкались в своих логах на больше количество записей вида:

?action=../etc/passwd%00
?action=../../etc/passwd%00
?action=../../../etc/passwd%00
?action=../../../../etc/passwd%00
?action=../../../../../etc/passwd%00
?do=../etc/passwd%00
?do=../../etc/passwd%00
?do=../../../etc/passwd%00
?do=../../../../etc/passwd%00
?do=../../../../../etc/passwd%00
?id=../etc/passwd%00
?id=../../etc/passwd%00
?id=../../../etc/passwd%00
?id=../../../../etc/passwd%00
?id=../../../../../etc/passwd%00

Если да — то знайте, у вас пытались найти php include (ну или возможность чтения произвольных файлов, но нас сейчас это не интересует). Так вот, если один из ваших параметров не обрабатывается должным образом и попадает в функцию include(), то тогда бы файл /etc/passwd приинклудился, содержимое бы его интерпретировалось как php скрипт, и так как он не содержит тегов php кода, он бы вывелся в браузер в неизменном виде. Это бы и послужило бы взломщику «маркером» наличия уязвимости.

К чему я это пишу, к тому что при поисках инклудов, злоумышленник обязательно (гарантирую что в 90% случаев) будет пытаться приинклудить файл /etc/passwd.

Защищайтесь, сударь!

Наверное вы сейчас подумали: «Он что, хочет предложить обычный WAF и фильтровать пакеты по наличию /etc/passwd в них?». Нет. Это стандартный способ. Это пример того как мыслит обычный человек.

Давайте проявим немного фантазии. Почему бы нам просто не добавить немножко php кода в содержимое файла passwd? И если вдруг у злоумышленника получится его приинклудить, то наш php код выполнится. (Считаете бредом? — загляните в заключение)

Так как мы знаем, что единственный кто догадается инклудить этот файл — взломщик, то наш php код должен его банить, и для того чтобы нашу систему не взломали дальше, блокировать уязвимый файл, и желательно уведомлять о проишествии администратора.

Но как же добавить php код в /etc/passwd ведь его синтаксис жестко регламентирован? У каждого пользователя есть поле «comment» — описание пользователя, туда можно вписать все что угодно (за исключением двоеточия, разумеется). Поэтому берем и добавляем пользователя в систему с нужным нам комментарием. После этого /etc/passwd будет содержать вот такую строчку

root:x:0:0:Superuser:/:
daemon:*:1:5::/:/sbin/sh
bin:*:2:2::/usr/bin:/sbin/sh
sys:*:3:3::/:
adm:*:4:4::/var/adm:/sbin/sh
securityuser:*:1001:1001:<?php include(«[ваш секурити скрипт]»); ?>:/:

Ну а в подключаемом скрипте уже выполняем нужные вам действия — баним пользователя, блокируем обращение, уведомляем администратора.

В итоге у нас получилась своебразная ловушка, которая сможет защитить ваш сайт от взлома.

Заключение

Да, я вполне отдаю себе отчет, что все написанное выше похоже на бред. И прекрасно понимаю, что никто это на практике использовать не будет. Но писал я не для этого. Писал я для того чтобы показать пример нестандартного подхода в области защиты.

Спасибо за внимание =)

  1. Сергей

    С каких пор «хакер» пишется с двумя «к»? Вы, видимо, в школе изучали немецкий.!? В английском языке буквы «ck» образуют звук «к», поэтому на транслите слово пишется как «хакер».

    1. Дмитрий Амиров Автор

      Гм… да нет изучал английский. Почему то в памяти и интуитивно отложилось такое вот написание. Хотя, сейчас вот глянул другие записи, и заметил что где то я писал с одной «к», где то с двумя.
      Вобще не очень люблю тех кто цепляется к орфографии, но Вам спасибо что обратили на это мое внимание, буду исправлятся =)

Добавить комментарий

Прочли запись? Понравилась? Не стесняйтесь, оставьте, пожалуйста, свой комментарий. Мне очень интересно, что вы думаете об этом. Кстати в комментарии вы можете задать мне любой вопрос. Я обязательно отвечу.

Вы можете оставить коментарий анонимно, для этого можно не указывать Имя и email. Все комментарии проходят модерацию, поэтому ваш комментарий появится не сразу.