1 Oracle Il est facile de présenter Oracle comme une base de données SGBDR relativement ancienne avec une part de marché relativement importante et souvent utilisée dans de très grandes bases de données. En plus de sa bonne prise en charge de divers langages SQL, il fournit également une variété de packages riches, de procédures stockées et prend même en charge la création de Java et de bibliothèques. Ces fonctions puissantes offrent une bonne commodité pour le piratage.
Oracle lui-même possède de nombreux comptes par défaut et de nombreuses procédures stockées. Ces procédures stockées sont créées par le système. De nombreuses vulnérabilités Oracle ont été publiées au cours des dernières années, notamment le débordement et les failles SQL. y compris les injections. Ici, la vulnérabilité d'injection SQL est particulièrement importante, car dans Oracle, sans ajouter d'autres mots-clés AUTHID CURRENT_USER, le processus stocké créé s'exécute en tant que créateur lors de son exécution, et le public n'a pas accès à ces processus stockés. il y a une injection dans le processus stocké intégré, il est facile pour les utilisateurs ordinaires de passer aux autorisations du système Oracle. Oracle lui-même possède de nombreux comptes intégrés, dont certains ont des mots de passe par défaut et disposent d'autorisations CONNECT. De cette manière, si le port Oracle n'est pas protégé par un pare-feu et peut être connecté à distance, le compte par défaut peut être utilisé si vous vous connectez. dans le système à distance, puis utilisez le SQL du processus stocké dans le système pour injecter une vulnérabilité, le système plantera. Bien sûr, la connexion à Oracle nécessite un SID, mais ce n'est pas difficile. par défaut, vous pouvez donc utiliser tnscmd .pl utilise la commande services pour connaître le SID du système (dans les versions plus récentes, cette faille a été corrigée. C'est aussi un mode très classique d'invasion d'Oracle).
2 Contexte technique du piratage Web Oracle
Les riches tables système d'Oracle. Presque toutes les informations dans Oracle sont stockées dans des tables système. L'état actuel du fonctionnement de la base de données, les informations actuelles sur l'utilisateur, les informations actuelles sur la base de données, les informations sur les bases de données et les tables auxquelles les utilisateurs peuvent accéder... les tables système sont la partie centrale de l'ensemble de la base de données. obtenez toutes les informations en interrogeant les tables système dont vous avez un besoin urgent. Par exemple, sys.v_$option contient des informations sur la base de données actuelle, comme si elle prend en charge Java, etc., all_tables contient toutes les informations de la table, all_tab_colmuns contient toutes les informations des colonnes, etc., ce qui nous offre un très large moyen de obtenir des informations. Commodité, sera lié plus tard à la description de la façon d'utiliser les tables système pour obtenir des informations sensibles.
Parmi les différentes vulnérabilités d'Oracle, il est urgent de parler de l'injection de procédures stockées. En fait, il n'y a pas de mystère. Les procédures et fonctions stockées reçoivent également les entrées de l'utilisateur puis les envoient au serveur de base de données pour analyse et exécution. est sélectionné Si le schéma est construit dans une chaîne SQL et implémenté, il est facile de mélanger des données et des commandes, ce qui entraîne une injection SQL. Mais selon l’endroit où l’injection a lieu, la nature de la vulnérabilité d’injection est également différente. Oracle utilise PL/SQL et la vulnérabilité se produit dans les langages DML tels que Select, car il ne prend pas en charge la mise en œuvre de plusieurs langages, si vous souhaitez exécuter vos propres langages tels que GRANT DBA TO LOVEHSELL et d'autres langages DDL. , vous devez créer vos propres fonctions ou procédures stockées, si vous ne disposez pas des autorisations appropriées, vous pouvez également utiliser l'injection de curseur et utiliser le package dbms_sql pour contourner les restrictions. La plupart des injections sont les injections limitées ci-dessus. Vous devez vous fier à d'autres packages ou curseurs créés par vous-même pour atteindre l'objectif d'augmenter les autorisations. Cependant, il existe encore des vulnérabilités très courantes, mais l'environnement d'injection est très lâche, ce qui est le cas de l'utilisateur. input. L'injection du bloc pl/sql anonyme placé entre le début et la fin. Dans ce cas, l'injection peut être directement injectée dans plusieurs mots, sans presque aucune restriction. On voit que c'est ce genre de vulnérabilité brillante qui crée. le problème de notre web. La technologie d'injection a ramené un tel éclat.
D'accord, les technologies mentionnées ci-dessus font partie des technologies offensives d'Oracle, mais dans de nombreux environnements actuels, les services Web sont ouverts au monde extérieur et la base de données du boss backend est protégée par un pare-feu. Il est impossible de perdre trop d'informations détaillées sur la base de données. , et il n'est plus possible de se connecter directement. La base de données est actuellement opérationnelle, il est temps d'envisager d'utiliser les vulnérabilités arrêtées par le Web pour attaquer la base de données de sauvegarde. Voyons maintenant comment développer des injections dans l'environnement Web Oracle ! Oracle peut bien fonctionner dans divers environnements Web, et l'impact de divers environnements Web sur nos injections n'est pas grand. En asp, .net et jsp, c'est le cas. les paramètres entrants ne sont pas du tout filtrés, mais comme les langages .net et jsp sont des langages de catégories forts, même si le langage SQL n'est pas filtré lorsqu'il s'agit d'injections numériques, des erreurs peuvent survenir lors de l'acceptation des paramètres. La classe string a plus de paramètres. Dans l'environnement php, tous les ' seront échappés comme ', dans l'environnement oracle ' ne seront pas échappés (l'échappement correct dans l'environnement oracle devrait être ''), mais dans le nôtre L'utilisation de 'dans le discours d'injection peut être endommagé en étant converti en ', il ne peut donc pas être utilisé pendant l'injection'. Sauf qu’il n’y a aucune restriction dans l’environnement Web. En termes de base de données, si le discours est exécuté en mode paramètre, il ne peut être injecté que si le mode de connexion par chaîne est utilisé (car le mode de connexion par chaîne est relativement simple, et pour des raisons historiques, de nombreux programmeurs cette forme est souvent préférée, ). Le mode de connexion par chaîne sera également divisé en deux types. Les paramètres sont dans les mots DML tels que select, update et insert, et les paramètres sont dans le bloc anonyme pl/sql. erreur, Nous pouvons alors facilement juger de la catégorie du discours actuel en fonction de l'erreur, qui sera discutée plus tard. C'est relativement rare dans le bloc anonyme pl/sql, mais il n'est pas exclu qu'il n'y ait aucune limite à une telle injection. Vous pouvez implémenter plusieurs conversations et faire n'importe quoi, ce qui n'est pas différent de la connexion locale.
3 idées de base d'Oracle Web Hacking
La partie suivante explique comment déterminer la cible. La détermination des paramètres d'injection dépend de chacun. L'essentiel est de savoir comment déterminer si la base de données appartient à Oracle. Il est facile de le déterminer en fonction des caractéristiques de la base de données. prend en charge l'interprétation --category, mais ne la prend pas en charge ; implémentation séparée En termes simples, Oracle possède de nombreuses tables système, telles que all_tables, et vous pouvez également déterminer si elle appartient à Oracle. De plus, certaines fonctions d'Oracle le peuvent. peut également être utilisé pour déterminer, comme utl_http.request, la langue. De petits détails peuvent également être utilisés pour distinguer les systèmes. Par exemple, || est un symbole de jointure dans Oracle, mais pas dans d'autres bases de données. La raison et chr(123)|. |chr(123)=chr(123)| |chr(123) S'il peut être exécuté avec succès, il doit s'agir d'Oracle. De plus, certains scripts ne gèrent pas le message d'erreur lorsqu'une erreur de requête de base de données se produit et peuvent également fuir. la véritable base de données de support. Cela se voit clairement.
La prochaine chose qui doit être déterminée de toute urgence est le type de point d'injection. Habituellement, les paramètres que nous saisissons sont soit numériques, soit simplement caractères (ce que beaucoup d'autres appellent l'injection de type recherche devrait en fait être classé comme caractère , comme pour le). catégorie numérique, ne pensez à rien du tout. Il est très simple d'ajouter des caractères d'interprétation pour que l'énoncé soit correctement fermé. S'il s'agit de la catégorie de caractères, vous devrez réfléchir à la manière de rendre l'énoncé entier précis. en ajoutant généralement ' et - ces caractères d'injection. Pour organiser votre propre situation d'injection. Dans certaines situations complexes, comme un paramètre apparaissant dans plusieurs mots SQL et logique, vous devrez structurer soigneusement les mots d'injection adaptés à la situation. N'oubliez pas que nous n'avons besoin que d'un environnement complet pouvant facilement organiser diverses commandes SQL :)