• User

    interessante.... lo script che ho installato l'ho acquistato qualche tempo fa e funziona in questo modo: all'atto dell'iscrizione da parte di un utente si riceve un ID e una PW. Tramite questi si accede in una pagina personale dove vi è la possibilità di scaricare prodotti digitali, che io, come amministratore posso inserire. Al programma è applicato un sistema a matrice forzata 4X10. Ammettiamo che io abbia ID=1 e tramite un link personale generato all'atto dell'adesione faccia iscrivere un utente "ID=2".
    A questo punto "ID=2" verrebbe posizionato dal programma al mio 1° livello inferiore.
    Ammettiamo ora che "ID=2" a sua volta inserisca "ID=3".
    A questo punto "ID=3" verrebbe posizionato al mio 2° livello inferiore e così via.
    Questo appunto dovrebbe avvenire correttamente, invece anche "id=3" mi viene posizionato al 1° livello inferiore.
    La mia spiegazione è stata un pò contorta ma spero di essermi fatto capire bene.
    Ora non so se questo errore sia dovuto a qualche errore di programmazione o se dipenda dal database.
    Che ne pensi?
    grazie


  • User

    Senza ulteriori dettagli è difficile da capire, credo sia un errore di programmazione.

    In ogni caso considera che se tutte le query sono fatte in quel modo esiste una possibilità concreta che sia possibile forzare la verifica e scaricare i prodotti digitali assegnati ad altri utenti.


  • User

    esiste qualche modo per potersi proteggere da questo?
    se posto il file con la programmazione della matrice ci puoi dare uno sguardo?
    grazie


  • User

    Postalo pure, sperando che il codice non sia troppo confuso 🙂


  • User

    ti ringrazio 🙂
    intanto nel file config.php oltre ai dati di accesso per il database c'è questo che non so se può ritornarti utile

    //Don't change the below 2 lines
    $dbconnect=mysql_connect($dbhost,$dbuser,$dbpass);
    mysql_select_db($dbname);

    $rs=mysql_query("select * from adminsettings");
    if(mysql_num_rows($rs)>0) {
    $arr=mysql_fetch_array($rs);
    $sitename=$arr[0];
    $siteurl=$arr[1];
    $webmasteremail=$arr[2];
    $adminpass=$arr[3];

    $alertpay=$arr[4];

    $fee=$arr[7];

    $levels=$arr[8];

    $level1=$arr[9];
    $level2=$arr[10];
    $level3=$arr[11];
    $level4=$arr[12];
    $level5=$arr[13];
    $level6=$arr[14];
    $level7=$arr[15];
    $level8=$arr[16];
    $level9=$arr[17];
    $level10=$arr[18];

    $forcedmatrix=$arr[19];
    $membershipperiod=$arr[20];
    $signupbonus=$arr[21];
    }

    Per quanto riguarda il file per la matrice credo si trovi nel file members.php;
    io provo a postartelo tutto perchè non saprei estrapolare la parte che realmente possa essere utile. Purtroppo e molto lungo e ti chiedo scusa in anticipo.

    <?php
    session_start();
    session_register("id_session");
    session_register("password_session");
    include "header.php";
    include "config.php";
    $a="";
    $b="";

    if ($_POST) {
    $a=trim($_POST["id"]);
    $b=trim($_POST["password"]);
    $a=str_replace("'","",$a);
    $b=str_replace("'","",$b);
    $a=str_replace(""","",$a);
    $b=str_replace(""","",$b);

    }
    if ($a=="" || $b=="")
    {

    if ($_SESSION["id_session"]=="" || $_SESSION["password_session"]=="")
    {

    ?>

    <form action=members.php method=post>

    <br><br><Center><table><tr><td colspan=2 align=center><h3>Members Login Area</h3></td></tr>
    <tr><td>Member's ID</td><td><input type=text name=id></td></tr>
    <tr><td>Password</td><td><input type=password name=password></td></tr>
    <tr><td> </td><td>
    <a href="forgot.php" onclick="doexit=false;"><font face="Verdana,Arial,Helvetica" size="1" color="#000000"><b>Forgot Your Password?</b></font></a></td></tr>
    <tr><td colspan=2 align=center><input type=submit value="Log In"></td></tr>
    </table></form>

    <?

    }
    else
    {
    middle();
    }
    }
    else
    {
    $check=0;

    $id=$_POST["id"];
    $rs = mysql_query("select * from members where ID='$id'");

    if ($rs) {
    $arr=mysql_fetch_array($rs);
    $n2=$arr['Password'];
    if ($n2==$b) {
    $check=1;
    $_SESSION["id_session"]=$arr[0];
    $_SESSION["password_session"]=$arr[9];
    middle();
    }
    }
    if ($check==0)
    {
    print "<h2>Invalid User Id or Password</h2>";
    ?>

    <form action=members.php method=post>

    <br><br><Center><table><tr><td colspan=2 align=center><h3>Members Login Area</h3></td></tr>
    <tr><td>Member's ID</td><td><input type=text name=id></td></tr>
    <tr><td>Password</td><td><input type=password name=password></td></tr>
    <tr><td> </td><td>
    <a href="forgot.php" onclick="doexit=false;"><font face="Verdana,Arial,Helvetica" size="1" color="#000000"><b>Forgot Your Password?</b></font></a></td></tr>
    <tr><td colspan=2 align=center><input type=submit value="Log In"></td></tr>
    </table></form>
    <?
    }
    }

    function middle()
    {

    $id=$_SESSION["id_session"];
    $rs = mysql_query("select * from members where ID=$id");
    $arr=mysql_fetch_array($rs);
    $check=1;
    $id=$arr[0];
    $password=$arr[9];
    $name=$arr[1];
    $address=$arr[2];
    $city=$arr[3];
    $state=$arr[4];
    $zip=$arr[5];
    $country=$arr[6];
    $phone=$arr[7];
    $email=$arr[8];
    $password=$b;
    $paymentoption=$arr[10];
    $refby=$arr[11];
    $l1=$arr[12];
    $l2=$arr[13];
    $l3=$arr[14];
    $l4=$arr[15];
    $l5=$arr[16];
    $l6=$arr[17];
    $l7=$arr[18];
    $l8=$arr[19];
    $l9=$arr[20];
    $l10=$arr[21];
    $leader=$arr[22];
    $total=$arr[23];
    $unpaid=$arr[24];
    $paid=$arr[25];

    ?>
    <table border="0" width="650">
    <tr>
    <td width="150" valign="top">
    <table width="140">
    <tr>
    <td align="left"><br><br><br><br>
    <ul><font face="verdana" size="1">
    <a href="stats.php">Statistics</a><br><br>
    <a href="update_pf.php">Edit Personal Information</a><br><br>
    <a href="sample_e.php">Referral Code & Links</a><br><br>
    <a href="logout.php">Logout</a><br><br>

    </td></tr></table>
    </td>
    <td VALIGN="top">
    <table>
    <tr>
    <td>
    <font face="verdana" size="3"><b>
    <p>Account Center</b></font></p>

    <br>
    </td>
    </tr>
    <tr>
    <td>

    <div align="center">
    <table border="0" cellpadding="3" cellspacing="0" width="400">

    	      <tr> 
    	        <td colspan="2"><b>
    	         <hr><font face="Verdana, Arial, Helvetica, sans-serif" size="-1"><center>&nbsp;Account Details for <?echo $name;?></font></center></b><hr>
    	        </td>
    	      </tr>
    	      <tr> 
    	        <td valign="center" align="left"><strong><font face="Verdana" size="-1">Total Commisions Earned: </font></strong><br></td>
    	        <td valign="center"> <font face="Verdana" size="-1">$<? echo $total;?></font><br></td>
    	      </tr>
    	      <tr> 
    	        <td valign="center" align="left"><strong><font face="Verdana" size="-1">Commisions Due: </font></strong><br></td>
    	        <td valign="center"> <font face="Verdana" size="-1">$<? echo $unpaid;?></font><br></td>
    	      </tr>
    	      <tr> 
    	        <td valign="center" align="left"><strong><font face="Verdana" size="-1">Commisions Paid: </font></strong><br></td>
    	        <td valign="center"> <font face="Verdana" size="-1">$<? echo $paid;?></font><br></td>
    	      </tr>
    	      <tr> 
    	        <td valign="center" align="left" colspan=2>&nbsp;</td>
    	      </tr>
    	      <tr> 
    	        <td valign="center" align="left"><strong><font face="Verdana" size="-1">Direct Referrals: </font></strong><br></td>
    	        <td valign="center"> <font face="Verdana" size="-1"><?
    

    $rsd=mysql_query("select * from members where Leader=".$id);
    echo mysql_num_rows($rsd); ?></font><br></td>
    </tr>
    <tr>
    <td valign="center" align="left" colspan=2> </td>
    </tr>
    <tr>
    <td valign="center" align="left" colspan=2><strong><font face="Verdana" size="3">Downline Information </font></strong><br></td>
    </tr>

    	      <tr> 
    	        <td valign="center" align="left"><strong><font face="Verdana" size="-1">Total Downline Size: </font></strong><br></td>
    	        <td valign="center"> <font face="Verdana" size="-1"><?     echo ($l1+$l2+$l3+$l4+$l5+$l6+$l7+$l8+$l9+$l10); ?></font><br></td>
    	      </tr>
    		<tr><td colspan=2>
    
    		<Table width=100%>
    		<tr><td bgcolor=#000000><strong><font face="Verdana" size="-1" color=#ffffff>Level</font></strong></td>
    		<td bgcolor=#000000><strong><font face="Verdana" size="-1" color=#ffffff>Number of Members</font></strong></td>	</tr>
    

    <? include "config.php"; ?>
    <? for($i=1;$i<=$levels;$i++) { ?>
    <tr><td><strong><font face="Verdana" size="-1"><? echo $i; ?></font></strong></td>
    <td ><font face="Verdana" size="-1">
    <?
    if($i==1) {
    echo $l1;
    }
    elseif($i==2) {
    echo $l2;
    }
    elseif($i==3) {
    echo $l3;
    }
    elseif($i==4) {
    echo $l4;
    }
    elseif($i==5) {
    echo $l5;
    }
    elseif($i==6) {
    echo $l6;
    }
    elseif($i==7) {
    echo $l7;
    }
    elseif($i==8) {
    echo $l8;
    }
    elseif($i==9) {
    echo $l9;
    }
    elseif($i==10) {
    echo $l10;
    }
    ?>
    </font></td> </tr>
    <? } ?>
    </table>
    </td></tr>
    <tr><td colspan=4><hr></td><tr>
    </table>
    </div>

    		</td>
    	</tr>
    
    </table>
    		<font face="verdana" size="3"><b>
    		<p>Download Center</b></font></p>
    

    <?
    include "download.php";
    ?>
    </td>
    </tr>
    </table>
    <br><br>
    <?
    }
    include "footer.php";
    ?>


  • User

    Devo darti una brutta notizia 🙂

    Anche il codice che hai postato è passibile di sql injection.

    Cioè tramite il form di login è possibile eseguire query arbitrarie sul database.

    Probabilmente nel file download.php c'è l'algoritmo che verifica se l'utente è autorizzato a scaricare i prodotti digitali. Ma quasi sicuramente si può scavalcare resettando le password tramite il form di login.


  • User

    capisco...... ma quello che ho postato è il file giusto dove è impostato il funzionamento della matrice?


  • User

    Credo sia quello giusto ma senza avere la struttura del database sottomano è molto difficile da capire se il funzionamento è quello atteso visto che chi ha programmato lo script preleva i dati facendo riferimento non al nome del campo ma alla sua posizione nella query (ad esempio vedi i vari $arr[19] etc.etc.).

    In ogni caso, scusa la franchezza, ma credo che il corretto funzionamento della matrice sia l'ultimo dei tuoi problemi.


  • User

    il problema dell'esecuzione delle query arbitrarie sul database può essere risolto in qualche modo? Il problema potrebbe essere un infiltrazione da parte di utenti esterni anche non iscritti?


  • User

    Ti consiglio di contattare l'autore e segnalare il problema. Il problema lo puoi risolvere (come spiegato nella pagina di wikipedia che ti ho linkato) validando l'input ricevuto attraverso il form.

    Oltre all'infiltrazione di utenti esterni qualcuno potrebbe cancellare tutti i tuoi dati, cambiare la password di tutti gli utenti e altri giochetti del genere.


  • User

    Proverò a contattare l'autore dello script o meglio il sito dove l'ho acquistato e cercherò di esporre il problema; spero di riuscirci anche se il sito è in inglese. Se riuscissi comunque a risolvere il problema della matrice per me sarebbe comunque un passo importante. Mi hai detto che senza avere la struttura del database sarebbe difficile capire il funzionamento, ma se te la fornissi riusciresti a venirne a capo?


  • User

    Mi dispiace ma non ho tempo da dedicare a questa cosa