Создать аккаунт через 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));

    Помогите, как можно что-то сделать? За помощь помогу в ответ оплатой.
     
    1. 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'";
      фильтрации не вижу
       
      1. newsql

        newsql New Member

        Joined:
        7 Jan 2023
        Messages:
        7
        Likes Received:
        0
        Reputations:
        0
        Можете подсказать, как можно сделать запрос, чтобы передать параметры? За оплату. Дополнительно, если есть возможность, как поставить фильтрацию.
         
        1. 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
          1. 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
             
            1. newsql

              newsql New Member

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

                newsql New Member

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