Создать аккаунт через PHP

Discussion in 'PHP' started by newsql, 24 Jan 2023.

  1. newsql

    newsql New Member

    Joined:
    7 Jan 2023
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте. Имеется вот такой PHP файл в корне сайта:
    Как видно из кода создается аккаунт через запрос -

    $premium_group=6;

    $q="INSERT INTO " . USERPREFIX . "_users (name, password, email, reg_date, lastdate, user_group, info, signature, favorites, xfields, logged_ip, hash)
    VALUES ('$name', '$regpassword', '$email', '$add_time', '$add_time', '$premium_group', '', '', '', '', '$_IP', '$hash')";

    Можно как-то хакнуть и создать аккаунт и указать premium_group=1?


    PHP:
    <?
    $method=$_GET['method'];
    $secretKey="58118db78620cb1b289a382c6f81c69b";
    $line=$method;
    foreach (
    $_GET['params'] as $k=>$v){
     if (
    $k!="signature"){
        
    $line.='{up}'.$v;
      }
    }
    $line.='{up}'.$secretKey;
    $sig=hash("sha256",$line);
    if (
    $sig!=$_GET['params']['signature']){
    $ret['error']=array('message'=>"bad signature");
    die(
    json_encode($ret));

    }

    function 
    set_cookie($name$value$expires) {
        global 
    $config;
        if( 
    $expires ) {     $expires time() + ($expires 86400);
        } else {              
    $expires FALSE;    }
    setcookie$name$value$expires"/"DOMAINTRUETRUE );
    }


    $account=$_GET['params']['account'];

    //file_put_contents('data.txt',print_r($_GET,true)."|".print_r($_POST,true)."\r\n---------",FILE_APPEND);
    if ($_GET['method']=='pay'||$_GET['method']=='check'){
    define 'DATALIFEENGINE'true );
    define 'ROOT_DIR'dirname __FILE__ ) );
    define 'ENGINE_DIR'$_SERVER['DOCUMENT_ROOT'] . '/engine' );

    require_once (
    ENGINE_DIR '/classes/plugins.class.php');

    require_once (
    ENGINE_DIR.'/data/dbconfig.php');
    if (
    $_GET['method']=='check'){
        
    $q="SELECT * FROM " USERPREFIX "_users WHERE email='".$account."' AND user_group = '6'";
        
    $res=$db->query$q );
        if (
    $res->num_rows==0){
            
    $ans="Услуга доступна для аккаунта $account";
        
    $ret['result']=array('message'=>$ans);
        die(
    json_encode($ret));
        }else{
            
    $res=$res->fetch_assoc();
            
    $ret['error']=array('message'=>"Услуга уже куплена для аккаунта ".$account."");
        die(
    json_encode($ret));
        }
    }
    $email=$account;
    if(!
    filter_var($accountFILTER_VALIDATE_EMAIL)){
        
    $ret['error']=array('message'=>"Не верное имя аккаунта ".$account."");
        die(
    json_encode($ret));

    }
    if (
    $_GET['method']!='pay'){
        
    $ret['error']=array('message'=>"Не верное имя метода ".$_GET['method']."");
        die(
    json_encode($ret));

    }

    session_start();
    $name uniqid();
    $count_letter_pwd 8;
    $chars "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $password =substr(str_shuffle($chars), 0$count_letter_pwd);//"12345678";
    $regpassword $db->safesqlpassword_hash($passwordPASSWORD_DEFAULT) );
        if(
    function_exists('openssl_random_pseudo_bytes')) {
                
    $stronghash md5(openssl_random_pseudo_bytes(15));
            } else 
    $stronghash md5(uniqidmt_rand(), TRUE ));
            
    $salt sha1str_shuffle("abcdefghjkmnpqrstuvwxyz0123456789") . $stronghash );
            
    $hash '';
       for(
    $i 0$i 9$i ++) {
                
    $hash .= $salt[mt_rand039 )];
            }
            
    $hash md5$hash );
        
    $premium_group=6;
        
    $q="INSERT INTO " USERPREFIX "_users (name, password, email, reg_date, lastdate, user_group, info, signature, favorites, xfields, logged_ip, hash)
        VALUES ('
    $name', '$regpassword', '$email', '$add_time', '$add_time', '$premium_group', '', '', '', '', '$_IP', '$hash')";

            
    $db->query$q );
            
    $id $db->insert_id();
                
    set_cookie"dle_user_id"$id365 );
                
    set_cookie"dle_password"md5($regpassword), 365 );
                if( 
    $config['log_hash'] ) {
                    
    set_cookie"dle_hash"$hash365 );
                }
                
    $_SESSION['dle_user_id'] = $id;
                
    $_SESSION['dle_password'] = md5($regpassword);
    //    $db->query("UPDATE " . USERPREFIX . "_users SET user_group = '6' WHERE user_id='".$res['user_id']."'");
    require_once 'vendor/autoload.php';
    $mail_theme "Регистрация на сайте ";
    $mail_body"{date} - дата регистрации.<br>\n{time} - время регистрации.<br>\n{login} - ваш логин.<br>\n{email} - ваш email.<br>\n{password} - ваш пароль.";
    $mail_body'Тут текст';
     
    $mail_body str_replace(
                    [  
    "{login}",
                        
    "{email}",
                        
    "{password}",
                    ],
                    [  
    $name,
                        
    $email,
                        
    $password   ],
                    
    $mail_body
                
    );
    //            include_once (DLEPlugins::Check(ENGINE_DIR . '/classes/mail.class.php'));
    //            $mail = new dle_mail( $config, true );
                  
    $mail = new PHPMailer\PHPMailer\PHPMailer();
                  
    $mail->CharSet 'UTF-8';
                
    /**/
                
    $mail->setFrom' noreply@''' );
                
    $mail->addAddress($email);
                
    $mail->Subject  $mail_theme;
                
    $mail->Body     $mail_body;
                
    $mail->isHTMLtrue );
                
    $mail->send();
        
    $ans="Услуга оплачена для аккаунта $account";
        
    $ret['result']=array('message'=>$ans);
        die(
    json_encode($ret));
    }

    $ret['error']=array('message'=>"unknown error on site");
    die(
    json_encode($ret));

    Помогите, как можно что-то сделать? За помощь помогу в ответ оплатой.
     
  2. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    скрипт подвержен иньекции кода SQL
    Code:
    $account=$_GET['params']['account'];
    $q="SELECT * FROM " . USERPREFIX . "_users WHERE email='".$account."' AND user_group = '6'";
    фильтрации не вижу
     
  3. newsql

    newsql New Member

    Joined:
    7 Jan 2023
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Можете подсказать, как можно сделать запрос, чтобы передать параметры? За оплату. Дополнительно, если есть возможность, как поставить фильтрацию.
     
  4. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    добавься в жабер ну или тут в пм пиши, и ссылку на сайт не забудь, где этот скрипт
     
    #4 b3, 25 Jan 2023
    Last edited: 4 Feb 2023
  5. Logan22

    Logan22 Member

    Joined:
    11 Sep 2009
    Messages:
    119
    Likes Received:
    17
    Reputations:
    0
    Использовать плейсхолдеры.
    https://www.php.net/manual/ru/pdo.prepare.php

    P.S. Скрипт написал очень плохо и долго быть много notice
     
  6. newsql

    newsql New Member

    Joined:
    7 Jan 2023
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Можете для этого скрипта помочь составить запрос с плейсхолдером? Я просто не шарю в этом) За оплату сделайте?
     
  7. newsql

    newsql New Member

    Joined:
    7 Jan 2023
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Кому дать ссылку на этот файл с исходным кодом? поиграетесь, может удастся взломать)