Visualizzazione risultati 1 fino 17 di 17

Discussione: Problemi di bot/spam

  1. #1
    L'avatar di TRAX3D
    TRAX3D non è connesso Utente giovane
    Data registrazione
    08-12-2004
    Residenza
    Ossola
    Messaggi
    81

    Angry Problemi di bot/spam

    Salve,
    ho cercato con la funzione cerca ma sembra che tutti abbiano problemi con spammers e bot con phpBB joomla e wordpress.... mentre io ho un sito con registrazione scritto da me in PHP quindi non dovrei avere gli stessi tipi di bug...
    ho notato che si registra un utente che in realtà è un BOT inserendo una mail che non esiste, il mio sistema manda una active key all'indirizzo email inserito creandolo al momento dell'iscrizione in questo modo:
    Codice PHP:
    $actkey = mt_rand(10000,99999).time().$email;
    $act = sha1($actkey);
    la cosa che mi fa strano è che pur non avendo ricevuto la mail alcune iscrizioni fasulle sono attivate quindi in qualche modo riesce a generare una active-key valida e si attiva l'iscrizione....
    Ma quello che mi fa incaz.... è che da ieri ho messo un captcha a 6 lettere e stanotte ho avuto 3 iscrizioni .... quindi il captcha gli fa un baffo????
    potete darmi qualche consiglio?

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Citazione Originalmente inviato da TRAX3D Visualizza messaggio
    la cosa che mi fa strano è che pur non avendo ricevuto la mail alcune iscrizioni fasulle sono attivate quindi in qualche modo riesce a generare una active-key valida e si attiva l'iscrizione....
    Evidentemente c'è qualche problema nel tuo codice allora, magari SQL Injection. In tal caso però è meno probabile siano attacchi generici automatizzati.

  3. #3
    L'avatar di TRAX3D
    TRAX3D non è connesso Utente giovane
    Data registrazione
    08-12-2004
    Residenza
    Ossola
    Messaggi
    81

    Predefinito

    No tenderei ad escludere Injection (ho scoperto ora che cosa è) visto che l'utente attiva ha un campo crediti di valore 100 che è lo stesso valore che imposta la pagina activate.php richiamata dal link con il codice generato.
    Per ora sembra che sia riuscito a bloccarlo con un controllo sul campo Società che è opzionale e può restare vuoto, ho notato che il bot ci scriveva 1 sola lettera oppure [Varies] oppure [116 row a seat], speriamo che sia sufficente...
    Conviene far un controolo e un ban temporanei agli IP?
    Mi consigliate altro?

  4. #4
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Citazione Originalmente inviato da TRAX3D Visualizza messaggio
    No tenderei ad escludere Injection (ho scoperto ora che cosa è)
    Molto male.
    Citazione Originalmente inviato da TRAX3D Visualizza messaggio
    visto che l'utente attiva ha un campo crediti di valore 100 che è lo stesso valore che imposta la pagina activate.php richiamata dal link con il codice generato.
    E quindi? Potrebbe recuperare il codice corretto dal database mediante SQL injection, oppure effettuare una SQL injection proprio nella pagina che verifica l'"active key", a seconda di come hai scritto il codice.
    Citazione Originalmente inviato da TRAX3D Visualizza messaggio
    Per ora sembra che sia riuscito a bloccarlo con un controllo sul campo Società che è opzionale e può restare vuoto, ho notato che il bot ci scriveva 1 sola lettera oppure [Varies] oppure [116 row a seat], speriamo che sia sufficente...
    Conviene far un controolo e un ban temporanei agli IP?
    Non aggirare il problema: identificalo e risolvilo. Se qualcuno è riuscito a fare una cosa simile i tuoi script presentano un problema di sicurezza che devi risolvere. Limitando l'accesso ad alcuni IP non risolvi nulla, al più rimandi la risoluzione del problema a dopo.

    Comincia con il riportare il codice della pagina activate.php, così vediamo se lì ci sono falle sfruttabili.

  5. #5
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Oltre quanto consigliato da Karl, prova a capire se tali bot usano effettivamente quella pagina oppure no!
    Quindi stampa l'eventuale Form in javascript (a prova di bot) e/o aggiungi un campo hidden (da salvare) così vedrai se passan davvero da lì (se quel campo è presente oppure no).
    Oltre ciò, se non si tratta di sql onjection, puoi provare recaptcha invece del semplice captcha, e magari un un campo 'honeypot'.
    Ultima modifica di darkwolf : 31-01-2017 alle ore 18.14.59

  6. #6
    L'avatar di TRAX3D
    TRAX3D non è connesso Utente giovane
    Data registrazione
    08-12-2004
    Residenza
    Ossola
    Messaggi
    81

    Predefinito

    Scusate le mie mancanze ma non sono un programmatore professionista...

    farò un log di tutti i tentativi di registrazione al più presto

    la pagina activate.php
    Codice PHP:
    <?php
    include 'lib/pagina.php';
    include
    'lib/config.php'; //Per connessione a database

    sopra_testa();
    titolo("Attivazione");
    testa();
    sotto_testa();

    titoloh2("Attivazione");
    iniziocontenuto();

    $id = $_GET['id'];

    $query = mysql_query("SELECT * FROM Users WHERE Actkey = '$id' LIMIT 1") or die(mysql_error());
    $row = mysql_fetch_array($query);

    if(
    mysql_num_rows($query) > 0){

    if (
    $row['Activated'] == '1') {echo '<pm>Attenzione!, account già attivo<BR><pm>';goto salta_activate;}


    $user = $row['id'];

    $do = mysql_query("UPDATE Users SET Activated = 1 WHERE id = '$user' LIMIT 1") or die(mysql_error());

    //Regalo $FirstBonus crediti all'attivazione*********************************************************
    $FirstActivation = $row['FirstActivation'];
    if (
    $FirstActivation == '0')
    {
    //Do il FirstBonus + attivo FirstActivation + do Potere 1 => 'Utente'
    $do1 = mysql_query("UPDATE Users SET
    Credito =
    $FirstBonus,
    FirstActivation = 1,
    Poteri = 1
    WHERE id = '
    $user' LIMIT 1") or die(mysql_error());
    reg_forum($row['Username'], $row['Password'], $row['Email'], $row['IP'], 'it');
    }
    //***************************************************************************************************

    $message = "Grazie per aver attivato il tuo account, ora sei registrato e puoi utilizzare i nostri servizi.\n\n";
    if (
    $FirstActivation == '0') $message .= "Ti sono stati accreditati $FirstBonus CREDITI\n\n";
    $message .= "Per loggare, clicca questo link: $SiteLink/login.php";

    $send = mail($row['Email'], "Conferma di attivazione", $message, "FROM: ".$MittEmail);

    if((
    $do)&&($send))
    {
    echo
    '<link href="style.css" rel="stylesheet" type="text/css">
    <div id="success">
    <p>Account attivato. Una email di conferma ti è stata inviata. Ora puoi loggarti.</p>
    <p><a href="login.php">Clicca qui</a> per andare alla pagina di login.</p>
    </div>'
    ;
    if(
    $do) echo '<p>Do è OK<p>';
    if(
    $send) echo '<p>Send è OK<p>';
    } else {
    echo
    '<link href="style.css" rel="stylesheet" type="text/css">
    <div id="error">
    <p>Spiacenti, è accaduto un errore durante il processo di attivazione. Per favore riprova.</p>
    </div>'
    ;
    if(
    $do) echo '<p>Do è OK<p>';
    if(
    $send) echo '<p>Send è OK<p>';
    }

    } else {

    echo
    '<link href="style.css" rel="stylesheet" type="text/css">
    <div id="error">
    <p>Spiacenti, il tuo codice di attivazione è incorretto. Per favore riprova.</p>
    </div>'
    ;

    }
    salta_activate:

    mysql_close($l);

    finecontenuto();

    fondo();
    ?>

  7. #7
    L'avatar di TRAX3D
    TRAX3D non è connesso Utente giovane
    Data registrazione
    08-12-2004
    Residenza
    Ossola
    Messaggi
    81

    Predefinito

    ecco il bot

    3
    93.170.130.95
    data:01, 02 17 Nome:IsaacRor Cognome:IsaacRorON User:IsaacRor Soc:116 row a seat 20 email:owen@1milliondollars.xyz pass:cy32z7SbvK campovuoto:
    5
    46.119.127.74
    data:01, 02 17 Nome:DanielFoolo Cognome:DanielFooloTV User:DanielFoolo Soc:116 row a seat 20 email:owgfikeley@sills25.browndecorationlights.com pass:s57Ly4innK campovuoto:
    6
    89.26.248.3
    data:02, 02 17 Nome:MichaelBiara Cognome:MichaelBiaraPQ User:MichaelBiara Soc:116 row a seat 20 email:ililina1977@rambler.ru pass:3P9bq1epkU campovuoto:
    7
    188.232.75.96
    data:02, 02 17 Nome:ÄîëîđĺńńSlers Cognome:ÄîëîđĺńńSlersGZ User:ÄîëîđĺńńSlers Soc:116 row a seat 20 email:doloress.ignotenvovas@yandex.ru pass:2yy5Bq9vsF campovuoto:
    8
    46.119.127.74
    data:02, 02 17 Nome:Jeremyaluck Cognome:JeremyaluckGD User:Jeremyaluck Soc:1 email:pcfjcgnfli@duve.leathermenshoes.com pass:3wjo2z5XnA campovuoto:

  8. #8
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Prendi un file incluso da tutte quante le pagine ed inserisci in questo del codice per registrare tutte le richieste in maniera dettagliata (salvati il contenuto di $_SERVER e $_POST), così da poter identificare quali sono effettivamente le richieste effettuate e quali parametri vengono passati.
    Il codice che hai riportato è vulnerabile ad attacchi di tipo SQL injection: con una singola richiesta HTTP un malintenzionato può eliminare tutti i dati contenuti sul tuo database.
    Correggi il codice in modo che non sia possibile effettuare SQL injection, leggi http://php.net/manual/en/security.da...-injection.php.
    Ultima modifica di karl94 : 03-02-2017 alle ore 20.36.18

  9. #9
    L'avatar di TRAX3D
    TRAX3D non è connesso Utente giovane
    Data registrazione
    08-12-2004
    Residenza
    Ossola
    Messaggi
    81

    Predefinito

    Allora dai log delle pagine register e activate vedo che non usa injection ma delle registrazioni fatte da probabilmente da BOT e poi manda più activate per azzeccare il codice di attivazione.
    Ora che l'ho bloccato ha usato una mail vera per ricevere activateID, credo che sia per capire come riprodurlo (mia ipotesi)...
    Ora come lo posso fermare???

    Il recaptcha di google può funzionare?
    Ultima modifica di TRAX3D : 07-02-2017 alle ore 13.03.25

  10. #10
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Citazione Originalmente inviato da TRAX3D Visualizza messaggio
    Il recaptcha di google può funzionare?
    Sì, ma sistema le vulnerabilità SQL injection.

  11. #11
    L'avatar di TRAX3D
    TRAX3D non è connesso Utente giovane
    Data registrazione
    08-12-2004
    Residenza
    Ossola
    Messaggi
    81

    Predefinito

    Citazione Originalmente inviato da karl94 Visualizza messaggio
    Sì, ma sistema le vulnerabilità SQL injection.
    basta filtrare le immissioni e togliere '=' o la cosa è molto più complessa?

  12. #12
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Facciamo così: prendi il codice che hai già riportato qua e prova a sistemare tutte le vulnerabilità, quindi riporta il risultato.
    Ad ogni modo, hai ben compreso come si possono sfruttare e cosa comportano? E perché si possono sfruttare?

  13. #13
    L'avatar di TRAX3D
    TRAX3D non è connesso Utente giovane
    Data registrazione
    08-12-2004
    Residenza
    Ossola
    Messaggi
    81

    Predefinito

    Ok diciamo che per il login ho questa stringa che mi cripta la password quindi dovrebbe essere a prova di injection
    Codice PHP:
    $username = trim(addslashes($_POST['username']));
    $password = md5(trim($_POST['password']));

    //Mi connetto al database
    $query = mysql_query("SELECT * FROM Users WHERE Username = '$username' AND Password = '$password' LIMIT 1") or die(mysql_error());
    $row = mysql_fetch_array($query);
    correggetemi se sbaglio, anche se la query dell'username mi da TRUE ma quella della password essendo criptata anche se metti una cosa <’ or ‘1’=’1> <’ or ‘1’=’1’ — ‘> <’ or ‘1’=’1’ ({ ‘> <’ or ‘1’=’1’ /* ‘> viene bloccata.

  14. #14
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Citazione Originalmente inviato da TRAX3D Visualizza messaggio
    Ok diciamo che per il login ho questa stringa che mi cripta la password quindi dovrebbe essere a prova di injection
    La tesi è corretta, le premesse un po' meno.
    La funzione PHP md5 restituisce una stringa di 32 caratteri composta da cifre (0-9) e lettere (a-f). Con qualsiasi stringa di questo tipo non è possibile alterare quella query in modo da farle fare qualcos'altro.
    Ad ogni modo la funzione md5 non è una funzione di cifratura, ma è una funzione di hash. Sono due cose estremamente differenti e si usano per scopi differenti. Una funzione di cifratura ha sempre l'inversa per decifrare, una funzione hash è invece a senso unico.
    Premesso questo, usare md5 come hash per le password poteva andare bene forse dieci anni fa. Adesso una cosa del genere è poco sicura: se uno riesce ad ottenere gli hash dal tuo database (e probabilmente ci si riesce senza troppe difficoltà) può facilmente ottenere le password in chiaro con vari tipi di attacco (brute force, rainbow table o anche banalmente cercando l'hash su un motore di ricerca).
    Usa piuttosto le funzioni password_hash e password_verify.
    E non chiamare trim sul contenuto della password.
    Citazione Originalmente inviato da TRAX3D Visualizza messaggio
    correggetemi se sbaglio, anche se la query dell'username mi da TRUE ma quella della password essendo criptata anche se metti una cosa <’ or ‘1’=’1> <’ or ‘1’=’1’ — ‘> <’ or ‘1’=’1’ ({ ‘> <’ or ‘1’=’1’ /* ‘> viene bloccata.
    Non è quello il punto: non sono due query separate, è una singola query. Se $username fosse sufficientemente manipolabile l'attaccante potrebbe semplicemente fare in modo che abbia come valore
    Codice:
    nomeutente'#
    in questo modo, la query diverrebbe
    Codice:
    SELECT * FROM Users WHERE Username = 'nomeutente'#' AND Password = '5f4dcc3b5aa765d61d8327deb882cf99' LIMIT 1
    Nel tuo caso però usi addslashes, quindi sul codice che hai riportato è possibile un attacco di questo tipo solamente se utilizzi codifiche di carattere particolari (leggi http://shiflett.org/blog/2006/jan/ad...-escape-string).

    Il codice di activate.php che hai riportato invece non ha alcuna protezione: si può sfruttare questo per effettuare una qualsiasi modifica al database (anche eliminare tutte le tabelle). Leggi ad esempio http://stackoverflow.com/questions/9...uery-of-select

  15. #15
    L'avatar di TRAX3D
    TRAX3D non è connesso Utente giovane
    Data registrazione
    08-12-2004
    Residenza
    Ossola
    Messaggi
    81

    Predefinito

    Salve,
    ci sto lavorando alla messa in sicurezza ma oggi che ho postato le modifiche mi trovo di fronte a questo problema:
    Codice PHP:
    <?php
    echo password_hash("ciao", PASSWORD_BCRYPT);
    ?>
    risultato?
    Fatal error: Call to undefined function password_hash() in /membri2/trax3d/Temp/test_password.php on line 2

    mentre sul mio PC con EasyPHP funziona tutto perfettamente....
    Ultima modifica di TRAX3D : 03-03-2017 alle ore 15.31.58

  16. #16
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    La versione di PHP deve essere almeno 5.5 per poter utilizzare password_hash. Puoi modificare la versione di PHP dal pannello di controllo di AlterVista

  17. #17
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Perché hai scelto di usare l'algoritmo PASSWORD_BCRYPT?

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •