SQL Injection tramite addslashes

9

Sto cercando di capire come un sito web può essere hackerato usando addslashes in PHP e MySQL per scopi didattici.

Dopo aver letto questo argomento e questo argomento , cerco di capire come può aggirare con qualcosa come 0xbf27 che può essere convertito in 0xbf5c27 utilizzando addslashes .

Quindi eseguo manualmente una query per l'impostazione del set di caratteri.

set character set 'gbk'; 

Il carattere per questo scopo deve essere che è bf27 . Secondo ciò che dicono negli argomenti di cui sopra, deve essere convertito in qualcosa come bf5c27 ma quando lo collaudo nel mio laboratorio con un codice PHP come questo:

$query  = "SELECT first_name, last_name FROM users WHERE user_id = '".addslashes($id)."';";
echo $query;
$result = mysql_query($query) or die( '<pre>' . mysql_error() . '</pre>' );

E quando inserisco nel mio campo di testo, la query esatta che viene eseguita è:

SELECT first_name, last_name FROM users WHERE user_id = '뼧';

Quindi sembra che non sia successo niente di speciale!

Dopo questo provo a creare un altro script PHP per capire cosa sta succedendo, quindi costruisco un semplice script senza alcuna esecuzione MySQL (test.php) come:

 <html>
 <head>
  <title>PHP Test</title>
 </head>
 <body>
 <?php 
$command = $_REQUEST[ 'id' ];;
$output = addslashes($command);
echo "<pre>$output</pre>"; ?> 
 </body>
</html>

Quindi eseguo il file con URL come:

http://127.0.0.1/test.php?id=뼧

E se vedi il codice PHP sopra riportato, echos:

뼧 

Il codice esadecimale di sopra 3 caratteri è:

eb bc a7

Bene, penso a quello che è successo,

Le mie domande sono:

  1. Quali sono 뼧 che mi ha mostrato? (Sembrava qualcosa di insolito perché non conteneva nulla come 5c o 27 ?

  2. Perché il primo script non mostra qualcosa come sopra tre caratteri in echo $query; ?

  3. Come posso eseguirlo veramente come descrivono (In 2 argomenti sopra)?

Aggiornamento 1: Grazie a ciò Goktay Kaykusuz dice che capisco che ho un problema nella mia codifica. il POC per questo è che lo collaudo su Terminale e cambia nuovamente:

<html>
 <head>
  <title>PHP Test</title>
 </head>
 <body>
 <pre>뼧</pre> </body>
</html>

quindi ho capito che converte il risultato in UTF8 (in Chrome) ma in Terminale funziona normalmente.

Ma il problema è ancora vivo perché funziona senza alcun aggiramento meraviglioso (è proprio quello che dovrebbe essere una semplice stringa.)

    
posta ᔕIᑎᗩ KᗩᖇᐯᗩᑎᗪI 11.07.2016 - 16:09
fonte

1 risposta

2

La cosa divertente, ho sperimentato con un convertitore di codifica online. Penso che tu abbia un problema di codifica sul lato client.

Quando ho incorporato la stringa all'interno del codice PHP, ha funzionato.

$test_var = chr(0xbf) . chr(0x27);
echo(bin2dex(addslashes($test_var)));

Risultato: bf5c27

Il problema si verifica quando ottieni la variabile dall'URL:

dopo addslashes () risulta in ebbca7

¿' dopo il risultato addslashes () in bf5c27

ma il convertitore di codifica online mostra bf27 per e bf 27 per ¿' .

Puoi impostare la codifica della tua configurazione PHP in GBK e UTF-8 in php.ini, quindi riprova con i caratteri ¿' ? Gli esempi nei link che hai fornito non riportano direttamente l'output in modo tale che tu possa essere codificato sul lato client come accennato.

    
risposta data 13.07.2016 - 18:27
fonte

Leggi altre domande sui tag