SQL Injection via mysql_query
Je travaille sur un site qui a été piraté par Injection SQL (à première vue seulement db entrées sont corrompus avec cross-site scripting) la vulnérabilité potentielle j'ai trouvé après avoir regardé le code, c'est qu'il y a beaucoup de mysql_query appel dont les entrées ne sont pas échappé à tous.
Le bon vieux :
$query = "SELECT * FROM mytable where name LIKE '%".$_GET['name']."%'"; /*HACK HERE*/
mysql_query($query, $connection);
Néanmoins je ne peux pas trouver comment pouvons-nous faire quelque chose de cool à partir de cette vulnérabilité d'injection (par le froid, je veux dire quelque chose comme une INSERTION ou une mise à JOUR). J'ai essayé de construire un énoncé comme celui-ci :
SELECT * FROM mytable where name LIKE '%' AND WHERE id IN (INSERT INTO secondtable (id,description) VALUES (15, 'Fifteenth description');--%'
Sans succès. Je suppose que l'INSERT n'a rien à faire ici.
Je suis d'échapper à toute l'utilisateur entrées dans le code de droit maintenant, mais je n'ai pas vraiment comment les pirates ont pénétré ce site, alors je ne suis pas sûr à 100% que mon correctif va faire le travail. Toute brillante des suggestions ?
Grâce
source d'informationauteur AsTeR
Vous devez vous connecter pour publier un commentaire.
Selon la version de mysql que vous utilisez, et la configuration de la connexion, mysql_query peut permettre plus qu'une seule déclaration.
Vous devriez regarder comment la connexion est en cours de création, et pour toute utilisation de mysql_set_server_option.
Parce que
mysql_query
n'est pas prise en charge de plusieurs requêtes, de Sorte que toute injection qui est en train de faire comme'; DROP TABLE mytable; --
ne sera pas couronnée de succès.Cependant, l'attaquant peut se combiner avec d'autres instruction select pour sélectionner les autres informations telles que le mot de passe info.
Possible scénario 1
La faiblesse des mots de passe/le hachage permettra à un attaquant pour sélectionner mot de passe administrateur.
Il serait sage de changer tous les mots de passe des administrateurs.
Maintenant, il a été un moment depuis n'importe quel php, mais en général, la plupart des accès aux données libs ont une sorte de sql paramétrée afin de réduire le risque. Un rapide google est venu avec cette pour php:
http://php.net/manual/en/pdo.prepared-statements.php
Les autres affiches ont déjà décrit comment faire une injection sql donc je ne vais pas entrer dans ce.
Je suis assez sûr qu'un hacker peut modifier la requête facilement. Même si mysql_query() ne prend pas en charge plusieurs requêtes, il ya des façons de contourner cela. vous pouvez simplement utiliser une base de données mysql SI ajouté à la fin, et bien sur qui va exécuter une complètement nouvelle requête.
donc